天天看点

static 静态1.方法与字段2.语句块3.内部类

表明它为这个类的成员共有。

static 静态1.方法与字段2.语句块3.内部类

类加载器对static 字段/函数 的处理过程见下。

按照静态字段或函数的出现顺序依次初始化。所以下面的代码会报错。

static 静态1.方法与字段2.语句块3.内部类

java不能有静态抽象方法。

抽象类可以有静态方法,但不能有抽象静态方法。

百度知道有这么一个回答:

抽象类一定有抽象方法吗?我来说说吧,静态是属于字节码的;一个抽象类可以没有抽象方法,只是为了不让别人来实例化它; 以上两点可以说明,静态方法只要有字节码存在就可以运行,所以抽象类中可以有静态方法。 我再多说一嘴,静态和抽象不能共存与方法上,因为静态属于字节码,不需要对象就可以运行,而抽象方法没有方法体,运行没有意义,所以不能共存。

static后直接跟大括号。当第一次用到这个类时,里面的语句得到执行。

static 静态1.方法与字段2.语句块3.内部类

何为第一次?

答:使用 class<?>[] java.lang.class.getclasses()是不行的,即使用a.class.getclassloader()不能执行到a类的static{}块。

需要使用class<?> java.lang.class.forname(string classname) 才可以。jdk中该函数的源码见下:

所以可以用这种方法避免延迟加载,例如程序启动时就初始化好dao层的连接池等,避免业务第一次访问时才初始化,不让用户等。

static 静态1.方法与字段2.语句块3.内部类

个人觉得这是构造函数需要做的事情。而现在变成了没名字的语句块,囧。