《JAVA学习--第2章--面向对象编程.ppt》由会员分享,可在线阅读,更多相关《JAVA学习--第2章--面向对象编程.ppt(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、江苏大学软件工程课程组江苏大学软件工程课程组Page 2本章内容本章内容软件工程的发展历史编程语言的发展面向过程的设计思想面向对象的设计思想对象和类的概念 类之间的关系对象和引用Java 类的定义构造函数对象的创建和使用源文件的布局package 和 import 语句 部署江苏大学软件工程课程组江苏大学软件工程课程组Page 3软件工程软件工程 软件工程是一门难以驾驭的学科。寻求的是通过代码复用使软件系统创建更容易机器代码(20世纪40年代末现在)Fortran LISP C COBOL高级语言(20世纪50年代末现在)OS/360 Unix Macos microsoft Windows操
2、作系统(20世纪60年代末现在)NASTRAN TCP/IP ISAM X-Windows OpenLook库/函数API(20世纪60年代20世纪80年代)SELF Smalltalk Common Lisp Object System eiffel C+ java面向对象语言(20世纪80年代现在)Java2 SDK AWT/J.F.C JiniTM JavaBeansTM JDBCTM工具包/框架/对象API(20世纪90年代至今)江苏大学软件工程课程组江苏大学软件工程课程组Page 4编程语言的发展编程语言的发展机器语言直接由计算机的指令组成,指令、数据、地址都以“0”和“1”的符合串
3、组成;可以被计算机直接执行。汇编语言用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。高级语言屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。面向对象的语言与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。语言的发展是朝着人类更容易理解的方向前进江苏大学软件工程课程组江苏大学软件工程课程组Page 5分析和设计阶段分析和设计阶段一个软件项目的开发分五个主要的工作流程:需求捕获、分析、设计、实现和测试分析描述系统需要做什么:对真实世
4、界进行建模,包括参与者和活动、对象和行为。设计描述系统如何工作:对系统中对象和参与者之间的关系和交互进行建模。找出有用的抽象来帮助简化问题或解决方案。江苏大学软件工程课程组江苏大学软件工程课程组Page 6抽象抽象软件设计一直在从低级构造向更高级发展抽象:指忽略对象的不重要的细节,而集中关注其重要的细节简化构建高级语言的结构,不使用原始的机器编码抽象的概念导致高级语言中的子程序(函数)的发展,以及对象中的函数和数据配对。更高级别上,导致框架和API的发展江苏大学软件工程课程组江苏大学软件工程课程组Page 7面向过程的设计思想和面向对象的设计思想面向过程的设计思想和面向对象的设计思想我要去新疆
5、面向过程我开车,我挂档,我踩油门,我过河北,我过陕西面向对象我命令车去新疆车怎么去不关我事信息封装在车这个类的内部我不用去了解车整个开动的过程面向对象的基本思想:从现实世界中客观存在的事物出发构造软件系,并在系统的构造过程中尽可能运用人类的自然思维方式。面向对象更加强调运用人类在日常思维逻辑中经常采用的思想方法与原则,如抽象、分类、继承、聚合、多态等江苏大学软件工程课程组江苏大学软件工程课程组Page 8对象和类的概念对象和类的概念对象用计算机语言对问题域中事物的描述,对象通过“属属性(性(attribute)”和和“方法(方法(method)”来分别对应事物所具有的静态属性和动态属性。类是用
6、于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。类可以看成一类对象的模板,对象可以看成该类的一个具体实例。职员职员A类类对象对象实例化实例化抽象抽象江苏大学软件工程课程组江苏大学软件工程课程组Page 9类(对象)之间的关系类(对象)之间的关系 之之 关联关系关联关系江苏大学软件工程课程组江苏大学软件工程课程组Page 10继承关系(一般和特殊)继承关系(一般和特殊)XX是一种XX江苏大学软件工程课程组江苏大学软件工程课程组Page 11聚合关系(整体和部分)聚合关系(整体和部分)聚集聚集组合组合江苏大学软件工程课程组江苏大学软件工程课程组Page 12实现
7、关系实现关系江苏大学软件工程课程组江苏大学软件工程课程组Page 13多多 态态江苏大学软件工程课程组江苏大学软件工程课程组Page 14Java与面向对象与面向对象对象是Java程序的核心,在Java程序中“万事万物皆对象”。类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法。类可以看成是静态属性(成员变量)和动态属性(方法)的封装体。J2SDK提供了很多类供编程人员使用,编程人员也可定义自己的类。我们的语言:成员变量属性 方法函数江苏大学软件工程课程组江苏大学软件工程课程组Page 15为什么用对象?为什么用对象?面向对象的编程一组对象互相配合配合通过
8、沟通沟通完成特定功能所有的paradigm都是对现实问题的抽象汇编是对机器语言的抽象面向过程的语言是对汇编的抽象对象更加符合对于现实问题的抽象对象都有对外服务的接口通过继承可以复用对象隐藏内部服务的实现通过聚合可以复用面向对象更加容易使我们达到这些年来苦苦追求的境界Reusability、Extensibility、Maintainablity维护和替换更加方便、.组件比对象更高的层次上的抽象(二进制级别)EJB、Web Service、CORBA、COM、.江苏大学软件工程课程组江苏大学软件工程课程组Page 16Java Java 类的定义类的定义Java程序是由类构成,类是Java程序的
9、基本要素,类实现了对数据和数据处理的封装,是创建对象的模板。类的实现包括两部分:类声明和类体 类的修饰符类的修饰符 class class 类名类名 extends extends 超类名超类名implementimplement接口名表接口名表 / /类声明类声明 类体/用用 class 关键字定义一个类,例如:关键字定义一个类,例如:class Person /成员变量定义成员变量定义 private int id; private int age = 20; /方法定义方法定义 public int getAge() return age; public void setAge(int
10、i) age = i; public int getId() return id;江苏大学软件工程课程组江苏大学软件工程课程组Page 17成员变量的声明成员变量的声明l类的属性通过成员变量来定义,成员变量声明类的属性通过成员变量来定义,成员变量声明的格式为: 变量类型 =变量初值 ; 例如: private int id; private int age = 20;修饰符:可以用private,public,protected设置成员变量的访问控制 权限,以实现封装的目的类型:可以是任何基本类型(4类8中)或者是引用类型变量名:必须是合法的Java标识符变量初值:定义类的时候可以为成员变量设
11、置初始值 江苏大学软件工程课程组江苏大学软件工程课程组Page 18成员变量成员变量成员变量可以使用Java语言中任何任何一种数据类型(包括基本类型基本类型和引引用类型用类型(数组、对象数组、对象))。在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(右图)成员变量的作用范围为整个类体。成员变量类型 取值 byte0 short0int 0long0Lcharu0000 float0.0F double0.0D booleanfalse 所有引用类型null 江苏大学软件工程课程组江苏大学软件工程课程组Page 19方方 法法lJavaJava的方法类似于其它
12、语言的函数,是一段用来完成特定功能的代码片段,声的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,声明格式:明格式: 修饰符修饰符1 修饰符修饰符2 返回值类型返回值类型 方法名方法名(形式参数列表形式参数列表)Java语句;语句; l形式参数: 在方法被调用时用于接收外界输入的数据。l实参:调用方法时实际传给方法的数据。l返回值:方法在执行完毕后返还给调用它的环境的数据。l返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回值类型void。l Java语言中使用下述形式调用方法:对象名.方法名(实参列表)l 实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配
13、,l return 语句终止方法的运行并指定要返回的数据。l Java中进行函数调用中传递参数时,遵循值传递的原则: 基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。TestMethod.java江苏大学软件工程课程组江苏大学软件工程课程组Page 20局部变量和成员变量局部变量和成员变量l成员变量和局部变量的类型可以是Java中任何一种数据类型(包括基本类型和引用类型(数组、对象))。l他们的名字必须符合标识符的规定,一般情况下首字母小写l成员变量在整个类中有效,局部变量只在定义的方法内有效l成员变量又分为实例成员变量和类变量(静态变量).如果成员变量的类型前面
14、加上关键字static,这样的成员变量称做是类变量或静态变量。 class Dog float height; /实例变量 static int y; /类变量 l如果局部变量的名字和成员变量的名字相同,则成员变量的被隐藏,即该成员变量在这个方法失效。 class Tom int x=98,y; void f() int x=3; y=x; /此处y的值应该是3,而不是98如果没有int x=3语句y应该是98 江苏大学软件工程课程组江苏大学软件工程课程组Page 21局部变量和成员变量(续)局部变量和成员变量(续)l如果局部变量的名字和成员变量的名字相同,则成员变量的被隐藏,此时如果想在该方
15、法中使用成员变量必须使用this关键字 public class Leaf int i = 0 Leaf(int i) this.i = i; /this.i指的是成员变量指的是成员变量i 在类的方法定义中使用的 this 关键字代表使用该方法的对象使用该方法的对象的引用。江苏大学软件工程课程组江苏大学软件工程课程组Page 22JavaJava面向对象基本概念面向对象基本概念 引用引用Java 语言中除基本类型之外的语言中除基本类型之外的变量类型都称之为引用类型。变量类型都称之为引用类型。Java中的对象是通过引用对其中的对象是通过引用对其操作的。例如:操作的。例如: /* * 声明了一个声
16、明了一个String类型的引用变量,类型的引用变量, * 但并没有使它指向一个对象但并没有使它指向一个对象 */String s;/* * 使用使用new语句创建了一个语句创建了一个String * 类型的对象并用类型的对象并用s指向它指向它 * 以后可以通过以后可以通过s完成对其的操作完成对其的操作 */s = new String(hello world!);String s;nulls = new String(hello world!);0 x3a123b 0 x3a123b堆内存堆内存如何在内存中区分类和对象?类是静态的概念,代码区对象是new出来的,位于堆内存,类的每个成员变量在不
17、同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。江苏大学软件工程课程组江苏大学软件工程课程组Page 23对象的创建对象的创建创建一个对象包括对象的声明和为对象分配内存两个步骤对象的声明一般格式为: 类的名字 对象的名字Book java2 / Book是类名 java2对象的名字对象的声明仅仅告诉编译器,对象所属的类,并没有真正为对象分配空间,只有使用new运算符实例化对象并为对象分配存储空间为声明的对象分配内存使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法。创建一个对象的实际物理拷贝,返回对它的引用,这个引用就
18、是new分配给对象的内存首地址,然后这个引用就被存储在该对象名中。如: java2 =new Book(); /使用new运算符和默认的构造方法为对象分配内存java2是已声明的对象,通过new运算符为java2分配一段存储空间,对象名java2就是该内存对象的一个引用,即java2的值是为对象分配的内存空间的首地址。java2 = new Book();0 x11ac 0 x11ac堆内存堆内存java2江苏大学软件工程课程组江苏大学软件工程课程组Page 24对象的使用对象的使用对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一
19、定的行为。通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。person.ageperson.setAge(25)当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。同一类的每个对象有不同的成员变量存储空间。同一类的每个对象共享该类的方法。江苏大学软件工程课程组江苏大学软件工程课程组Page 25类和对象的关系类和对象的关系类C的代码(code seg)(heap seg)class C int i;int j;.main. C c1 = new C();C c2 = new C();xxxxxxxxc1c2c1.ic1.jc2.ic2.j江苏大学软件工程课程组江苏大学
20、软件工程课程组Page 26封装封装封装通过以下活动提供了数据表示的灵活性:隐藏了类的实现细节。强迫用户使用接口来访问数据。使代码具有更好的可维护性。江苏大学软件工程课程组江苏大学软件工程课程组Page 27面向对象编程语言三大特征面向对象编程语言三大特征 隐藏/封装继承多态江苏大学软件工程课程组江苏大学软件工程课程组Page 28构造方法(函数)构造方法(函数)l使用 new + 构造方法 创建一个新的对象。l构造方法是定义在 Java 类中的一个用来初始化对象的方法。l构造方法与类同名且没有返回值。l构造方法不能由编程人员显式的调用,不能被子类继承l例如: Person 类的构造函数: c
21、lass Person int id;int age;Person(int n,int i) id = n; age = i;void setAge(int i) age=i; 江苏大学软件工程课程组江苏大学软件工程课程组Page 29构造方法的调用构造方法的调用class Person int id; int age; Person(int n,int i) id = n; age = i; void setAge(int i) age=i; public class Test public static void main(String args) Person tom = new Per
22、son(1,25); Person john = new Person(2,27); 创建对象时,使用构造方法初始化对象的成员变量。创建对象时,使用构造方法初始化对象的成员变量。堆内存堆内存*125227#tomjohn江苏大学软件工程课程组江苏大学软件工程课程组Page 30内存分析内存分析 (1 1)public class Test public static void main(String args) Person p1 = new Person(1, 22); Person p2 = new Person(2, 23); int age = 25; p1.setAge(age);
23、p2.setAge(age+); 堆内存堆内存*221232p1p2栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 31内存分析内存分析 (2 2)public class Test public static void main(String args) Person p1 = new Person(1, 22); Person p2 = new Person(2, 23); int age = 25; p1.setAge(age); p2.setAge(age+); 堆内存堆内存*25221232p1p2age栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Pag
24、e 32内存分析内存分析 (2 2)public class Test public static void main(String args) Person p1 = new Person(1, 22); Person p2 = new Person(2, 23); int age = 25; p1.setAge(age); p2.setAge(age+); 堆内存堆内存*25221232p1p2age栈内存栈内存25i江苏大学软件工程课程组江苏大学软件工程课程组Page 3325内存分析内存分析 (3 3)public class Test public static void main(
25、String args) Person p1 = new Person(1, 22); Person p2 = new Person(2, 23); int age = 25; p1.setAge(age); p2.setAge(age+); 堆内存堆内存*251232p1p2栈内存栈内存age江苏大学软件工程课程组江苏大学软件工程课程组Page 3426内存分析内存分析 (4 4)public class Test public static void main(String args) Person p1 = new Person(1, 22); Person p2 = new Perso
26、n(2, 23); int age = 25; p1.setAge(age); p2.setAge(age+); 堆内存堆内存*251252p1p2栈内存栈内存age江苏大学软件工程课程组江苏大学软件工程课程组Page 35内存分析内存分析 (4 4)public class Test public static void main(String args) Person p1 = new Person(1, 22); Person p2 = new Person(2, 23); int age = 25; p1.setAge(age); p2.setAge(age+); 堆内存堆内存2512
27、52p1p2栈内存栈内存age江苏大学软件工程课程组江苏大学软件工程课程组Page 36构造方法构造方法 当没有指定构造方法时,编译器为类自动添加形如当没有指定构造方法时,编译器为类自动添加形如 类名类名( ) 的构造方法。如果已有,编译器就不再添加了。的构造方法。如果已有,编译器就不再添加了。 例如:例如:class Point public int x; public int y; Point() Point p = new Point(); 堆内存堆内存00#p江苏大学软件工程课程组江苏大学软件工程课程组Page 37调用过程演示(调用过程演示(1 1)Test test = new T
28、est();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);堆内存堆内存110
29、9259587934354752200011197077testdated1d2main栈内存栈内存TestBirthdate/Test.java江苏大学软件工程课程组江苏大学软件工程课程组Page 389调用过程演示(调用过程演示(2 2)堆内存堆内存1109259587934testdated1354752d2200011197077Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date
30、);test.change2(d1);test.change3(d2); public void change1(int i) i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);mainchange1i栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 39调用过程演示(调用过程演示(3 3)1234堆内存堆内存1109259587934testdated1354752d2200011197077Tes
31、t test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234; public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDa
32、y(22);mainchange1i栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 40调用过程演示(调用过程演示(4 4)堆内存堆内存1109259587934354752200011197077Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i
33、)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);testdated1d2main栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 41调用过程演示(调用过程演示(5 5)587934堆内存堆内存1109259587934testdated1354752d2200011197077Test test = new Test();int date = 9;BirthDate d1= new BirthD
34、ate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);mainchange2b栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 42调用过程演
35、示(调用过程演示(6 6)587976堆内存堆内存1109259587934testdated1354752d2200011197077Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate
36、b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);mainchange2b2004222栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 43调用过程演示(调用过程演示(7 7)堆内存堆内存1109259587934354752200011197077Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); te
37、st.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);testdated1d2main栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 44调用过程演示(调用过程演示(8 8)354752堆内存堆内存1109259587934testdated1354
38、752d2200011197077Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(
39、BirthDate b)b.setDay(22);mainbchange3栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 45调用过程演示(调用过程演示(9 9)354752堆内存堆内存1109259587934testdated1354752d22000221197077Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.
40、change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);mainbchange3栈内存栈内存江苏大学软件工程课程组江苏大学软件工程课程组Page 46调用过程演示(调用过程演示(1010)堆内存堆内存11092595879343547522000221197077Test test = new Test();int date = 9;BirthD
41、ate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000); test.change1(date);test.change2(d1);test.change3(d2); public void change1(int i)i = 1234;public void change2(BirthDate b)b = new BirthDate(22,2,2004);public void change3(BirthDate b)b.setDay(22);testdated1d2main栈内存栈内存江苏大学软件工程课程组江
42、苏大学软件工程课程组Page 47复习:对象的创建和使用复习:对象的创建和使用 必须使用 new 关键字创建对象。 使用对象引用.成员变量或来引用对象的成员变量。 使用对象引用.方法(参数列表)来调用对象的方法。 同一类的每个对象有不同的成员变量存储空间。 同一类的每个对象共享该类的方法。TestCircle.java江苏大学软件工程课程组江苏大学软件工程课程组Page 48/运行如下程序运行如下程序public class Test public static void main(String args) Person p = new Person(1,20); p.info(); p.in
43、fo(hello); 方法的重载方法的重载l 方法的方法的重载重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。是指一个类中可以定义有相同的名字,但参数不同的多个方法。 调用调用时,会根据不同的参数表选择对应的方法。时,会根据不同的参数表选择对应的方法。l 例如:在例如:在 Person 类中添加如下方法:类中添加如下方法:void info() System.out.println(My id is +id);void info(String t) System.out.println(t+ +id+ +age);TestOverload2.javaTestOverload1.ja
44、va江苏大学软件工程课程组江苏大学软件工程课程组Page 49构造方法的重载构造方法的重载l 与普通方法一样,构造方法也可以重载:l 例如:修改 Person 类的构造方法为:Person() id = 0; age = 20;Person(int i) id = 0; age = i;Person(int n,int i) id = n; age = i;江苏大学软件工程课程组江苏大学软件工程课程组Page 50this this 关键字关键字在类的方法定义中使用的 this 关键字代表使用该方法的对使用该方法的对象象的引用。当必须指出当前使用方法的对象是谁时要使用this。有时使用this
45、可以处理方法中成员变量和参数重名的情况。 class Leaf int i = 0; Leaf(int i) this.i = i; Leaf increament() i+; return this; void print() System.out.println(i = +i); public static void main(String args) Leaf leaf = new Leaf(100); leaf.increament().increament().print(); 江苏大学软件工程课程组江苏大学软件工程课程组Page 51源文件的布局源文件的布局Java技术的源文件采用
46、下列形式:技术的源文件采用下列形式: * * +顺序很重要顺序很重要,任何导入语句必须位于所有类声任何导入语句必须位于所有类声明之前明之前,包声明必须在所有的导入语句和类声包声明必须在所有的导入语句和类声明之前明之前注意:源文件的名称必须与该文件公有类的名称相同。如果源文件没有公有类,那么源文件的命名不受限制源文件可以包含多个类,但是只有一个类可以被声明为公有的推荐做法:每个类的声明有个源文件,并且文件名与类名相同.江苏大学软件工程课程组江苏大学软件工程课程组Page 52package package 和和 importimport语句语句为便于管理大型软件系统中数目众多的类,解决类的命名冲
47、突为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,问题,Java引入包(引入包(package)机制,提供类的多重类命名空)机制,提供类的多重类命名空间。间。 shipping GUI langdomain Company VehicleTruckreports拥有 0.*RiverBaege江苏大学软件工程课程组江苏大学软件工程课程组Page 53package package 和和 importimport语句语句package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:package pkg1.pkg2
48、.pkg3;Java编译器把包对应于文件系统的目录管理,package语句中,用 . 来指明包(目录)的层次,例如使用语句package cn.edu.ujs.jsj;则该文件中所以的类位于. cneduujsjsj目录下江苏大学软件工程课程组江苏大学软件工程课程组Page 54package package 和和 importimport语句语句如果将一个类打包,则使用该类时,必须使用该类的全名(例如: cn.edu.ujs.jsj.MyClass),Java编译器才会在找到该类。也可以使用 import 在文件的开头引入要使用到的类;例如:可以不需要用import语句直接使用 java.l
49、ang 包中的类。import cn.edu.ujs.jsj.MyClass;import java.util.*;/引入引入java.util包中所有的类包中所有的类 . . . MyClass myClass = new MyClass(); /可以直接使用类名可以直接使用类名 . . .江苏大学软件工程课程组江苏大学软件工程课程组Page 55J2SDKJ2SDK中主要的包介绍中主要的包介绍java.lang包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。java.awt包含了构成抽象窗口工具集(abstract wind
50、ow toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。包含执行与网络相关的操作的类。java.io包含能提供多种输入/输出功能的类。java.util包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。jar -cvf test.jar *江苏大学软件工程课程组江苏大学软件工程课程组Page 56目录布局和包目录布局和包包存储在一个以包名为分支目录树中. shipping / domain / Company.class Vehicle.class RiverBarge.class VehicleCapacityReport.classGUI /R