两个例子充分理解静态变量,方法调用次序
来源:互联网 发布:孙俪开的淘宝店叫什么 编辑:程序博客网 时间:2024/05/17 03:21
public
class
Test {
Person person =
new
Person(
"Test"
);
static
{
System.out.println(
"test static"
);
}
public
Test() {
System.out.println(
"test constructor"
);
}
public
static
void
main(String[] args) {
new
MyClass();
}
}
class
Person{
static
{
System.out.println(
"person static"
);
}
public
Person(String str) {
System.out.println(
"person "
+str);
}
}
class
MyClass
extends
Test {
Person person =
new
Person(
"MyClass"
);
static
{
System.out.println(
"myclass static"
);
}
public
MyClass() {
System.out.println(
"myclass constructor"
);
}
}
输出结果:
test staticmyclass staticperson staticperson Testtest constructorperson MyClassmyclass constructor
我们还是来想一下这段代码的具体执行过程。首先加载Test类,因此会执行Test类中的static块。接着执行new MyClass(),
而MyClass类还没有被加载,因此需要加载MyClass类。在加载MyClass类的时候,发现MyClass类继承自Test类,
但是由于Test类已经被加载了,所以只需要加载MyClass类,那么就会执行MyClass类的中的static块。在加载完之后,
就通过构造器来生成对象。而在生成对象的时候,必须先初始化父类的成员变量,因此会执行Test中的Person person = new Person(),
而Person类还没有被加载过,因此会先加载Person类并执行Person类中的static块,接着执行父类的构造器,完成了父类的初始化,
然后就来初始化自身了,因此会接着执行MyClass中的Person person = new Person(),最后执行MyClass的构造器。
public
class
Test {
static
{
System.out.println(
"test static 1"
);
}
public
static
void
main(String[] args) {
}
static
{
System.out.println(
"test static 2"
);
}
}
test static 1test static 2
0 0
- 两个例子充分理解静态变量,方法调用次序
- AppDelegate方法调用次序
- java静态变量,静态方法的理解
- 静态变量/静态方法调用的注意事项
- [java]静态方法不能调用静态变量
- 个人对静态类、静态方法、静态变量的理解
- 静态成员变量及方法的调用
- 静态成员变量及方法的调用
- 静态方法可以调用成员变量吗?
- c#静态方法或者变量的调用
- virtual、abstract方法和静态方法、静态变量理解
- 静态方法不能调用非静态变量,非静态方法可以引用静态变量
- #java#静态方法如何调用非静态方法和变量
- 理解类中的静态变量与静态方法
- 静态方法不可调用非静态成员变量,Why?
- Java中的静态方法调用静态成员变量
- java构造方法、静态变量初始化顺序的小例子
- static的一个例子(静态变量、静态方法、静态块)
- JavaScript 库
- 按键中断驱动
- 大数据的关键技术与综述
- 【word】空格删字
- CentOS yum安装mcrypt详细图解教程
- 两个例子充分理解静态变量,方法调用次序
- ionic中index.html页面中有ion-nav-bar时如何加二级标题栏
- ios 获取屏幕的属性和宽度
- Linux更换jdk版本,java -version还是原来的版本问题
- 实现PDF转换HTML页面的操作方法
- 一张图读懂Java多线程
- PowerDesigner之PDM(物理概念模型)
- 【word】word跨页不断行问题
- python中如何用正则表达式匹配汉字