黑马程序员技术交流社区
标题:
关于构造函数,构造代码块,静态代码块
[打印本页]
作者:
ameanboy
时间:
2016-3-22 23:42
标题:
关于构造函数,构造代码块,静态代码块
本帖最后由 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("静态代码块被执行");
}
}
复制代码
那么执行结果变成:
静态代码块被执行
主方法被执行
构造代码块被执行默认值
无参构造函数被执行
执行了方法 张三
复制代码
所以:
静态代码块总是在类加载的时候执行且执行一次,如果与主方法处于同一个类,那么先于主方法执行
构造代码块在每次创建对象的时候都会执行
作者:
ambition1
时间:
2016-4-9 22:15
.看了你发的帖子,感觉你很有想法.你入学流程走到哪里了?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2