实例块
实例块就是一个划分的代码区域。{ 代码 }
1.它是在构造器之前执行。
2.它和属性初始化一同执行。
3.一个类中可以有很多个实例块。
4. 多个实例块执行顺序是按照顺序从上到下执行。
public class Test3 { { System.out.println("我是实例块!"); } }静态块
静态块是类加载的时候和静态属性一起执行的。也是按顺序从上往下执行。
public class Test3 { static{ System.out.println("我是静态块!"); } }
那么类是在什么情况下会加载呢?
1.在声明静态属性但并没有使用属性时,不会对类进行加载。使用静态属性时才会对类进行加载。
2.声明或使用常量时都不会对类进行加载,因为常量的内存和类成员的内存不在同一内存内。
3.使用静态方法或new肯定会加载类。
4.加载类方法:class.forName( 类的全名 )
怪题:
main方法中,new Test1();,然而Test1类中又new Test1,因为new对象的时候肯定会加载类,然而加载类其实就是加载静态属性,所以这就成了死循环。报出方法嵌套调用溢出的错误:java.lang.StackOverflowError