1.static 关键字,可以修饰属性,类,方法
2.static修饰属性时,无论一个累生成了多少实例,所有这些实例共享唯一一份静态成员变量。一个实例对静态变量进行修改,其他实例的该静态成员变量的值也会随之变化。如果一个成员变量是static的,那么一般通过,类名.成员变量名的方式来使用。
3.static修饰方法。静态方法,子类可以继承静态方法,但不可以重写静态方法。也是用类名.方法名的方式来使用。
public class Test{
public static viod main(String[] args){
M m = new N();
m.output();//会输出M。 因为N继承了M 中的静态方法,但不可重写静态方法,所以输出M
N n = new N();
n.output();//会输出N
}
}
class M{
public static void output(){
System.out.println("M");
}
}
class N extends M{
public static void output(){
System.out.println("N");
}
}
4.final关键字,修饰属性、类、方法
a)当final修饰类的时候,表示是个终态类,不能被继承。
b)当final修饰方法时候,表示是个终态方法,不能被重写(override)
c)当final修饰属性时,表示该属性不能被改写。
5.当final修饰原生数据类型时,表示该原生数据的值不能被改变(即怒不可有0变为10);当final指向一个引用类型时,表示该引用不能指向其他的对象了,但该引用指向的对象的值是可以改变的。
6.对于final类型的成员变量,一般说2中赋初值得方法。
a) 在声明final类型成员变量时就赋上初值。
b)在声明final类型成员变量时没有赋上初值,但在类的构造方法上附上初值。
7.static :静态代码块(先于构造方法执行,也就是生成实例)。静态代码块在java虚拟机上就已经执行了。
静态代码块的作用就是完成一些初始化工作,先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成实例的时候执行。想调用某个类生成实例,首先先将类加载到java虚拟机上,然后由java虚拟机加载这个类来生成对象。
8.类的静态代码块只会被执行一次,是类被加载的时候执行的。因为每个类只加载一次,所以静态代码块只会被执行一次。而构造方法则不同,每次生成一个实例,都会调用类的构造方法,new一次,调用构造方法一次。
9.如果继承体系,既有静态代码块,又有构造方法,那么授限制性最顶层的静态代码块,一直执行到最底层的静态代码块。然后执行最顶层构造方法,一直待最底层构造方法。
10.静态方法只能访问静态成员变量,非静态方法,可以访问一切。
11.不能再静态方法中使用this关键字。因为,this是对当前实例的引用,但静态方法可以不生成对象,直接用类来调用,那这时候是什么对象呢,所以不能用this。