免费注册 查看新帖 |

Chinaunix

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

笔记:JAVA学习之“复用类” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-17 14:53 |只看该作者 |倒序浏览

               
       
       
       
       
       
       
第7章
复用类
1. toString()
每一个非基本类型都有一个toString()方法;当编译器需要从对象获取一个string时,该对象的toString()方法就会被调用。
示例:
       
       
               
                        [color="#7f0055"]class
                        WaterSource {
                        [color="#000000"]        [color="#7f0055"]private
                        String [color="#0000c0"]s[color="#000000"];
                                WaterSource()
                        {
                        [color="#000000"]                [color="#0000c0"]s
                        = [color="#2a00ff"]"WaterSource Constructed"[color="#000000"];
                        [color="#000000"]        }
                        [color="#000000"]        [color="#7f0055"]public
                        String toString() {[color="#7f0055"]return
                        [color="#0000c0"]s[color="#000000"];}
                        [color="#000000"]        [color="#7f0055"]public
                        [color="#7f0055"]static
                        [color="#7f0055"]void
                        main(String[] args) {
                                        WaterSource
                        w = [color="#7f0055"]new
                        WaterSource();
                        [color="#000000"]                System.[color="#0000c0"]out[color="#000000"].println(w);
                        [color="#000000"]        }
                       
                       
                        [color="#000000"]}
               
       
打印的结果是:
WaterSource
Constructed
[color="#000000"]2.继承
[color="#000000"]当创建一个类时,总是在继承。因此,除非已经明确指出要从其他类中继承,否则就是在隐式的从JAVA的标准根类Object进行继承。
[color="#000000"]继承的关键字:extends
[color="#000000"]关键字super表示超类(或者基类)的意思。因此,表达式super.scrub()将调用超类的scrub()方法。
[color="#000000"]3.初始化基类
[color="#000000"]在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识和能力。
[color="#000000"]对于无参数的基类构造器,会被派生类默认调用;
[color="#000000"]对于带参数的基类构造器,派生类必须使用关键字super显示地调用,并配以适当的参数。
[color="#000000"]4.try与finally
try
{
[color="#000000"]...
[color="#000000"]}
finally
{
[color="#000000"]...
[color="#000000"]}
[color="#000000"]关键字try表示,下面的块(用{}括起来的代码)是所谓的保护区,这意味着它需要被异常处理。其中一项特殊的处理是无论try块怎样退出的,保护区后的finally子句中的代码总是要被执行的。这里的finally子句表示的是“无论发生什么事,一定要执行后面跟着的块“。
[color="#000000"]5.protected关键字
[color="#000000"]protected关键字指明“就类用户而言,这是private的,但对于任何继承于此类的导出类或者其他任何位于同一个包内的类来说,它是可以访问的“。
[color="#000000"]6.向上转型
[color="#000000"]“为新的类提供方法”并不是继承技术中最重要的方面,其最重要的方面是用来表现新类和基类之间的关系。这种关系可以用“新类是现有类的一种类型”加以概括。
[color="#000000"]由于继承可以确保基类中所有的方法在到处类中也同样有效,所以能够向基类发送的所有信息同样也向可以导出类发送。
[color="#000000"]示例
       
       
               
                        [color="#7f0055"]class
                        Instrument {
                        [color="#000000"]        [color="#7f0055"]public
                        [color="#7f0055"]void
                        play () {
                        [color="#000000"]                System.[color="#0000c0"]out[color="#000000"].println("Instrument
                        play"[color="#000000"]);
                        [color="#000000"]        }
                        [color="#000000"]        [color="#7f0055"]static
                        [color="#7f0055"]void
                        tune (Instrument i) {
                        [color="#000000"]                i.play();
                        [color="#000000"]        }
                        [color="#000000"]}
                        [color="#7f0055"]public
                        [color="#7f0055"]class
                        Wind [color="#7f0055"]extends
                        Instrument {
                        [color="#000000"]        [color="#7f0055"]public
                        [color="#7f0055"]static
                        [color="#7f0055"]void
                        main(String[] args) {
                                        Wind
                        flute = [color="#7f0055"]new
                        Wind();
                        [color="#000000"]                Instrument.[color="#000000"]tune(flute);
                        [color="#3f7f5f"]//[color="#3f7f5f"]upcasting
                        [color="#000000"]        }
                       
                       
                        [color="#000000"]}
                       
                       
               
       
[color="#000000"]在tune中,程序代码可以对Instrument和它所有的到处类起作用,这种将Wind引用转换为Instrument引用的动作,称之为“向上转型”。
[color="#000000"]7.继承使用
[color="#000000"]慎用继承,其使用场合仅限于你确信使用该技术确实有效的情况。到底是改用组合还是使用继承,一个最清晰的判断方法就是问一问自己是否需要从新类向基类进行向上转型。如果必须向上转型,则继承是必要的;但如果不需要,则应当好好考虑自己是否需要继承。
[color="#000000"]8.final关键字
[color="#000000"]用final关键字定义编译期常量:这种常量必须是基本类型,并且以关键字final表示。定义常量时,必须赋值。
[color="#000000"]按照惯例:既是[color="#000000"]static又是[color="#000000"]final的常量将用大写表示:定义为[color="#000000"]public,则可以被用于包之外;定义为[color="#000000"]static,则强调只有一份;定义为[color="#000000"]final,则说明它是一个常量。
[color="#000000"]当[color="#000000"]final关键字后定义的域是对象引用时,[color="#000000"]final使引用恒定不变(一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象)。然而,对象其自身确实是可以修改的。
[color="#000000"]空白[color="#000000"]final:空白[color="#000000"]final指被声明为[color="#000000"]final但又未给定初值的域。无论什么情况,编译器都确保空白[color="#000000"]final在使用前必须被初始化。但是,空白[color="#000000"]final在关键字[color="#000000"]final的使用上提供了更大的灵活性。为此,一个类中的[color="#000000"]final域就可以做到根据对象而有所不同,却又保持其恒定不变的特性。
[color="#000000"]final参数:[color="#000000"]JAVA允许在参数列表中以声明的方式将参数指明为[color="#000000"]final。这意味着你无法在方法中更改参数引用所指向的对象。
[color="#000000"]final方法:把方法锁定,以防止任何继承类修改它的含义。
[color="#000000"]类中所以的[color="#000000"]private方法都隐式地指定为[color="#000000"]final的。由于无法取用[color="#000000"]private方法,所以就无法覆盖它。可以对[color="#000000"]private方法添加[color="#000000"]final修饰词,但这并不能给该方法增加任何额外的意义。
[color="#000000"]final类:将某个类定义为[color="#000000"]final时,表明了你不打算继承该类,而且也不允许别人这样做。
[color="#000000"]8.初始化及类的加载
[color="#000000"]一般来说,类的代码在初次使用时才加载。这通常指加载发生于创建类的第一个对象之时,但是当访问[color="#000000"]static域或者[color="#000000"]static方法时,也会发生加载。
[color="#000000"]当一个类在加载时,编译器注意到它有一个基类,则加载完该类,继续加载基类。如果基类还有其自身的基类,则继续加载基类的基类。依次类推。
[color="#000000"]类加载完成之后,根基类的[color="#000000"]static初始化会被执行,然后是下一个到处类的[color="#000000"]staic初始化被执行,依次类推。
[color="#000000"]至此,类的加载完毕,可以创建对象了。
               
               
               
               
               

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP