第05讲-面向对象程序设计(4)内部类-包的使用-程序发布
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
包与文件夹
使用JDK如何实现以上要求,简单的办法是: 如何实现以上要求,简单的办法是: 使用 如何实现以上要求 进入命令行状态 让src成为当前文件夹 成为当前文件夹 执行命令javac –d ../classes 执行命令 com/misxp/*.java 现在的集成开发工具可以方便地帮我们处理包 的问题。 的问题。
10
例:创建包firstpackage和类Date,同时在PersonDemo.java 创建包firstpackage和类Date,同时在PersonDemo.java firstpackage和类Date,同时在 创建类Person 创建类Person
1. package firstPackage; 2. import java.util. Calendar; 3. public class Date{ 4. private int year,month,day; 5. public Date(int y,int m,int d){ 6. year=y; 7. month=m; 8. day=d; 9. } 10. public Date(){} 11. public int thisyear(){ 12. return Calendar.getInstance().get(Calendar.YEAR); 13. } 14.}
15
创建可执行的JAR文件
使用工具jar.exe可以创建可执行的 可以创建可执行的JAR文件。 文件。 使用工具 可以创建可执行的 文件
进入命令行状态 让classes文件夹成为当前文件夹 文件夹成为当前文件夹 执行以下命令: 执行以下命令:
Jar cmf my.mf Test.jar *.class FirstPackage
就可以得到Test.jar打包文件。Test可以自己取。 打包文件。 可以自己取。 就可以得到 打包文件 可以自己取
双击test.jar或用命令 或用命令java –jar Test.jar就可 双击 或用命令 就可 以运行程序。 以运行程序。
16
内部类
在一个类的内部定义的类,叫做内部类。 在一个类的内部定义的类,叫做内部类。内部类可以访 问其外部类的所有成员。 问其外部类的所有成员。 内部类可以在类中、方法中、语句块中, 内部类可以在类中、方法中、语句块中,甚至语句中定 义。
18
内部类(续)
内部类可以被声明为static(普通类则不可 普通类则不可 内部类可以被声明为 顶层类( 以),这样的内部类变成顶层类(最外面的 ,这样的内部类变成顶层类 ),相当于把它放到外面 相当于把它放到外面, 类),相当于把它放到外面,不再是嵌套的 内部类。 内部类。 由于只有顶层类可以声明static成员,如果 成员, 由于只有顶层类可以声明 成员 内部类需要定义static成员,则该内部类必 成员, 内部类需要定义 成员 须声明为static。 须声明为 。
5
包与文件夹
如果一个项目myproject中的类是这样定义的: 中的类是这样定义的: 如果一个项目 中的类是这样定义的 package com.misxp; public class PackageExercise … 那么这个类所在的文件PackageExercise.java应该保存 在myproject/src/com/misxp下; 它的编译好的字节码文件应该保存在 myproject/classes/com/misxp下。 下 可以看出:包名中的com、misxp分别对应着同名的文 可以看出:包名中的 、 分别对应着同名的文 件夹。而且misxp是com的子文件夹。 的子文件夹。 件夹。而且 是 的子文件夹
8
自定义包
如果在程序中没有声明包,类就放在默认的包中, 如果在程序中没有声明包,类就放在默认的包中, 这个包是没有名字的。默认包适用于小的程序, 这个包是没有名字的。默认包适用于小的程序,如 果程序比较大,就需要创建自己的包。 果程序比较大,就需要创建自己的包。 声明包的格式 package <包名 包名>; 包名 声明一个包的语句要写在源程序文件的第一行。 声明一个包的语句要写在源程序文件的第一行。 编译后字节码文件的存放位置 运行目录下创建一个和包同名的文件夹 下创建一个和包同名的文件夹( 在运行目录下创建一个和包同名的文件夹(字母大小 写也一样),将编译产生的.class文件放到此文件 ),将编译产生的 写也一样),将编译产生的 文件放到此文件 夹中。 夹中。
Java程序设计视频教程
本讲主题: 面向对象程序设计(4)
本讲主讲教师:黄洪
浙江工业大学计算机学院
2011年
本讲内容
包的概念和应用 Jar文件与应用程序的发布 内部类 包装类
2
包
是类的逻辑组织形式。 包(package)是类的逻辑组织形式。 是类的逻辑组织形式 Java提供的用于程序开发的类和接口(API) 提供的用于程序开发的类和接口( 提供的用于程序开发的类和接口 ) 就放在各种包中。也可以自己创建包。 就放在各种包中。也可以自己创建包。
19
例:内部类访问外包类成员
1. public class Outer{ 2. private int size; 3. /** 定义内部类 定义内部类Inner */ 4. public class Inner{ 5. //将外包类的成员变量 将外包类的成员变量size递增 将外包类的成员变量 递增 6. public void doStuff(){ 7. size++; 8. } 9. } 10. Inner i=new Inner(); //成员变量 指向 成员变量i指向 成员变量 指向Inner类的对象 类的对象 11. public void increaseSize(){ 12. i.doStuff(); //调用内部类 调用内部类Inner的方法 调用内部类 的方法 13. } 14. public static void main(String[] a){ 15. Outer o=new Outer(); 16. 17. for (int i = 0; i<4; i++){ 18. o.increaseSize(); 19. System.out.println("The value of size : "+o.size); 20. } 21. } 22. }
9
包和访问权限的关系
一个包中只有访问权限为public的类才能被其它 包引用(创建此类的对象),其它具有默认访问 权限的类只能在Βιβλιοθήκη Baidu一包中使用。 在不同包中类成员的访问权限。 public类的public成员可以被其它包的代码访问。 它的protected成员可以被由它派生的其它包中的 子类访问。 默认访问权限的类成员,不能被其它包的代码访 问
7
引用包中的类或接口
import语句 如果要使用Java类中的包,要在源程序中用import语句导入。 import <包名1>[.<包名2>……].<类名|接口名>|*; “*”表示包中所有的类。 如: import java.applet.Applet;// java.applet.Applet;//导入Java.applet包中的Applet Java.applet Applet 类 import java.awt.* //导入Java.awt包中所有的类 Java包的搜索路径 用环境变量classpath设置对Java包的搜索路径。Java包一般在 JDK安装目录下的lib文件夹中,如:d:\jdk1.6\lib
3
Java API的包
java常用的包有: java.lang 语言包,唯一一个不要把它明确引入程序 的包 java.util 实用工具包 java.awt ,javax.swing 图形用户界面工具包 java.text 文本包 java.io 输入输出包 java.applet Applet应用程序包 java.net 网络编程包
12
程序的发布
把开发好的程序交给用户就叫发布。 把开发好的程序交给用户就叫发布。总不能让 用户也像我们前面讲的一样去执行吧。而且, 用户也像我们前面讲的一样去执行吧。而且, 一个较大的软件肯定有很多的字节码文件, 一个较大的软件肯定有很多的字节码文件,把 一大堆字节码文件交给用户也不方便。 一大堆字节码文件交给用户也不方便。 我们希望: 我们希望:
14
.mf文件
my.mf文件应该包含以下一行内容: 文件应该包含以下一行内容: 文件应该包含以下一行内容 Main-Class: 主类的完整名称 如: Main-Class: PersonDemo 这一行后面必须回车换行,否则可能出错。 这一行后面必须回车换行,否则可能出错。另 外,冒号后面必须空一格。 冒号后面必须空一格。
17
内部类
内部类的类名只用于定义它的类或语句块之内, 内部类的类名只用于定义它的类或语句块之内,在外部 引用它时必须给出带有外部类名的完整名称, 引用它时必须给出带有外部类名的完整名称,并且内部 类的名字不允许与外部类的名字相同。 类的名字不允许与外部类的名字相同。 内部类可以访问外部类的static或实例成员变量 内部类可以访问外部类的 或实例成员变量 内部类可以在成员方法中定义, 内部类可以在成员方法中定义,该成员方法的局部变量 及参数必须是final的才能被该内部类使用 及参数必须是 的才能被该内部类使用 内部类可以是抽象类或接口,若是接口, 内部类可以是抽象类或接口,若是接口,则可以由其它 内部类实现
11
1. import firstPackage.Date; 2. class Person{ 3. String name; 4. int age; 5. public Person(String na,int ag){ 6. name=na; 7. age=ag; 8. } 9. public Person(){} 10. public int birthYear(int thisYear){ 11. return thisYear-age+1; 12. } 13.} 14.public class PersonDemo{ 15. public static void main(String args[]){ 16. Person ps=new Person("Tom",21); 17. Date now=new Date(); 18. int y=now.thisyear(); 19. System.out.println(ps.name+" was born in "+ps.birthYear(y)); 20. } 21.}
把许多字节码文件打包成一个文件 用户双击这个文件就可以运行程序, 用户双击这个文件就可以运行程序,就像我们 运行windows中的应用程序一样。 中的应用程序一样。 运行 中的应用程序一样
13
Jar与JAR文件
JDK中有一个实用工具 中有一个实用工具jar.exe可以完成打包 中有一个实用工具 可以完成打包 工作。打包好的文件扩展名一般为jar,所以叫 工作。打包好的文件扩展名一般为 , JAR文件。 文件。 文件 由于JAR文件中有很多类,如果想让该JAR文 文件中有很多类,如果想让该 由于 文件中有很多类 文 件可以直接运行,我们就必须告诉java虚拟机 件可以直接运行,我们就必须告诉 虚拟机 那一个类是包含main方法的主类。这是通过 方法的主类。 那一个类是包含 方法的主类 编辑一个.mf的文件来实现的。 的文件来实现的。 编辑一个 的文件来实现的
4
包与文件夹
在实际项目开发中,每个类都应该定义在某个包中。 在实际项目开发中,每个类都应该定义在某个包中。这 样一方面易于管理 另一方面可以有效地防止命名冲突 易于管理, 防止命名冲突。 样一方面易于管理,另一方面可以有效地防止命名冲突。 包名与文件夹具有对应关系 一般在创建项目时为了便于管理, 一般在创建项目时为了便于管理,源文件和字节码文件 是分开保存在不同的目录中的。 是分开保存在不同的目录中的。例如假定项目的文件夹 下的src 为myproject,则源文件保存在 ,则源文件保存在myproject下的 下的 文件夹中,字节码文件保存在myproject下的 下的classes 文件夹中,字节码文件保存在 下的 文件夹中
包与文件夹
使用JDK如何实现以上要求,简单的办法是: 如何实现以上要求,简单的办法是: 使用 如何实现以上要求 进入命令行状态 让src成为当前文件夹 成为当前文件夹 执行命令javac –d ../classes 执行命令 com/misxp/*.java 现在的集成开发工具可以方便地帮我们处理包 的问题。 的问题。
10
例:创建包firstpackage和类Date,同时在PersonDemo.java 创建包firstpackage和类Date,同时在PersonDemo.java firstpackage和类Date,同时在 创建类Person 创建类Person
1. package firstPackage; 2. import java.util. Calendar; 3. public class Date{ 4. private int year,month,day; 5. public Date(int y,int m,int d){ 6. year=y; 7. month=m; 8. day=d; 9. } 10. public Date(){} 11. public int thisyear(){ 12. return Calendar.getInstance().get(Calendar.YEAR); 13. } 14.}
15
创建可执行的JAR文件
使用工具jar.exe可以创建可执行的 可以创建可执行的JAR文件。 文件。 使用工具 可以创建可执行的 文件
进入命令行状态 让classes文件夹成为当前文件夹 文件夹成为当前文件夹 执行以下命令: 执行以下命令:
Jar cmf my.mf Test.jar *.class FirstPackage
就可以得到Test.jar打包文件。Test可以自己取。 打包文件。 可以自己取。 就可以得到 打包文件 可以自己取
双击test.jar或用命令 或用命令java –jar Test.jar就可 双击 或用命令 就可 以运行程序。 以运行程序。
16
内部类
在一个类的内部定义的类,叫做内部类。 在一个类的内部定义的类,叫做内部类。内部类可以访 问其外部类的所有成员。 问其外部类的所有成员。 内部类可以在类中、方法中、语句块中, 内部类可以在类中、方法中、语句块中,甚至语句中定 义。
18
内部类(续)
内部类可以被声明为static(普通类则不可 普通类则不可 内部类可以被声明为 顶层类( 以),这样的内部类变成顶层类(最外面的 ,这样的内部类变成顶层类 ),相当于把它放到外面 相当于把它放到外面, 类),相当于把它放到外面,不再是嵌套的 内部类。 内部类。 由于只有顶层类可以声明static成员,如果 成员, 由于只有顶层类可以声明 成员 内部类需要定义static成员,则该内部类必 成员, 内部类需要定义 成员 须声明为static。 须声明为 。
5
包与文件夹
如果一个项目myproject中的类是这样定义的: 中的类是这样定义的: 如果一个项目 中的类是这样定义的 package com.misxp; public class PackageExercise … 那么这个类所在的文件PackageExercise.java应该保存 在myproject/src/com/misxp下; 它的编译好的字节码文件应该保存在 myproject/classes/com/misxp下。 下 可以看出:包名中的com、misxp分别对应着同名的文 可以看出:包名中的 、 分别对应着同名的文 件夹。而且misxp是com的子文件夹。 的子文件夹。 件夹。而且 是 的子文件夹
8
自定义包
如果在程序中没有声明包,类就放在默认的包中, 如果在程序中没有声明包,类就放在默认的包中, 这个包是没有名字的。默认包适用于小的程序, 这个包是没有名字的。默认包适用于小的程序,如 果程序比较大,就需要创建自己的包。 果程序比较大,就需要创建自己的包。 声明包的格式 package <包名 包名>; 包名 声明一个包的语句要写在源程序文件的第一行。 声明一个包的语句要写在源程序文件的第一行。 编译后字节码文件的存放位置 运行目录下创建一个和包同名的文件夹 下创建一个和包同名的文件夹( 在运行目录下创建一个和包同名的文件夹(字母大小 写也一样),将编译产生的.class文件放到此文件 ),将编译产生的 写也一样),将编译产生的 文件放到此文件 夹中。 夹中。
Java程序设计视频教程
本讲主题: 面向对象程序设计(4)
本讲主讲教师:黄洪
浙江工业大学计算机学院
2011年
本讲内容
包的概念和应用 Jar文件与应用程序的发布 内部类 包装类
2
包
是类的逻辑组织形式。 包(package)是类的逻辑组织形式。 是类的逻辑组织形式 Java提供的用于程序开发的类和接口(API) 提供的用于程序开发的类和接口( 提供的用于程序开发的类和接口 ) 就放在各种包中。也可以自己创建包。 就放在各种包中。也可以自己创建包。
19
例:内部类访问外包类成员
1. public class Outer{ 2. private int size; 3. /** 定义内部类 定义内部类Inner */ 4. public class Inner{ 5. //将外包类的成员变量 将外包类的成员变量size递增 将外包类的成员变量 递增 6. public void doStuff(){ 7. size++; 8. } 9. } 10. Inner i=new Inner(); //成员变量 指向 成员变量i指向 成员变量 指向Inner类的对象 类的对象 11. public void increaseSize(){ 12. i.doStuff(); //调用内部类 调用内部类Inner的方法 调用内部类 的方法 13. } 14. public static void main(String[] a){ 15. Outer o=new Outer(); 16. 17. for (int i = 0; i<4; i++){ 18. o.increaseSize(); 19. System.out.println("The value of size : "+o.size); 20. } 21. } 22. }
9
包和访问权限的关系
一个包中只有访问权限为public的类才能被其它 包引用(创建此类的对象),其它具有默认访问 权限的类只能在Βιβλιοθήκη Baidu一包中使用。 在不同包中类成员的访问权限。 public类的public成员可以被其它包的代码访问。 它的protected成员可以被由它派生的其它包中的 子类访问。 默认访问权限的类成员,不能被其它包的代码访 问
7
引用包中的类或接口
import语句 如果要使用Java类中的包,要在源程序中用import语句导入。 import <包名1>[.<包名2>……].<类名|接口名>|*; “*”表示包中所有的类。 如: import java.applet.Applet;// java.applet.Applet;//导入Java.applet包中的Applet Java.applet Applet 类 import java.awt.* //导入Java.awt包中所有的类 Java包的搜索路径 用环境变量classpath设置对Java包的搜索路径。Java包一般在 JDK安装目录下的lib文件夹中,如:d:\jdk1.6\lib
3
Java API的包
java常用的包有: java.lang 语言包,唯一一个不要把它明确引入程序 的包 java.util 实用工具包 java.awt ,javax.swing 图形用户界面工具包 java.text 文本包 java.io 输入输出包 java.applet Applet应用程序包 java.net 网络编程包
12
程序的发布
把开发好的程序交给用户就叫发布。 把开发好的程序交给用户就叫发布。总不能让 用户也像我们前面讲的一样去执行吧。而且, 用户也像我们前面讲的一样去执行吧。而且, 一个较大的软件肯定有很多的字节码文件, 一个较大的软件肯定有很多的字节码文件,把 一大堆字节码文件交给用户也不方便。 一大堆字节码文件交给用户也不方便。 我们希望: 我们希望:
14
.mf文件
my.mf文件应该包含以下一行内容: 文件应该包含以下一行内容: 文件应该包含以下一行内容 Main-Class: 主类的完整名称 如: Main-Class: PersonDemo 这一行后面必须回车换行,否则可能出错。 这一行后面必须回车换行,否则可能出错。另 外,冒号后面必须空一格。 冒号后面必须空一格。
17
内部类
内部类的类名只用于定义它的类或语句块之内, 内部类的类名只用于定义它的类或语句块之内,在外部 引用它时必须给出带有外部类名的完整名称, 引用它时必须给出带有外部类名的完整名称,并且内部 类的名字不允许与外部类的名字相同。 类的名字不允许与外部类的名字相同。 内部类可以访问外部类的static或实例成员变量 内部类可以访问外部类的 或实例成员变量 内部类可以在成员方法中定义, 内部类可以在成员方法中定义,该成员方法的局部变量 及参数必须是final的才能被该内部类使用 及参数必须是 的才能被该内部类使用 内部类可以是抽象类或接口,若是接口, 内部类可以是抽象类或接口,若是接口,则可以由其它 内部类实现
11
1. import firstPackage.Date; 2. class Person{ 3. String name; 4. int age; 5. public Person(String na,int ag){ 6. name=na; 7. age=ag; 8. } 9. public Person(){} 10. public int birthYear(int thisYear){ 11. return thisYear-age+1; 12. } 13.} 14.public class PersonDemo{ 15. public static void main(String args[]){ 16. Person ps=new Person("Tom",21); 17. Date now=new Date(); 18. int y=now.thisyear(); 19. System.out.println(ps.name+" was born in "+ps.birthYear(y)); 20. } 21.}
把许多字节码文件打包成一个文件 用户双击这个文件就可以运行程序, 用户双击这个文件就可以运行程序,就像我们 运行windows中的应用程序一样。 中的应用程序一样。 运行 中的应用程序一样
13
Jar与JAR文件
JDK中有一个实用工具 中有一个实用工具jar.exe可以完成打包 中有一个实用工具 可以完成打包 工作。打包好的文件扩展名一般为jar,所以叫 工作。打包好的文件扩展名一般为 , JAR文件。 文件。 文件 由于JAR文件中有很多类,如果想让该JAR文 文件中有很多类,如果想让该 由于 文件中有很多类 文 件可以直接运行,我们就必须告诉java虚拟机 件可以直接运行,我们就必须告诉 虚拟机 那一个类是包含main方法的主类。这是通过 方法的主类。 那一个类是包含 方法的主类 编辑一个.mf的文件来实现的。 的文件来实现的。 编辑一个 的文件来实现的
4
包与文件夹
在实际项目开发中,每个类都应该定义在某个包中。 在实际项目开发中,每个类都应该定义在某个包中。这 样一方面易于管理 另一方面可以有效地防止命名冲突 易于管理, 防止命名冲突。 样一方面易于管理,另一方面可以有效地防止命名冲突。 包名与文件夹具有对应关系 一般在创建项目时为了便于管理, 一般在创建项目时为了便于管理,源文件和字节码文件 是分开保存在不同的目录中的。 是分开保存在不同的目录中的。例如假定项目的文件夹 下的src 为myproject,则源文件保存在 ,则源文件保存在myproject下的 下的 文件夹中,字节码文件保存在myproject下的 下的classes 文件夹中,字节码文件保存在 下的 文件夹中