大家早上好,问个问题,java代码在编译运行时,哪些先进行,哪些后进行,有句话我不明白! java代码在编译运行时,哪些先进行,哪些后进行: 1.静态的部分先运行,然后是构造器; 2.父类的先于子类进行。 静态的部分先运行,然后是构造器,就是静态部分先初始化,然后再构造函数?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Test{ static{ int i=100; System.out.println("i:"+i); } public Test(){ System.out.println("in the Test()"); } public static void main(String []args){ Test t = new Test(); }}执行一下看看自己就明白了. 静态部分,是在类被加载到内存中的时候初始化的,静态块、静态变量都是在这个时候初始化的。静态方法跟成员方法一样,都是在被调用时运行的。构造函数是在new之后被调用的,也就是说,在堆开了内存空间后再调用的构造函数。构造子类时,会查询父类是否被加载到内存。 package test;public class TestCommon { static int age = 21; String name = "zhao"; TestCommon() { System.out.println("TestCommon() " + name); this.name = "kimi"; System.out.println("TestCommon() " + name); } static { System.out.println("static " + age); } { System.out.println("static " + name); } /** * @param args */ public static void main(String[] args) { new TestCommon(); }} 前两天有一个很经典的帖子的http://topic.csdn.net/u/20080402/21/6e9dc1dc-6ae5-4f41-a331-bbc74eb5b465.html看12楼应该是1:利用构造方法分配内存空间2:静态属性,静态块代码 (按书写顺序进行) 3:非静态成员属性,非静态块代码 4:构造方法中的初始化 5:父类优先于子类 java加载类的过程一般是先加载父类的静态成员,在加载子类的静态成员,然后再加载父类的非静态成员,父类的构造方法,最后加载子类的非静态方法,子类的构造方法。例如:class Supper{ //静态块 static { System.out.println("加载父类的静态方法......"); } //非静态块 { System.out.println("加载父类的非静态方法......"); } public Supper() { System.out.println("加载父类的构造方法......"); }}class Ch extends Supper{ //静态块 static { System.out.println("加载子类的静态方法......"); } //非静态块 { System.out.println("加载子类的非静态方法......"); }//子类构造方法 public Supper() { System.out.println("加载子类的构造方法......"); } public static void main(String args[]) { new Ch(); }} 其运行结果是:加载父类的静态方法......加载子类的静态方法......加载父类的非静态方法......加载父类的构造方法......加载子类的非静态方法......加载子类的构造方法...... JNA调用dll的问题 Set怎么实现不重复 怎么转化为这种时间格式的字符串 怎么用穷举来做 一个关于兔子的古典题目~~~ 菜鸟提问,各位帮帮忙咯~~ jpg 文件中的病毒如何检查 请问:Java的关键字与保留字的不同? 请教高手,请看看能不能帮上忙? JScrollPane多层嵌套的问题 cannot find symbol 是什么意思啊? 远程连接linux下的mysql数据库问题!!! JDK停止工作的错误
static{
int i=100;
System.out.println("i:"+i);
}
public Test(){
System.out.println("in the Test()");
} public static void main(String []args){
Test t = new Test();
}
}
执行一下看看自己就明白了.
静态方法跟成员方法一样,都是在被调用时运行的。构造函数是在new之后被调用的,也就是说,在堆开了内存空间后再调用的构造函数。构造子类时,会查询父类是否被加载到内存。
System.out.println("TestCommon() " + name);
this.name = "kimi";
System.out.println("TestCommon() " + name);
} static {
System.out.println("static " + age);
} {
System.out.println("static " + name);
} /**
* @param args
*/
public static void main(String[] args) {
new TestCommon();
}}
http://topic.csdn.net/u/20080402/21/6e9dc1dc-6ae5-4f41-a331-bbc74eb5b465.html
看12楼应该是
1:利用构造方法分配内存空间
2:静态属性,静态块代码 (按书写顺序进行)
3:非静态成员属性,非静态块代码
4:构造方法中的初始化
5:父类优先于子类
然后再加载父类的非静态成员,父类的构造方法,最后
加载子类的非静态方法,子类的构造方法。例如:
class Supper
{
//静态块
static
{
System.out.println("加载父类的静态方法......");
}
//非静态块
{
System.out.println("加载父类的非静态方法......");
} public Supper()
{
System.out.println("加载父类的构造方法......");
}
}class Ch extends Supper
{
//静态块
static
{
System.out.println("加载子类的静态方法......");
}
//非静态块
{
System.out.println("加载子类的非静态方法......");
}
//子类构造方法
public Supper()
{
System.out.println("加载子类的构造方法......");
}
public static void main(String args[])
{
new Ch();
}
}
其运行结果是:
加载父类的静态方法......
加载子类的静态方法......
加载父类的非静态方法......
加载父类的构造方法......
加载子类的非静态方法......
加载子类的构造方法......