java中的static和final关键字
static
关键字,修饰符---可以修饰变量、方法、代码块、内部类
1.静态变量(全局变量)
a.静态变量随着类的加载(方法区的静态常量池)而加载到方法区的静态区,与类同级也叫类变量,通过类名.形式来调用静态变量也可以通过对象来调用静态变量。
b.存储在方法区静态区时会默认给静态变量赋予系统默认初始值。
c.类产生的对象共享同一个静态变量(属性)。
d.看静态变量是否需要被所有的对象来共享,如果需要共享就设置成静态变量。
e.方法里不可以定义静态变量:
静态变量与类同级,但是只有方法被调用时里面的内容才能出现,前后矛盾,不能定义。
2.静态方法
a.静态方法会随着类的加载而加载到方法区的静态区,与类同级也叫类方法,通过类名.形式来调用也可以通过对象调用。
b.静态区不会对静态方法赋予初始值但是被调用就会被加载到栈中执行。
c.支持重载
d.不支持重写(静态方法与类同级,重写针对的是对象,级别不一样,静态方法没有提供重写。父子类中只能出现方法签名一致的非静态方法【有重写】要么都是静态方法【没有重写】)
e.Java中静态方法只能直接使用静态信息,但是非静态方法可以直接使用非静态信息以及静态信息.
(先出现的静态方法拿不到后出现的非静态信息)
3.静态代码块
a.可以给静态变量进行初始化
b.预先加载资源
c.随着类的加载而加载只加载一次
d.static修饰的静态信息都只加载一次
e.父子类执行顺序(父类静态信息--子类静态信息--父类对象级别信息--子类对象级别信息)
final(最终)
关键字,修饰符---数据、方法、类
1.最终值
a.当final修饰基本数据类型时,值不能改变
b.当final修饰引用数据类型时,地址值不能改变
c.当final修饰成员变量时,保证对象创建完成之前给值
d.当final修饰静态变量时(静态常量),保证类加载完成之前给值
2.最终方法
a.支持重载
b.不支持重写(用public和final修饰的方法是不想被重写但是想让外界可以调用的方法)
3.最终类
可以继承别的类,但是不能被别的类继承