Java中静态代码块的用法

来源:互联网 发布:tensorflow wordvec 编辑:程序博客网 时间:2024/06/04 08:34

Java中静态代码块的用法

  1. java静态代码块 静态方法 区别
    一般情况下,有些代码必须在项目启动的时候就执行,需要使用静态代码块,它是自动执行的;
    需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,是在被调用的时候才执行的,静态方法在类加载的时候就已经加载,可以使用类名直接调用
    使用静态方法时注意
    1)在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员 :::因为对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
    2)静态方法不能以任何方式引用this和super关键字。
  2. 静态代码块的初始化顺序
 class Parent{     static String name = "hello";     {         System.out.println("parent block");     }     static {         System.out.println("parent static block");     }     public Parent(){         System.out.println("parent constructor");     } } class Child extends Parent{     static String childName = "hello";     {         System.out.println("child block");     }     static {         System.out.println("child static block");     }     public Child(){         System.out.println("child constructor");     } } public class StaticIniBlockOrderTest {     public static void main(String[] args) {         new Child();//语句(*)     } }

打印的顺序是
parent static block
child static block
parent block
parent constructor
child block
child constructor
原因:
首先看父类里面有没有静态代码块,如果有,它会先执行父类里面静态代码块的内容,当父类的静态代码块内的内容执行完毕之后,再去执行子类的静态代码块;再看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,再去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法

注意
子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法,如果父类没有不带参数的构造方法,那么子类必须用super关键字来调用父类带参数的构造方法,否则编译不能通过

原创粉丝点击