免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 798 | 回复: 0
打印 上一主题 下一主题

学习java第三天。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-18 15:43 |只看该作者 |倒序浏览
学习java已经三天了。看的第一本关于java的书是java编程语言(中文版滴),哪儿个出版社没仔细看,翻译的感觉还行。现在进度到了第四章 接口 了。另外还有一本java版的数据结构,不过现在还没翻(这两本书都是在首都图书馆借滴,呵呵)
   下面说说体会:
java确实很强大,从各种应用上就知道了,自从听说US的火星探测器中的编程语言是java的时候起,就对java及使用java的人有种发自内心的、无法言表的、热烈的崇拜。:D
   现在我也要加入这个行列了,兴奋。
   废话太多了....
   
   首先说说java的构造函数吧,关于多态、重载是看一次有一次的不同,觉得理解的不够深。我就说java程序的运行吧。
   首先java虚拟机会为class分配内存并给其filed(java编程语言里翻译成域)赋默认值,关于java中变量的默认值大家还是参见相关书籍的好。(int 类型是0,dobule是0.0吧)然后呢,会调用class的构造函数,这样,构造函数运行又分:
   1、如果有显式调用父类的构造函数,则把运行时间交给父类构造函数,(注意声明显示调用必须在构造函数的第一行)
   2、调用初始化构造器给class的全部filed赋值。
   3、执行构造函数体。

   注意这里调用父类的构造函数,其执行过程也是这样的。构造函数执行完毕,class实例对象就可以使用了。

《java编程语言》里有个例子,说的很清楚形象。可参见该书(page57)

class A
{
     protected int m = 0x00ff;
     protected int sum;
     public int A(){
        this.sum = m;
     }
}
class B extends A
{
     protected int n = 0xff00;
     public B(){
        supper();
        this.sum |= this.n;
     }
}      
         
语法还不太熟,大概就这么个意思吧。

步骤    执行操作           m        n         sum
1   分配内存,赋默认值     0        0          0
2    调用父类构造函数      0        0          0
3    父类对域初始化     0x00ff      0          0
4    执行父类构造函数体  0x00ff     0        0x00ff
5    运行时间交给子类    0x00ff     0        0x00ff
6    初始化子类域       0x00ff   0xff00     0x00ff
7    执行子类构造函数   0x00ff    0xff00     0xffff

这样就是说如果在构造函数运行期间,我们调用了域的值,那么这个结果可能并不是我们所希望得到的。因此应该尽量避免在构造函数中调用非静态的函数体(如public 类型)以免产生不良影响。
   




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17686/showart_101534.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP