对象初始化过程 哪位大侠分析下对象初化过程。有继承关系时和单个类时初始化有哪些区别呢?能分别详细分析更好,先谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ,可以看下这个帖http://topic.csdn.net/u/20080402/21/6e9dc1dc-6ae5-4f41-a331-bbc74eb5b465.html package zhao;public class Test2 extends AA { static int age = 20;// 3 String code = "ANA";//8 static { System.out.println("Test2 class static--------" + age);// 4 } { System.out.println("Test2 class not static--------" + code);//9 } Test2() { code = "DHC"; System.out.println("Test2()--------" + age);//10 } public static void main(String[] args) { try { Class.forName("zhao.Test2"); } catch (ClassNotFoundException e) { e.printStackTrace(); } new Test2(); }}class AA { static String tel = "123"; // 1 String name = "zhao";// 5 static { System.out.println("AA class static--------" + tel);// 2 } { System.out.println("AA class not static--------" + name);//6 } AA() { name = "kimi"; System.out.println("AA()--------" + tel);//7 }} class Cup{ Cup(int er) { System.out.println("Cup (" + er + " )"); } void f(int er) { System.out.println("f( " + er + " )"); }};class Cups{ static Cup cup1; static Cup cup2; static //静态子句,或者说是"静态块" { cup1 = new Cup(1); cup2 = new Cup(2); } Cups() { System.out.println("Cups"); }};public class P97{ public static void main(String[] args) { Cups.cup1.f(3); //访问静态cup1对象. new Cups(); } //static Cups cups1 = new Cups(); //static Cups cups2 = new Cups();};/*outputCup (1 )Cup (2 )f( 3 )Cups*/ public class Father { String fs = "Father's attribute"; { System.out.println(fs); } static String fss = "Father's static attribute"; static{ System.out.println(fss); } Father(){ System.out.println("Father's constructor"); } }class Child extends Father{ String cs = "Child's attribute"; { System.out.println(cs); } static String css = "Child's static attribute"; static{ System.out.println(css); } Child(){ System.out.println("Child's constructor"); } }class Test{ public static void main(String[] args) { Child c = new Child(); }}/*这里是运行结果:Father's static attributeChild's static attributeFather's attributeFather's constructorChild's attributeChild's constructor*/初始化顺序都是先父类,然后子类.因为静态的属性是在类载入JVM时候进行的,所以:1.父类静态属性/块.2.子类静态属性/块.然后开始初始化:3.父类属性/块.4.父类构造器.5.子类属性/块.6.子类构造器. 自己总结的: 先是static变量和方法(类初始化),由clinit来初始化; 然后是实例变量,实例模块初始化,构造方法初始化,由init来初始化; 如果有继承关系,则先执行父类的初始化,然后才是子类的! Java 接口泛型的问题 请问一下Vector类中toArray()函数的作用 JAVA 初级错误 java 多线程例子问题 如何使用java来实现xml和图像格式的文件转化为word文件? 关于enqueue上的同步问题 timezone问题 int convert string? 有一个小程序 请各位哥哥帮我完善一下 大家又没有看到日历控件方面的帖子? 请高人帮忙讲解!谢谢! 求一资料,给分
http://topic.csdn.net/u/20080402/21/6e9dc1dc-6ae5-4f41-a331-bbc74eb5b465.html
static {
System.out.println("Test2 class static--------" + age);// 4
}
{
System.out.println("Test2 class not static--------" + code);//9
} Test2() {
code = "DHC";
System.out.println("Test2()--------" + age);//10
} public static void main(String[] args) {
try {
Class.forName("zhao.Test2");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
new Test2();
}
}class AA { static String tel = "123"; // 1 String name = "zhao";// 5
static {
System.out.println("AA class static--------" + tel);// 2
}
{
System.out.println("AA class not static--------" + name);//6
} AA() {
name = "kimi";
System.out.println("AA()--------" + tel);//7
}
}
{
Cup(int er)
{
System.out.println("Cup (" + er + " )");
}
void f(int er)
{
System.out.println("f( " + er + " )");
}
};
class Cups
{
static Cup cup1;
static Cup cup2;
static //静态子句,或者说是"静态块"
{
cup1 = new Cup(1);
cup2 = new Cup(2);
}
Cups()
{
System.out.println("Cups");
}
};
public class P97
{
public static void main(String[] args)
{
Cups.cup1.f(3); //访问静态cup1对象.
new Cups();
}
//static Cups cups1 = new Cups();
//static Cups cups2 = new Cups();};
/*output
Cup (1 )
Cup (2 )
f( 3 )
Cups
*/
String fs = "Father's attribute";
{
System.out.println(fs);
}
static String fss = "Father's static attribute";
static{
System.out.println(fss);
}
Father(){
System.out.println("Father's constructor");
}
}
class Child extends Father{
String cs = "Child's attribute";
{
System.out.println(cs);
}
static String css = "Child's static attribute";
static{
System.out.println(css);
}
Child(){
System.out.println("Child's constructor");
}
}
class Test{
public static void main(String[] args) {
Child c = new Child();
}
}
/*
这里是运行结果:
Father's static attribute
Child's static attribute
Father's attribute
Father's constructor
Child's attribute
Child's constructor
*/初始化顺序都是先父类,然后子类.
因为静态的属性是在类载入JVM时候进行的,所以:
1.父类静态属性/块.
2.子类静态属性/块.
然后开始初始化:
3.父类属性/块.
4.父类构造器.
5.子类属性/块.
6.子类构造器.
先是static变量和方法(类初始化),由clinit来初始化;
然后是实例变量,实例模块初始化,构造方法初始化,由init来初始化;
如果有继承关系,则先执行父类的初始化,然后才是子类的!