在java应用程序中,main()方法是程序的入口,最先执行!
创新互联公司成立于2013年,先为辽宁等服务建站,辽宁等地企业,进行企业商务咨询服务。为辽宁企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
但是在Applet程序中是没main()方法的,init()方法会自动执行!谁先谁后,自己清楚了吧!
package org;
public class Demo {
public static void main(String[] args) throws Throwable {
/*
* 步骤 1
*
* 首先声明并初实例了一个A类的对象:a
* 程序则进入了类A当中
*/
A a = new A();
/*
* 步骤 5
*
* 通过以上步骤的判断,程序的执行顺序就显而易见了~~~
*
* 下面是执行顺序:
*
* 类AA 静态属性 b2 ---------结果:2
* 类AA 静态块 static{} ----结果:4
* 类A 静态属性 b2 ----------结果:6
* 类AA 非静态属性 b1 -------结果:3
* 类AA 非静态方法 AA() -----结果:1
* 类A 非静态属性 b1 --------结果:5
* 类A 非静态方法 A() -------结果:7
*
*/
}
}
class AA {
/*
* 步骤 3
*
* 类AA中存在着:
* 1个静态属性 b2
* 1个静态块 static{}
* 一个非静态属性 b1
* 一个构造方法 AA()
*/
public AA() {
System.out.println("1");
}
public static B b2 = new B("2");
private B b1 = new B("3");
static {
B b3 = new B("4");
}
}
class A extends AA {
/*
* 步骤 2
*
* 因为类A继承自类AA
* 所以当类A被实例化的时候会先执行类A的父类(AA)
*
* 程序会对比类A和其父类AA
*
* 此时则是程序执行编译顺序的关键所在
*
* 属性的优先级要大于方法的优先级
* 静态属性的优先级要大于非静态属性
* 静态方法(包括静态块)的优先级要大于非静态方法(包括构造方法)
*
* 总结起来就是:静态属性非静态属性静态方法非静态方法
*
* 而在子类与父类中的执行编译顺序则为:(由上至下)
*
* (父类)静态属性
* (父类)静态方法
* (子类)静态属性
* (子类)静态方法
* (父类)非静态属性
* (父类)非静态方法
* (子类)非静态属性
* (子类)非静态方法
*
* 所以程序进入到了类AA中并与类A进行比较!!
*/
/*
* 步骤 4
*
* 类A中存在着:
*
* 一个静态属性 b2
* 一个非静态属性 b1
* 一个构造函数 A()
*/
private B b1 = new B("5");
private static B b2 = new B("6");
public A() {
System.out.println("7");
}
}
class B {
public B(String str) {
System.out.println(str);
}
}
不知道我的解释你能不能理解~~ 希望对你会有帮助!!
如果哪里没看懂就补充问题吧~~我经常来的!!祝你好运!!
这两句话只是设置属性啊。
file.setSize(200,300);
file.setVisible(true);
不会最后执行的。你打个断点在
file.Calendar();//显示当前日期
,然后看file属性,应该是会被改变的
先后顺序如下!
1.静态块
2.块
3.构造器
4.父类构造器
运行顺序为:
1. 静态块
2. 父类构造器
3. 本类中的块
4. 本类的构造器