本帖最后由 ameanboy 于 2016-3-22 23:55 编辑
前一段时间这部分概念非常的迷,最近理了一下,代码说明下~其实挺简单的~~
- public class ConstructorAndConsChunk {
-
- private String name = "默认值";
- public ConstructorAndConsChunk() {
- name = "张三";
- System.out.println("无参构造函数被执行");
- }
-
-
-
- public ConstructorAndConsChunk(String name) {
- super();
- this.name = name;
- }
- public void print(){
- System.out.println("执行了方法"+" "+name);
- }
-
- {
- System.out.println("构造代码块被执行"+name);
- }
-
- static{
- System.out.println("静态代码块被执行");
- }
- }
复制代码
测试代码
- public class ConstructorTest {
- public static void main(String[] args) {
- System.out.println("主方法开始"); //以前最迷的就是这个部分,静态代码块在类加载到方法区的时候执行,且只执行一次
- ConstructorAndConsChunk c = new ConstructorAndConsChunk();
- c.print();
- System.out.println("------------------------");
- ConstructorAndConsChunk c1 = new ConstructorAndConsChunk("李四");
- c1.print();
- }
- }
复制代码
运行结果为:
- 主方法开始
- 静态代码块被执行
- 构造代码块被执行默认值
- 无参构造函数被执行
- 执行了方法 张三
- ------------------------
- 构造代码块被执行默认值
- 有参构造被执行
- 执行了方法 李四
复制代码 但是,如果在含有静态代码块的类里使用主方法,例如:- public class ConstructorAndConsChunk {
- private String name = "默认值";
- public static void main(String[] args) {
- System.out.println("主方法被执行");
- ConstructorAndConsChunk c = new ConstructorAndConsChunk();
- c.print();
- }
- public ConstructorAndConsChunk() {
- name = "张三";
- System.out.println("无参构造函数被执行");
- }
- public ConstructorAndConsChunk(String name) {
- System.out.println("有参构造被执行");
- this.name = name;
- }
- public void print() {
- System.out.println("执行了方法" + " " + name);
- }
- {
- System.out.println("构造代码块被执行" + name);
- }
- static {
- System.out.println("静态代码块被执行");
- }
- }
复制代码 那么执行结果变成:
- 静态代码块被执行
- 主方法被执行
- 构造代码块被执行默认值
- 无参构造函数被执行
- 执行了方法 张三
复制代码 所以:静态代码块总是在类加载的时候执行且执行一次,如果与主方法处于同一个类,那么先于主方法执行
构造代码块在每次创建对象的时候都会执行
|
|