static和final关键字,是Java基础中的基础,一定要很好的把他们理解,以便在今后更加灵活的应用。
一、static关键字
1、static修饰类,只能修饰内部类,被static修饰的内部类不需要实例一个外部类来调用这个内部类
不用static修饰内部类的情况,需要实例一个外部类的对象才能调用内部类,并且还需要new一个内部类出来
public class OuterClass { public class InnerClass { InnerClass() { System.out.println("==== 我是一个内部类'InnerClass' ===="); } } public static void main(String[] args) { OuterClass oc = new OuterClass(); oc.new InnerClass(); } }
用static修饰内部类后,直接new一个外部类调用内部类
public class OuterClass { public static class InnerClass { InnerClass() { System.out.println("==== 我是一个内部类'InnerClass' ===="); } } public static void main(String[] args) { new OuterClass.InnerClass(); } }
2、static修饰静态代码块,代码块最先执行,且只在第一次运行时加载一次,一般用来执行类属性的初始化
静态代码块的执行顺序是这样的:
比如执行new child()时,
先执行父类静态代码块,然后执行本类静态代码块,
接着父类普通代码块,父类的构造方法,
本类的普通代码块,本类的构造方法。
3、static修饰静态方法,在类加载的时候就存在了,静态方法不需要new一个实例,直接类名.方法名就可以调用。
使用静态方法需要注意:
只能调用同类中其他的静态成员,不能访问类中的非静态成员。非静态成员需要实例化对象才能使用。
不能以任何方式引用this、super关键字。因为静态方法调用时,它们所引用的对象根本就没有产生。
4、static修饰变量,只为它分配一次内存,它是类的所属,所有对象都公用这一属性。实质上是全局变量。
使用静态变量需注意:因为它是属于类的而不是属于对象,不能在方法体内声明静态变量
可以这样理解:比如姚明和刘翔等等一些运动员从事的运动不同,身高体重不同(每个对象都有不同的属性)
但他们都是中国人的,如果存储他们的信息,那么国籍这个属性用static修饰比较好,特别方便。
二、final关键字
1、final修饰类,不能被继承,并且它所有的方法都为隐式的final方法。
2、final修饰方法,不能被重写。
3、final修饰变量,目的是阻止它的内容被修改,实质上是一个常量。
主要还是说他引用的地址不可改变,比如说如果是StringBuilder对象,还是可以通过append来改变值的。
4、final修饰方法参数,在传参的时候就已经初始化了,在方法中无法改变该值。
5、final不可以修饰构造方法。
总结
final和static关键字在平时的运用中很重要,一定要更好的理解,可以找一些例子来加深记忆,尤其在面试的时候问到这个问题时,一定要清楚的阐述,要有一个顺序,就像我写的是从类到变量的一个大体的阐述。