一、static关键字
static表示静态的意思,可以用来修饰属性和方法,也可以修饰构造块,形成静态代码块。注意static不能修饰类,但是能修饰内部类。
1.静态变量:被static修饰的变量为静态变量,没有被static修饰的变量为实例变量。JVM只为静态变量分配一次内存,访问的时候可以用类名直接访问,而且生命周期比较长,与类同生同死;而实例变量,创建一次就会分配一次内存,所以有时候会造成内存的浪费。
2.静态方法:被static修饰的方法为静态方法。静态方法调用起来特别方便,直接类名调用即可,不用再创建对象。在静态方法中不可以直接访问实例变量和实例方法,也就是说在静态成员中不可以调用非静态成员,但是非静态成员可以调用静态成员。在Java中Math类的所有方法都是静态的,为了方便用户使用。
3.静态代码块:被static修饰的代码块为静态代码块,是在类中独立于类成员的static语句块,它可以有多个,位置也可以随意。静态代码块属于类,在JVM加载类的时候会执行这些静态代码块,但是只会执行一次。如果有多个静态代码块,就会按照顺序进行执行。
二、final关键字
final表示最终的,最后的,可以用来修饰类、方法和变量(包括局部变量和全局变量)
1.修饰类:final修饰的类不能被继承,当一个类你永远不会让他被继承的时候,就可以使用final来进行修饰,在使用的时候一定要谨慎。Java中的Math类就是被final修饰的,所以它不能被继承。
2.修饰方法:final修饰的方法不能被重写,这样可以防止继承类来修改它的含义。
3.修饰变量:final修饰的变量的值不能被改变。如果修饰的是基本数据类型的变量,其数值一旦初始化就不能更改了;如果修饰的是引用类型的变量,则在对其初始化后就不能改变它的引用,也就是说不能让其再指向其他的对象。被final修饰的变量只能赋值一次,所以必须赋初值。
三、static和final一起使用
static final可以用来修饰变量和方法。对于被修饰的变量,就变成常量了,一旦赋值就不可改变,可以通过类名进行访问;遂于被修饰的方法,就是结合了static和final修饰方法的作用。
















