| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 844 人关注过本帖
标题:看看这段程序,哪个大哥解释下!
只看楼主 加入收藏
sonwill
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2008-3-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
看看这段程序,哪个大哥解释下!
class insert{
 int i=9;
 int j;
 public insert(){prt("i=" +i+",j="+j); j=39;}
static int x1=prt("static x1");//静态的方法
static int prt(String s){
 System.out.println(s);
 return 49;
}
}
public class battle extends insert{
int k=prt("bettle k");
battle()
{ prt("k=" +k);
  prt("j=" +j);
}
static int x2=prt("static bettle x2");
static int prt(String s){
System.out.println(s);
return 63;
}
public static void main(String[]args)
{ int p=prt("bettle constructor");
battle b=new battle();
System.out.println(p);
}
}
输出结果是什么呢?
搜索更多相关主题的帖子: 解释 
2009-09-18 18:23
pjpjpj
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2009-9-18
收藏
得分:1 
结果:
static x1
static bettle x2
bettle constructor
i=9,j=0
bettle k
k=63
j=39
63
在这个程序中他首先会加载battle函数,在开始初始化时(初始化的主要目标是给静态属性赋值)发现他的直接父类insert还没有加载,所以就转去加载并初始化insert类,在初始化时首先给静态的属性赋值,x1赋值所以首先会输出static x1 ,接着初始化battle中的静态属性值,他的顺序按照代码的书写顺序执行,所以接着输出static battle x2
    前面的加载和初始化完成之后则调用main函数执行
    这个程序中的难点是不知在执行main函数之前还要进行类的加载和静态属性初始化
2009-09-18 19:16
pywepe
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:296
专家分:483
注 册:2009-4-5
收藏
得分:1 
回复 2楼 pjpjpj
prt()是什么

java群
62635216
欢迎加入
2009-09-18 23:11
琴之弦
Rank: 2
等 级:论坛游民
威 望:2
帖 子:651
专家分:88
注 册:2007-9-6
收藏
得分:1 
程序代码:
class insert{ 
    int i=9; 
    int j; 
    public insert(){
        prt("i=" +i+",j="+j); j=39;
    } 
    static int x1=prt("static x1");//静态的方法 
    static int prt(String s){ 
        System.out.println(s); 
        return 49; 
    } 
} 

public class battle extends insert{ 
    int k=prt("bettle k"); 
    battle(){
         prt("k=" +k); 
          prt("j=" +j); 
    } 
    static int x2=prt("static bettle x2"); 

    /*
        这个方法重写了父类的prt方法 所以在子类中直接
        有方法名调用该静态方法,实际上是调用了子类的该方法。
        返回的是63.
    */
    static int prt(String s){ 
        System.out.println(s); 
        return 63; 
    } 

    public static void main(String[]args){
         /*将静态成员和方法加入内存。输出了static x1 和 static bettle x2  */  
         int p=prt("bettle constructor"); //调用子类的prt方法输出 bettle constructor  返回值为 63
         battle b=new battle(); //调用子类的构造器。先调用父类的构造器输出i=9,j=0  ,再输出k=63  和j=0
         System.out.println(p);  //63
    } 
} 
2楼说的很好。学习了。我做个小小的学习总结。
总结以上程序可以知道一个程序的执行过程:
    1.首先加载进行"类的加载和静态属性初始化"工作。 即加载父类或者实现的接口。 初始化静态的变量。
所以父类中的静态变量在子类的静态变量前初始化。
    2.执行main方法。
    3.执行子类构造器之前先执行父类的同参数列表构造器。每个类都是先初始化成员属性再去执行构造器。哪怕成员属性的定义写在了构造器之后。
 类的成员属性都有一个默认的初始化值。一般默认的初值为0 或者false或者null;
    4.然后才执行普通的实例方法。
写的不对的地方请多指教。具体的输出结果2楼已经给出。

琴舞梦幻独为君,弦断醉醒泪无数。jerry0908mo.blog.
2009-09-19 23:39
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:1 
回复 3楼 pywepe
请仔细看这里:
public insert(){prt("i=" +i+",j="+j); j=39;}
static int x1=prt("static x1");//静态的方法

C#超级群 74862681,欢迎大家的到来!
2009-09-19 23:43
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:1 
你这个好像无法通过编译吧?试过了没?
2009-09-20 00:00
ygp_sfec
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:87
专家分:115
注 册:2009-9-8
收藏
得分:0 
把一个简单的问题搞复杂并不是一个好的编程习惯
2009-09-20 00:01
sonwill
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2008-3-22
收藏
得分:0 
感谢各位的解释!!
这个程序中的难点是不知在执行main函数之前还要进行类的加载和静态属性初始化.妙哉!!虽然是一个简单的程序确蕴含经典的知识,好!
看来简单中还是要认真对待的。
2009-09-20 13:28
快速回复:看看这段程序,哪个大哥解释下!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026603 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved