JAVA中执行顺序
2015-11-03 14:57
501 查看
用<<Thinking in Java>>例子说明
public class Insect {
private int i=9;
protected int j;
Insect()
{
System.out.println("i="+i+",j="+j);
j=39;
}
private static int x1=printInit("static Insect.x1 initialized");
static int printInit(String s){
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect{
private int k=printInit("Beetle.k initialized");
public Beetle() {
System.out.println("k="+k);
System.out.println("j="+j);
}
private static int x2=printInit("static Insect.x2 initialized");
public static void main(String []args) {
System.out.println("Beetle constructor");
Beetle b=new Beetle();
}
}
运行结果:
static Insect.x1 initialized
static Insect.x2 initialized
Beetle constructor
i=9,j=0
Beetle.k initialized
k=47
j=39
从中可以看出执行顺序:
父类静态,
子类静态,
父类非静态,
父类构造,
子类非静态,
子类构造
JAVA中赋值顺序
public class Insect {
public String type="Insect父类成员变量赋的值";
Insect()
{
System.out.println("Insect父类构造器--type-->"+type);
type="Insect父类构造器赋的值";
System.out.println("Insect父类构造器----type--->"+type);
}
{
System.out.println("block---type--->"+type);
type="Insect父类块赋的值";
}
}
public class Beetle extends Insect{
public String type="Beetle成员变量赋的值";
public Beetle() {
System.out.println("Beetle构造器---type--->"+type);
type="Beetle构造器赋的值";
}
public void t(){
System.out.println("t---type---->"+type);
}
{
System.out.println("block---type--->"+type);
type="Beetle块赋的值";
}
public static void main(String []args) {
Beetle b=new Beetle();
b.t();
}
}
block---type--->Insect父类成员变量赋的值
Insect父类构造器--type-->Insect父类块赋的值
Insect父类构造器----type--->Insect父类构造器赋的值
block---type--->Beetle成员变量赋的值
Beetle构造器---type--->Beetle块赋的值
t---type---->Beetle构造器赋的值
根据上面程序执行顺序
1.成员变量赋值>>>块赋值>>>构造器赋值
2.父类的块>>父类构造器>>自身块>>自身构造器
所以,程序的赋值步骤为
父类的静态变量赋值
自身的静态变量赋值
父类成员变量赋值
父类块赋值
父类构造器赋值
自身成员变量赋值
自身块赋值
自身构造器赋值
参考http://java-mzd.iteye.com/blog/838683
public class Insect {
private int i=9;
protected int j;
Insect()
{
System.out.println("i="+i+",j="+j);
j=39;
}
private static int x1=printInit("static Insect.x1 initialized");
static int printInit(String s){
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect{
private int k=printInit("Beetle.k initialized");
public Beetle() {
System.out.println("k="+k);
System.out.println("j="+j);
}
private static int x2=printInit("static Insect.x2 initialized");
public static void main(String []args) {
System.out.println("Beetle constructor");
Beetle b=new Beetle();
}
}
运行结果:
static Insect.x1 initialized
static Insect.x2 initialized
Beetle constructor
i=9,j=0
Beetle.k initialized
k=47
j=39
从中可以看出执行顺序:
父类静态,
子类静态,
父类非静态,
父类构造,
子类非静态,
子类构造
JAVA中赋值顺序
public class Insect {
public String type="Insect父类成员变量赋的值";
Insect()
{
System.out.println("Insect父类构造器--type-->"+type);
type="Insect父类构造器赋的值";
System.out.println("Insect父类构造器----type--->"+type);
}
{
System.out.println("block---type--->"+type);
type="Insect父类块赋的值";
}
}
public class Beetle extends Insect{
public String type="Beetle成员变量赋的值";
public Beetle() {
System.out.println("Beetle构造器---type--->"+type);
type="Beetle构造器赋的值";
}
public void t(){
System.out.println("t---type---->"+type);
}
{
System.out.println("block---type--->"+type);
type="Beetle块赋的值";
}
public static void main(String []args) {
Beetle b=new Beetle();
b.t();
}
}
block---type--->Insect父类成员变量赋的值
Insect父类构造器--type-->Insect父类块赋的值
Insect父类构造器----type--->Insect父类构造器赋的值
block---type--->Beetle成员变量赋的值
Beetle构造器---type--->Beetle块赋的值
t---type---->Beetle构造器赋的值
根据上面程序执行顺序
1.成员变量赋值>>>块赋值>>>构造器赋值
2.父类的块>>父类构造器>>自身块>>自身构造器
所以,程序的赋值步骤为
父类的静态变量赋值
自身的静态变量赋值
父类成员变量赋值
父类块赋值
父类构造器赋值
自身成员变量赋值
自身块赋值
自身构造器赋值
参考http://java-mzd.iteye.com/blog/838683
相关文章推荐
- Java编码问题汇总(转)
- java的equals、hashcode和Clone方法
- java编写WebSocket服务端
- Eclipse快捷键大全
- MyEclipse快捷键大全
- Orangevolt Eclipse XSLT 插件简介
- java的进制转换
- spring对事务的捕获
- Spring定时任务的几种实现
- Java实现从数据库导出大量数据记录并保存到文件的方法
- 基础:Eclipse开发JAVA中如何Debug
- java Timer 定时任务(一)
- Java中系统属性Properties介绍
- java进阶(二)------java编程规范---myeclipse格式化设置
- eclipse调试android源码(system_process)
- java进阶(二)------java编程规范---myeclipse格式化设置
- SpringMVC使用Jackson返回JSON时日期少一天的问题
- java.lang.UnsupportedClassVersionError: PR/Sort : Unsupported major.minor version 52.0
- java 中ClassLoader 的加载顺序
- java的初始化顺序