java技术从入门到精通(孙鑫)学习笔记Lesson3.doc_第1页
java技术从入门到精通(孙鑫)学习笔记Lesson3.doc_第2页
java技术从入门到精通(孙鑫)学习笔记Lesson3.doc_第3页
java技术从入门到精通(孙鑫)学习笔记Lesson3.doc_第4页
java技术从入门到精通(孙鑫)学习笔记Lesson3.doc_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主要内容l 包l 类的说明符l 对象的销毁(垃圾内存回收的演示)l 接口l 异常处理包(package)l 为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入包(package)。javaiolangSystemStringl package语句必须是文件中的第一条语句。也就是说,在package前,除了空白和注释之处不能有任何语句。l 如果不加package语句,则指定为缺省包或无名包。l 包对应着文件系统的目录层次结构。l 在package语句中,用“。”来指明包(目录)的层次。-package mybole; /package语句必须是java原文件中的第一条语句, /换句话说,package语句前除了出现空白或解释之外, /不能再有其它的语句了.在给包取名的时候采用小写 /形式,然后在包的名字后面加上分号 class Test public static void main(String args) System.out.println(package test!); 编译:javac Test.java 没有错误执行:java Test 出现了错误。 这是因为,java中提供的包是与目录层次结构相对应的,当给Test这个类取名为mybole时,要求在我们的硬盘上面有这样一个mybole的目录,并且在这个目录下有Test.class这个文件。因此,要在相应的目录下新建一个文件名与Test类中引用的包(即包名为:mybole)名完全一致的文件。事实上执行的Test类的完整名字应该是:mybole.Test 在新建mybole文件夹后并将编译产生的Test.class类文件放在mybole文件夹中,按以下操作可能正确结果: java mybole.Test 运行的结果为: package test!- - - - - - -package cn.mybole; class Test public static void main(String args) System.out.println(package test!); 包cn中含子包mybole这就要求在相应的目录下新建cn文件夹,在cn文件夹下新建mybole子文件夹, 将重新编译得到的Test.class置入mybole文件夹下。编译: javac Test.java执行: java cn.mybole.Test运行结果为: package test!编译并生成包l 在当前目录下生成包:javac d . Test.java /一个点号表示当前目录,两个点号表示上一层/目录。l 在指定目录下生成包(如在D盘下):javac d D: Test.javal 可以通过设置环境变量classpath来指向Test.class(假设在E: cn.mybole下): set classpath=%classpath%;E:; /*注意这里非常容易出错若将“E:cn.mybole;”代替这里的“E:;”就会出错。因为当执行 java cn.mybole.Test它在“E:cn.mybole;”目录下查找“cn.mybole.Test”类文件,显然是找不到的。这是非常容易出现的错误,应当重视。*/ /%classpath%表示先前的classpath变量值。 这样在任何目录下都能执行了。这里还有个容易出现的错误,那就是在设置的classpath=%classpath%;E:; 当执行java cn.mybole.Test时会顺着这条路径查找,一旦在%classpath%中找到了Test类,就会停止查找。这里就要分清是要执行的是哪个目录下的类。import语句l 引入包中的类。import java.io.Filel 引入整个包。如:import java.io.*;l 在同一包中的类可以互相引用,无需import语句。注意:当我们访问System类和String类,为何我们没有通过import语句导入呢?这是因为java。lang包自动导入的,不需要显式地加上import语句。然而,当我们要访问其它包中的某一个类的时候,我们就必须用import 语句将这个类导入,否则java编译器就不认识你写的这个类名。当我们在文件当中导入了某个类之后,访问的时候就可以直接用这个类名,如果不导入,则需要将完整的类名写全了。当然,也可将整个包导入,但这样是以消耗大量内存为代价的。以下三种方式都能引用File类。package cn.mybole; / 自定义包import java.io.File /导入已有包 class Test public static void main(String args)File=f;System.out.println(package test!);package cn.mybole; / 自定义包class Test public static void main(String args)java.io.File=f;System.out.println(package test!);package cn.mybole; / 自定义包import java.io.*; /使用通配符将所有的io包导入class Test public static void main(String args)File=f;System.out.println(package test!);-package cn.mybole;class Test2package cn.mybole;class TestPublic static void main(String args) Test2 t2=new Test2();编译: javac d . Test2.java编译: javac d . Test.java /要注意编译的先后次序不能颠倒。执行: java cn.mybole.Test或者这样: javac d . *.java /表编译后缀名为java 的文件,/这样就不必考虑编译的先后顺序 java cn.mybole.Test 类的说明符(1) public (2) default (不加访问说明符时)类的其它修饰符(1) final(2) abstractpackage com.sunlight;public class Test2 /public 不可缺少package cn.mybole; /import com.sunlight.Test2;class Test public static void main(String args) com.sunlight.Test2 t2=new com.sunlight.Test2(); /若使用了import导入,/则不需用包的路径。引用不同包中的类,则要求被引用的类的说明符为public 类型的,否则出错。-方法的说明符(1) public(2) protected(3) default(不加访问说明符时)(4) private方法的其它修饰符(1) static (2) final(3) abstract(4) native (5) synchronized package cn.mybole; public class Test public void pubMethod()System.out.println(pubMethod);protected void proMethod()System.out.println(proMethod);void defMethod() /缺省的为不加任何访问说明符System.out.println(defMethod); private void priMethod()System.out.println(priMethod);public static void main(String args) Test t=new Test(); t.pubMethod(); Method(); t.defMethod(); t.priMethod(); 运行结果为: pubMethod proMethod defMethod priMethodpackage cn.mybole;public class Test2 extends Testpublic static void main(String args)Test t=new Test();t.pubMethod();Method();t.defMethod();t.priMethod();编译时出错:priMethod()方法是私有的,不能被访问package com.sunlight;import cn.mybole.Test;public class Test2 extends Testpublic void fn()pubMethod();proMethod();defMethod();priMethod();public static void main(String args)编译时报错: defMethod()方法和priMethod()方法不能调用publicprotecteddefaultprivate同类同包子类通用性通用性:指两个类属于不同的包,且不存在继承关系。package com.sunlight;import cn.mybole.Test;public class Test2 /extends Testpublic static void main(String args)Test t=new Test();t.pubMethod();Method();t.defMethod();t.priMethod();编译报错: proMethod()方法,defMethod()方法,priMethod()方法都不可访问。final 方法l 为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。l 为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。l class中所有的private和static方法自然就是final。package cn.mybole; public final class Test public void pubMethod()System.out.println(pubMethod);protected void proMethod()System.out.println(proMethod);void defMethod()System.out.println(defMethod); private void priMethod()System.out.println(priMethod);public static void main(String args) Test t=new Test(); t.pubMethod(); Method(); t.defMethod(); t.priMethod();package cn.mybole;public class Test2 extends Testpublic static void main(String args)Test t=new Test();t.pubMethod();Method();t.defMethod();/t.priMethod();编译报错:不能从已声明为final的类继承。抽象方法和抽象类l 在类没有方法体的方法,就是抽象方法。l 含有抽象方法的类,即为抽象类。l 如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。l 我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象。package cn.mybole; public class Test public void pubMethod()System.out.println(pubMethod);protected abstract void proMethod(); /定义为抽象的方法/*System.out.println(proMethod);*/void defMethod()System.out.println(defMethod); private void priMethod()System.out.println(priMethod);public static void main(String args) Test t=new Test(); t.pubMethod(); Method(); t.defMethod(); t.priMethod();编译报错:一个方法定义为抽象的方法,则这个方法所在的类自然成为抽象的类。package cn.mybole; public abstract class Test public void pubMethod()System.out.println(pubMethod);protected abstract void proMethod(); /定义为抽象的方法/*System.out.println(proMethod);*/void defMethod()System.out.println(defMethod); private void priMethod()System.out.println(priMethod);public static void main(String args) Test t=new Test(); t.pubMethod(); Method(); t.defMethod(); t.priMethod();编译报错:因为在Test类中有一个抽象的方法没有方法体,说明它的行为没有确定,所以对一个抽象的类不能用来实例化对象。package cn.mybole; public abstract class Test public void pubMethod()System.out.println(pubMethod);protected abstract void proMethod(); /定义为抽象的方法/*System.out.println(proMethod);*/void defMethod()System.out.println(defMethod); private void priMethod()System.out.println(priMethod);public static void main(String args) /*Test t=new Test(); t.pubMethod(); Method(); t.defMethod(); t.priMethod();*/-package cn.mybole; public abstract class Test public void pubMethod()System.out.println(pubMethod);protected abstract void proMethod();void defMethod()System.out.println(defMethod); private void priMethod()System.out.println(priMethod);public static void main(String args) package cn.mybole;import cn.mybole.Test; /导入的是同一个包中的类,这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论