对java中static的认识
1、首先说stat坡纠课柩ic修饰字段:static用于修饰字段,则这个属性就是一个类的静态变量,这个变量就相当于一个全局变量,拎枋辏话都可以通过类名+字段名获取;当然类的属性是有访问权限的,如果用public修饰,则可以在程序中的任何地方都可以通过上述方式访问。static修饰方法,和字段一样,通过类名+方法名进行访问,因为是类的方法,所以不需要创建一个对象,就可以直接调用,静态方法常用于工具类的编写。
2、重点:静态代码块。对于静态方法和静态变量,应该都比较熟悉,但是静态代码块可能有些人开发了好几年都不曾接触。有过web开发经验的同学们,应该知道,在连接数据库操作时(最早的接触连接数据库的方法,瑕铆幌约加载驱动、创建连接、、、、),在加载驱动是只有一句话Class.forName("classpath");这句话怎么就加载驱动了,也没有创建对象,其实他就是通过执行类的静态代码块来加载的驱动。
3、而Class.forName();方法的作用是把一个类加载到虚拟机中,并返回类的引用。而在这个过程中就会对类进行初始,初始化的时候,就会执行静态变量和静态代码块,初始化完成后,返回这个类的引用。写一个测试类,使用Class.forName()去获取类,看看其执行的过程。可以看到静态代码块执行了。
4、类的静态代码块都是什么时候执行哪,或者换一种说法就是类什么时候初始化哪,有大概以下几种情况:(1)调用类的静态字段
5、(2)调用类的静态方法
6、(3)如果类有main方法,运行main方法时,会执行这个类的静态元素
7、(4)调用java中的反射方法,Class类中的方法,或者java.lang.reflect包中的类。比如上面说的Class.forName(A)方法,就是通过反射去初始化类A。
8、(5)new一个对象时,这个不用说,实例化之前,类必须要初始化。
9、(6)初始化某个类的子类时:这也就是说初始化机制是先初始化其超类,超类如果还有超类,也回先初始化超类的超类、、、、
10、最后一点和类的实例化很像,类的实例化也是总会先实例化其超类,通过调用超类的构造方法。不指定构造方法,就是调用超类的无参构造方法;指定构造方法,需将指定构造方法的代码放在子类构造方法内容的第一行;