程序执行顺序
2012-06-25 19:13
127 查看
public class TestA {
public TestA(String a){
System.out.println(a);
}
}
/**类B**/
public class TestB {
public TestB(String b){
System.out.println(b);
}
}
/**类 Parent **/
public class Parent {
private static TestA testA1 = new TestA("Parent的静态变量");
static {
System.out.println("Parent的静态初始化模块");
}
private TestA testA2 = newTestA("Parent变量");
{
System.out.println("Parent的初始化模块");
}
public Parent(){
System.out.println("Parent的构造函数");
}
}
/**Parent的子类SubClass**/
public class SubClass extends Parent{
private static TestA testA1 = new TestA("SubClass的静态变量1");
static {
System.out.println("SubClass的静态初始化模块1");
}
private static TestA testA2 = new TestA("SubClass的静态变量2");
static {
System.out.println("SubClass的静态初始化模块2");
}
private TestA testA3 = newTestA("SubClass变量1");
{
System.out.println("SubClass的初始化模块1");
}
private TestA testA4 = newTestA("SubClass变量2");
{
System.out.println("SubClass的初始化模块2");
}
public SubClass(){
System.out.println("SubClass的构造函数");
}
publicstatic void main(String[] args) {
SubClass subClass = new SubClass();
}
}
打印结果如下:
Parent的静态变量
Parent的静态初始化模块
SubClass的静态变量1
SubClass的静态初始化模块1
SubClass的静态变量2
SubClass的静态初始化模块2
Parent变量
Parent的初始化模块
Parent的构造函数
SubClass变量1
SubClass的初始化模块1
SubClass变量2
SubClass的初始化模块2
SubClass的构造函数
说明 :
1.静态变量与静态模块是最先初始化的,因为它是属于类的变量和模块.
2.Parent的构造器要先于它的子类,这一点是肯定的,但Parent的变量,初始化模块要先于它的子类,这一点可能理解起来有点困难,但我们只要知道父类的构造器先于子类,它的变量与模块也是理所当然的,这样理解起来会比较合理.
3.静态变量与静态模块的初始化顺序是根据在类里面定义的顺序,同理变量化初始化模块的顺序也是根据类里面定义的顺序(上面结果的红色部门)
public TestA(String a){
System.out.println(a);
}
}
/**类B**/
public class TestB {
public TestB(String b){
System.out.println(b);
}
}
/**类 Parent **/
public class Parent {
private static TestA testA1 = new TestA("Parent的静态变量");
static {
System.out.println("Parent的静态初始化模块");
}
private TestA testA2 = newTestA("Parent变量");
{
System.out.println("Parent的初始化模块");
}
public Parent(){
System.out.println("Parent的构造函数");
}
}
/**Parent的子类SubClass**/
public class SubClass extends Parent{
private static TestA testA1 = new TestA("SubClass的静态变量1");
static {
System.out.println("SubClass的静态初始化模块1");
}
private static TestA testA2 = new TestA("SubClass的静态变量2");
static {
System.out.println("SubClass的静态初始化模块2");
}
private TestA testA3 = newTestA("SubClass变量1");
{
System.out.println("SubClass的初始化模块1");
}
private TestA testA4 = newTestA("SubClass变量2");
{
System.out.println("SubClass的初始化模块2");
}
public SubClass(){
System.out.println("SubClass的构造函数");
}
publicstatic void main(String[] args) {
SubClass subClass = new SubClass();
}
}
打印结果如下:
Parent的静态变量
Parent的静态初始化模块
SubClass的静态变量1
SubClass的静态初始化模块1
SubClass的静态变量2
SubClass的静态初始化模块2
Parent变量
Parent的初始化模块
Parent的构造函数
SubClass变量1
SubClass的初始化模块1
SubClass变量2
SubClass的初始化模块2
SubClass的构造函数
说明 :
1.静态变量与静态模块是最先初始化的,因为它是属于类的变量和模块.
2.Parent的构造器要先于它的子类,这一点是肯定的,但Parent的变量,初始化模块要先于它的子类,这一点可能理解起来有点困难,但我们只要知道父类的构造器先于子类,它的变量与模块也是理所当然的,这样理解起来会比较合理.
3.静态变量与静态模块的初始化顺序是根据在类里面定义的顺序,同理变量化初始化模块的顺序也是根据类里面定义的顺序(上面结果的红色部门)
相关文章推荐
- MFC程序执行顺序 .
- java 程序初始化执行先后顺序
- UI基础:UI程序执行顺序(UIApplicationMain()函数),自定义视图
- 程序的执行顺序
- UIViewController的生命周期及iOS程序执行顺序
- MFC的程序执行顺序
- Spring,启动程序后顺序执行指定操作
- java程序的执行顺序
- js 程序执行与顺序实现详解
- 创建一个类的对象时,程序的执行顺序(C#)
- Java 程序执行顺序
- iOS UIViewController的生命周期及iOS程序执行顺序
- linux中程序的执行顺序及调整
- MFC程序执行顺序
- UIViewController的生命周期及iOS程序执行顺序
- UIViewController的生命周期及iOS程序执行顺序
- Flex 程序执行顺序!
- UIViewController的生命周期及iOS程序执行顺序
- iOS程序执行顺序和UIViewController 的生命周期(整理)
- UIViewController的生命周期及iOS程序执行顺序