欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

    第4面向对象技术基础.ppt

    • 资源ID:2566758       资源大小:461.51KB        全文页数:96页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第4面向对象技术基础.ppt

    1,第4章 面向对象程序设计基础,2,主要内容,4.1 面向对象的基本概念 4.2 类的定义 4.3 类和对象的使用 4.4 包package 4.5 成员变量及方法的访问权限 4.6 final、this及其它,3,4.1 面向对象的基本概念,4.1.1面向对象编程的概念 4.1.2客观事物的抽象,4,4.1.1面向对象编程的概念,1、面向过程编程: 面向过程编程语言的设计思想是:通常将存放基本数据类型的变量作为程序处理对象、以变量的赋值作为程序的基本操作、以变量值的改变作为程序运行的状态。 缺点:数据抽象简单、信息完全暴露、算法复杂、无法很好地描述客观世界、代码重用性差等。如果软件项目庞大,程序的调试和维护将变得异常困难。,5,4.1.1面向对象编程的概念,2、面向对象编程: 面向对象的程序设计思想是将数据以及对于这些数据的操作,封装在了一个单独的数据结构中。这种模式更近似于现实世界,在这里,所有的对象都同时拥有属性以及与这些属性相关的行为。对象之间的联系是通过消息来实现的,消息是请求对象执行某一处理或回答某些信息的要求。 所以,一个面向对象程序的执行,就是靠对象间传递消息来完成的。,6,4.1.1面向对象编程的概念,面向对象编程: 面向对象程序设计是一种新兴的程序设计方法,或者是一种新的程序设计规范,它使用对象、类、继承、封装、消息等基本概念来进行程序的设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。,7,4.1.1面向对象编程的概念,面向对象的三大特点:封装、继承、多态 1)封装 封装就是把对象的属性和和对这些属性的操作封装在一个单独的数据结构中,并尽可能隐蔽对象的内部细节,包含两个含义: 把对象的全部属性和对属性的全部操作结合在一起,形成一个不可分割的独立单元(即对象)。 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。,8,4.1.1面向对象编程的概念,面向对象的三大特点:封装、继承、多态 2)继承 继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个拥有共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类或超类。Java不支持多重继承,子类只能有一个父类。 在Java编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。继承在Java中无所不在。,9,4.1.1面向对象编程的概念,面向对象的三大特点:封装、继承、多态 3)多态 对象的多态是由封装和继承引出的面向对象程序设计语言的另一特征。主要体现在两个方面:方法重载时实现的静态多态和方法重载时实现的动态多态。 多态性使得我们的同一方法,可以有多种形式。另外父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,同一个属性或方法在父类及其各个子类中可以具有不同的语义。,10,4.1.2客观事物的抽象,为了使计算机能够处理和理解客观事物,必须对事物进行抽象,以求得事物的本质。现实事物纷繁复杂,因此,在事物抽象过程中,必须忽略抽象事物中那些与当前目的无关的特征,求取对当前需求有直接影响的因素。因此,针对客观事物的抽象必须掌握一定的抽象原则。 我们知道,当确定了一个圆形的圆心位置和圆的半径后,就可以在平面上确定一个圆。因此,抽象出来的圆的要素为圆心和半径。,11,4.1.2客观事物的抽象,用数据结构来表示,如下: class Circle point center; / 圆心 float rudius; / 半径 其中class是面向对象程序设计常用来定义“类”这种数据结构的关键字。,12,4.1.2客观事物的抽象,添加一些基本的行为如获取圆的面积,表示如下: class Circle point center; / 属性或成员 float radius; / 属性或成员 double getArea() / 方法 return radius*radius*3.1415926; ,13,第4章 面向对象程序设计基础,4.1 面向对象的基本概念 4.2 类的定义 4.3 类和对象的使用 4.4 包package 4.5 成员变量及方法的访问权限 4.6 final、this及其它,14,4.2 类的定义,4.2.1 类声明 4.2.2 类体 4.2.3 实例化对象 4.2.4 构造方法说明 4.2.5 对象的清除 4.2.6 方法重载,15,4.2.1类声明,类的声明举例: class Circle point center; / 属性或成员 float radius; / 属性或成员 double getArea() / 方法 return radius*radius*3.1415926; public class Rectangle extends Shapes implement Display / 类体 /下面的Rectangle类继承了Shapes父类,实现了接口 Display,是一个公共类。,16,4.2.1类声明,类声明的格式如下: 修饰符 class 类名 extends 超类名 implements接口名列表 可能的选项有: publicabstract|final class 类名 extends 超类名 implements 接口名列表 public(公共):public修饰的类能被所有的类访问。 abstract(抽象):abstract修饰的类不能被实例化,它包含 有未实现的方法。 final(最终):final修饰的类不能被继承,即不能有子类。 注意: abstract和final不能同时作为一个类的修饰符。,17,4.2.1类声明,类名: 习惯上类名的第一个字母大写,但这不是必须的。类的名字不能是Java 中的关键字,要符合标识符规定,即名字可以由字母,下划线,数字或美圆符号组成,并且第一个字符不能是数字。但给类命名时,最好遵守如下习惯: 如果类名使用拉丁字母,那么名字的首写字母使用大写字母,例如Hello、Time、People等。 类名最好见名知意,当类名由几个”单词”复合而成时,每个单词的首写字母使用大写,如BeijingTime、AmericanMap、HelloChina等。,18,4.2.1类声明,extends(继承): extends保留字用来表明新创建的类继承哪个类,被继承的类称为此类的父类。extends后面只能跟一个父类名。 implements(实现): 用来表明这个类实现了哪些接口,接口名可以有多个。 例如:下面的类是合法的: class MyC1ass /空类,没有任何用处,但是合法 又如:下面的Rectangle类继承了Shapes父类,实现了接口Display,是一个公共类。 public class Rectangle extends Shapes implement Display / 类体 ,19,4.2.2类体,类体中定义了该类所有的成员变量和该类所支持的方法,其格式说明如下: 成员变量说明 成员方法说明 ,20,4.2.2类体,类体: public | protected | private static final transient volatile type variableName; /成员变量 public | protected | private static final | abstract native synchronized returnType methodName(paramList) throws exceptionList statements /成员方法 ,21,4.2.2类体,1成员变量说明 成员变量又称值域。成员变量的说明类似于方法的局部变量说明,所不同的是,成员变量定义在类中,是类成员的一部分,整个类都可以访问它。Java中成员变量说明形式如下: 修饰符 成员变量类型 成员变量名列表; 例如:private int number; 成员变量的修饰符有以下几种:缺省访问修饰符、public、protected、private、final、static、transient和volatile。 这些修饰符中前面四个的含义以后将讲到。这里只讲后面四个,22,4.2.2类体,2成员变量使用 类的成员变量在定义它的类内部,可以直接通过成员变量名来访问。 class Circle static final float PI=3.1415926f; / 常量 private Point center; / 属性或成员 private float radius; / 属性或成员 static Color color; public float area; float getArea() / 方法 return radius*radius*PI; /内部访问成员变量 ,23,4.2.2类体,如果从类的外部访问,类变量和类对象变量的使用方法是不同。访问类变量的格式如下: 类名.类变量名 例如我们可以采用下面形式访问上例中的静态变量color的:Circle.color,由此可见,访问类变量与类的对象构造和对象都无关。类变量名必须用static修饰。更详细的说明见后面的章节。 访问实例变量的格式如下: 对象名.实例变量名 例如 Circle c1=new Circle(); /c1是对象名 System.out.println(“area=”+c1.area); System.out.println(“Color=”+Circle.color);,24,class Circle static final float PI=3.1415926f; / 常量 private Point center; / private float radius; /实例变量 static Color color; /类变量 public float area; float getArea() /实例方法 area= radius*radius*PI; return area; /内部访问成员变量 访问: public class Test public static void main(String args) Circle c1=new Circle(); /c1是对象名 System.out.println(“area=”+c1.area); System.out.println(“Color=”+Circle.color); ,25,4.2.2类体,3、成员方法声明 在Java中,方法总是Java类的一个组成部分。通过类的方法,改变对象的状态。方法声明分为方法头部声明和方法体两部分。 方法头部声明的格式如下: 方法修饰符 返回值类型 方法名(形参列表)throws异常列表 可能的选项有: defaultpublic | protected | private static final | abstract native synchronized returnType methodName(paramList)throws exceptionList/方法声明 ,26,4.2.2类体,4.方法体 方法体是实现这个方法的代码段,它由“”和“”括起来的语句序列构成。 方法体也可以是一个分号“;”,表示无方法体,该方法没有实现。当且仅当方法的修饰符中有abstract或native时,方法才无方法体。 例如求解三角形问题时可以编写Triangle类,在Triangle类可以有如下的3个方法。程序如下:,27,4.2.2类体,4.方法体 class Triangle double sizdA,siddB,siddC; /三角形的三边 void setSide(double a,double b,double c) /该方法用来赋初值 sideA=a; sideB=b; sideC=c; boolean isOrNotTriangle() /判断是否是三角形的方法 if(sideA+sideBsideC public Triangle getOneInstance() return new Triangle(); /(把头部的Triangle改成String,行不行?) ,28,4.2.2类体,5方法的调用 成员方法又分为类方法(静态方法)和对象方法(实例方法)两类。他们的调用是有区别的。 前面已经简单讨论了类变量。类变量不属于由类定义的个别实例对象,而是属于定义它的类;实例变量是针对实例的。这些讨论同样也适用于类方法。 类方法调用形式如下: 类名.类静态方法名(实参列表) 对象方法调用形式如下: 类对象名.类非静态方法名(实参列表) 例如 Circle c1=new Circle(); / r1是对象名 System.out.println(“area=”+c1.getArea();,29,4.2.3 实例化对象,前面讲过,类是创建对象的模板.当使用一个类创建了一个对象时,我们也说我们给出了这个类的一个实例。通常的格式为: Type objectName=new Type(parameterList); 创建一个对象包括对象的声明、为对象分配内存空间和赋初值三个步骤。 1、对象的声明格式为: 类的名字 对象名字; 如 People zhangPing; 或 People zhangPing ,zhangYong; 这里People 是一个类的名字,zhangPing是我们声明的对象的名字.,30,4.2.3 实例化对象,2、 为声明的对象分配内存. 使用new 运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法。默认的构造方法是无参数的,构造方法的名字必须和类名相同。用new可以为一个类实例化多个不同的对象,这些对象分别占用不同的内存空间,因此改变其中一个对象的状态不会影响其他对象的状态。 3、最后一步是执行构造方法,进行初始化。 zhangPing=new People(“20040101”); zhongYong=new People(“20040102”); /实例化另外一个对象。 上面三个步骤,通常可以写成如下简洁的形式: People zhangPing=new People(“20040101”);,31,4.2.3 实例化对象,【例4-1】下面的例子将建立雇员信息类EmpInfo,并实例化对象,然后打印出若干信息。 / EmpInfo.java public class EmpInfo String name; / 雇员的姓名 String designation; / 雇员的职务 String department; / 雇员的部门 void print() / 成员方法 System.out.println(name + “ is “ + designation + “ at “ + department); ,32,4.2.3 实例化对象,public static void main(String argv) EmpInfo employee = new EmpInfo(); / 创建对象并实例化 employee.name = “ Robert Javaman “ ; / 给成员变量赋值 employee.designation = “ Manager “ ; /给成员变量赋值 employee.department = “ Coffee Shop “ ; /给成员变量赋值 employee.print(); / 调用方法print() 运行结果如下: Robert Javaman is Manager at Coffee Shop,33,4.2.4构造方法,每当由类构造对象时都要调用该类特定的构造方法,在Java中,每个类都至少有一个构造方法。构造方法可以确保用户正确地构造类的对象,同时,构造方法也会对对象作初始化工作。 构造方法声明形式如下: 构造方法修饰符 方法名(形式参数列表) throws异常列表 方法体 构造方法修饰符与一般方法修饰符相同,前面也有讲过,34,4.2.4构造方法,但是,构造方法不能像一般的方法那样被直接调用,它是在构造类的实例的时候被new关键字调用的。当我们构造一个类的实例的时候,编译器主要完成以下三件事情: (1) 为对象分配内存空间; (2) 初始化对象中的实例变量的值,初始值可以是缺省值,或者变量按指定的值初始化; (3) 调用对象的构造方法。 一个类的构造方法可以有多个,它们都具有相同的方法名,即类名。编译器根据参数的类型来决定调用哪个构造方法。这就是构造方法的多态。,35,4.2.4构造方法,构造方法分为缺省的构造方法(不带参数)和带参数的构造方法。 (1)缺省的构造方法 如果类的定义没有编写构造方法,Java语言会自动为用户提供。这个由Java自动提供的构造方法就是所谓的缺省构造方法。缺省的构造方法确保每个Java类都至少有一个构造方法,该方法应符合方法的定义。 例如在例4-1的类EmpInfo中,我们没有定义构造方法,则Java自动提供了一个缺省的构造方法,如下: public EmpInfo() /缺省的构造方法,36,4.2.4构造方法,除了执行缺省的构造方法之外,也要给成员变量赋初值。Java中有规定。,37,4.2.4构造方法,(2)带参数的构造方法 带有参数的构造方法能够实现这样的功能:当构造一个新对象时,类构造方法可以按需要将一些指定的参数传递给对象的变量。,38,4.2.4构造方法,【例4-3】在例4-1的基础上编写带参数的构造方法。 / EmpInfoC.java public class EmpInfoC String name; / 雇员的姓名 String designation; / 雇员的职务 String department; / 雇员的部门 / 带参数的构造方法 public EmpInfoC(String name,String desi,String depa) this.name=name; this.designation=desi; this.department=depa; void print() / 成员方法 System.out.println(name + “ is “ + designation + “ at “ + department); ,39,4.2.4构造方法,【例4-3】在例4-1的基础上编写带参数的构造方法。 public static void main(String argv) EmpInfoC employee = new EmpInfoC(“Robert Javaman “,“Manager“,“Coffee Shop“); employee.print(); / 调用方法print() 运行结果如下: Robert Javaman is Manager at Coffee Shop 由于采用了带有参数的构造方法来实例化对象,同时对对象进行初始化,与例4-1相比较,代码少了,更简洁更清晰了,如下: EmpInfo employee = new EmpInfo(); / 创建对象并实例化 employee.name = “ Robert Javaman “ ; / 给成员变量赋值 employee.designation = “ Manager “ ; /给成员变量赋值 employee.department = “ Coffee Shop “ ; /给成员变量赋值 employee.print(); / 调用方法print() ,40,4.2.5 对象的清除,Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存,完成对象的清除。当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把没有引用的对象作为垃圾收集起来并释放。垃圾收集器作为一个线程运行,当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行,否则垃圾收集器在系统空闲时异步地执行。在对象作为垃圾被收集器释放前,Java运行时系统会自动调用对象的方法finialize(),使它清除自己所使用的资源。 在类的定义中,除了必须定义创建类实例的方法外,还可以在定义中提供用于对象清除的方法finialize(),它的格式如下: protected void finalize() throws Throwable /撤销对象 finalize()方法是类java.long.Object中最基本的方法。 前面已经讲过,Java提供自动内存垃圾收集和处理程序。然而,在某些情况下,当一个类被破坏后,需要亲自执行一些垃圾收集器不能处理的特殊清理工作。,41,4.2.6 方法重载,方法重载(Method Overloading)就是一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同,或者是返回值不同。 这也是面向对象的程序设计中的奇妙之处,重载反映了大千世界的变化。 从另外的含义上来讲,重载也可以看成是同一个方法具有不同的版本,每个版本之间在参数特征和返回值方面有差别。重载是Java实现多态性的一种方式。 当调用一个重载方法时,JVM自动根据当前对方法的调用形式匹配类的定义中的形式,匹配成功后,执行参数类型、数量均相同的成员方法。方法重载在Java的API类库中得到大量的使用。,42,4.2.6 方法重载,【例4-4】关于成员方法重载的例子 /DemoOverload.java class Demo2 int a,b; int method() /成员方法一 return a+b; int method(int c) /成员方法二 return a+b+c; int method(int c,int d) /成员方法三 return a+b+c+d; Demo2(int a,int b) /构造方法 this.a = a; this.b = b; ,43,4.2.6 方法重载,【例4-4】关于成员方法重载的例子 public class DemoOverload public static void main(String args) Demo2 aDemo2 = new Demo2(1,2); /实例化 int a = aDemo2.method(); /调用成员方法一 System.out.println(a); int b = aDemo2.method(4); /调用成员方法二 System.out.println(b); int c = aDemo2.method(4,5);/调用成员方法三 System.out.println(c); 上面程序的运行结果为:,44,4.2.6 方法重载,【例4-5】构造方法也可以重载,/ ConstructionOverload.java class Demo int a,b,c;/成员变量 public Demo() /构造方法1 public Demo(int a) /构造方法2 this.a = a; public Demo(int a,int b) /构造方法3 this.a = a; this.b = b; public Demo(int a,int b,int c) /构造方法4 this.a = a; this.b = b; this.c = c; ,45,4.2.6 方法重载,public class ConstructionOverload public static void main(String args) /应用第一种构造方法 Demo aDemo = new Demo(); System.out.println(“方法一成员变量a:“+aDemo.a); System.out.println(“方法一成员变量b:“+aDemo.b); System.out.println(“方法一成员变量c:“+aDemo.c); /应用第二种构造方法 Demo bDemo = new Demo(1); System.out.println(“方法二成员变量a:“+bDemo.a); System.out.println(“方法二成员变量b:“+bDemo.b); System.out.println(“方法二成员变量c:“+bDemo.c); ,46,4.2.6 方法重载,从上面的程序中可以看到构造方法的重载。在该程序中,方法Demo()被定义了四次,每次参数不同。第一个构造方法,没有参数,也没有方法体,它和系统的缺省构造方法是一致的。缺省的构造方法确保每个Java类都至少有一个构造方法。如果程序中给出了带参数的构造方法,而没有给出缺省构造方法,这时调用缺省构造方法将导致错误。 在调用构造方法时,由于使用的是同一方法名,因此根据构造方法的参数就能找到需要运行的哪个方法。,47,第4章 面向对象程序设计基础,4.1 面向对象的基本概念 4.2 类的定义 4.3 类和对象的使用 4.4 包package 4.5 成员变量及方法的访问权限 4.6 final、this及其它,48,4.3 类和对象的使用,4.3.1实例变量和类变量 4.3.2 实例方法和类方法,49,4.3.1实例变量和类变量,在生成每个类的实例对象时,Java运行时系统为每个对象的实例变量分配一块内存,然后可以通过该对象来访问这些实例的变量。不同对象的实例变量是不同的。而对于类变量来说,在生成类的第一个实例对象时,Java运行时系统对这个对象的每个类变量分配一块内存,以后再生成该类的实例对象时,这些实例对象将共享同一个类变量,每个实例对象对类变量的改变都会直接影响到其他实例对象。 类变量可以通过类名直接访问,也可以通过实例对象来访问,两种方法的结果是相同的。,50,4.3.2 实例方法和类方法,【例4-6】下面是关于实例变量的例子 /instVar.java class koA int a; public void display() System.out.print(“ a=“+a); public class instVar public static void main(String args) koA a1=new koA(); a1.a=10; /a1是一个实例对象 koA a2=new koA(); a2.a=20; / a2是另一个实例对象 a1.display(); a2.display(); 运行结果为 a=10 a=20,51,4.3.2 实例方法和类方法,【例4-7】 下面是类变量的例子 / classVar.java class koB static int a; public void display() System.out.print(“ a=“+a); public class classVar public static void main(String args) koB a1=new koB(); a1.a=10; /a1是一个实例对象 koB a2=new koB(); a2.a=20; /a2是另一个实例对象 koB.a=50; /类方法直接访问类变量 a1.display(); a2.display(); 运行结果为: a=50 a=50,52,4.3.2 实例方法和类方法,实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,但类方法不能访问实例变量。实例方法必须由实例对象来调用,而类方法除了可由实例对象调用外,还可以由类名直接调用。另外,在类方法中不能使用this或super。 关于类方法的使用,有如下一些限制: (1) 在类方法中不能引用对象变量。 (2) 在类方法中不能使用super、this关键字。 (3) 类方法不能调用类中的对象方法。 如果违反这些限制,你的程序就会导致编译错误。 与类方法相比,实例方法几乎没有什么限制: (1) 实例方法可以引用对象变量(这是显然的),也可以引用类变量。 (2) 实例方法中可以使用super、this关键字。 (3) 实例方法中可以调用类方法。,53,4.3.2 实例方法和类方法,【例4-8】下面是类方法使用的例子 / classMethodTest.java class member static int classVar; int instanceVar,i; static void setClassVar(int i) classVar=i; this.i=i;/可以吗? / instanceVar=i; /在类方法中不能引用实例成员。 setInstanceVar(i);/可以吗? static int getClassVar( ) return classVar; void setInstanceVar(int i ) classVar=i; instanceVar=i; int getInstanceVar() return instanceVar;/return getClassVar( );可以吗? ,54,4.3.2 实例方法和类方法,public class classMethodTest public static void main(String args) member m1=new member( ); member m2=new member( ); m1.setClassVar(1);/改成member. setClassVar(1) m2.setClassVar(2); System.out.println(“m1.classVar=“+m1.getClassVar( )+ “m2.classVar=“+m2.getClassVar( ); m1.setInstanceVar(11);/改成member. setInstanceVar(11)怎么样? m2.setInstanceVar(22); System.out.println(“m1.InstanceVar=“+m1.getInstanceVar( )+ “ m2.InstanceVar=“+m2.getInstanceVar( ); 运行结果为: m1.classVar=2 m2.classVar=2 /为什么? m1.InstanccVar=11 m2.InstanceVar=22,55,第4章 面向对象程序设计基础,4.1 面向对象的基本概念 4.2 类的定义 4.3 类和对象的使用 4.4 包package 4.5 成员变量及方法的访问权限 4.6 final、this及其它,56,4.4 包package,4.4.1 package语句 4.4.2 import语句 4.4.3 编译和运行包,57,4.4 包package,由于Java编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问题,Java提供包来管理类名空间。包实际上提供了一种命名机制和可见性限制机制。 Java虚拟机(JVM)决定如何创建和存储包、子包以及相应的编译单元,并决定哪些顶层包名称在特定的编译中是可见的,以及决定哪些包是可访问的。包可以存储在在当地文件系统中、分布式文件系统当中,或者某种形式的数据库中。 Java系统必须支持至少一个无名包(也叫缺省包),一般为当前目录。在开发小的或者临时的应用程序或者刚刚开始开发时,用无名包是非常方便的。,58,4.4.1 package语句,package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为: package pkg1pkg2pkg3; Java编译器把包对应于文件系统的目录。例如:名为myPackage的包中,所有类文件都将存储在目录myPackage下。同时,package语句中,用“.”来指明目录的层次,例如: package java.awt.image; package sun.com.cn; package myPackage;,59,4.4.1 package语句,另外,包层次的根目录路径是由环境变量classpath来确定的。 Java的JDK提供的包(也叫基础类库)包括: Java.applet、java.awt、java.awt.datatransfer、java.awt.event、java.awt.image、java.beans、 java.io、java.lang、java.langreflect、 javamath、java.net、java.rmi、java.security、java.sql、java.util等。每个包中都包含了许多有用的类和接口。用户也可以定义自己的包来实现自己的应用程序。 Java的基础类库其实就是JDK安装目录下面jrelibrt.jar这个压缩文件。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。但是真正对于我们来说最核心的只有几个,例如java.lang.*; java.io.*; java.util.*; java.sql.*;等。,60,4.4.2 import语句,为了能使用Java中已提供的类,我们需要用import语句来引入所需要的类。 其格式为 import package1.package2.(classname|*); import语句其中package1package2表明包的层次,与package语句相同,它对应于文件目录,classname则指明所要引入的类,如果要从一个包中引入多个类,则可以用星号(*)来代替。例如: import java.util.Date;/引入单个类 import java.util.*; /引入多个类 import javax.swing.event.*; import baozg.Test; /引入自己定义的类,61,4.4.2 import语句,注意: 1、java编译器为所有程序自动引入包java.lang,所以不用使用import,里面包括了最常用的一些类。具体哪些?自己可以到rt包里面看看。 2、在java程序中用到类的地方,可

    注意事项

    本文(第4面向对象技术基础.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开