Java程序设计教学做一体化教程_第4章_类与对象课件.ppt
2023/2/9第 1 页类与对象类与对象 Java程序设计教学做一体化教程程序设计教学做一体化教程 第第4章章2023/2/9第 2 页主要内容主要内容2023/2/9第 3 页 抽象 抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程。张三,李四-人类;人类-王五2023/2/9第 4 页抽象思想在软件设计的应用:问题领域问题领域各种各种类类程序程序对象对象对象对象对象对象对象对象2023/2/9第 5 页抽象思想在软件设计的应用:超市销售问题超市销售问题员工类员工类商品类商品类供货商供货商程序程序(运行)(运行)对象对象对象对象对象对象对象对象静态程序静态程序2023/2/9第 6 页类与对象类(类(class)是既包括数据又包括作用)是既包括数据又包括作用于数据的一组操作的封装体。于数据的一组操作的封装体。对象(对象(object)是类的实例)是类的实例(instance)。2023/2/9第 7 页类与对象2023/2/9第 8 页封装封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:2023/2/9第 9 页类实现了封装电视机类电视机类 音量音量100.00 亮度亮度57.00对象的属性.调节音量调节亮度对象提供的服务这就样实现了封这就样实现了封装装1、把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。2023/2/9第 10 页类实现了封装运动员类运动员类 血压血压110 心率心率60对象的属性:反映对象的状态。.跑睡眠对象的行为:可以改变对象状态(又称服务)这就样实现了封这就样实现了封装装2、信息隐蔽。即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。2023/2/9第 11 页类设计的两大要素:成员变量成员函数或者成员方法2023/2/9第 12 页电视机类电视机类 音量音量100.00 亮度亮度57.00调节音量调节亮度Class Televsion private float volume=100.00f;private float brightness=57.00f;public float adjustVolume().;public float adjustBright();2023/2/9第 13 页4.1数据和算法的封装数据和算法的封装 4.1.1核心知识核心知识 1类与数据和算法的封装类与数据和算法的封装 编编写写类类的的目目的的是是把把数数据据和和对对数数据据的的操操作作封封装装成成一一个个整整体体,可可以以使使程程序员不必知道数据操作的细节,就可以使用这些数据以及相关的操作。序员不必知道数据操作的细节,就可以使用这些数据以及相关的操作。2简单的简单的Circle类(类(Circle.java)面面向向对对象象的的一一个个重重要要思思想想就就是是将将某某些些数数据据以以及及针针对对这这些些数数据据上上的的操操作封装在一个类中,也就是说,类的主要构成是数据以及数据上的操作。作封装在一个类中,也就是说,类的主要构成是数据以及数据上的操作。3使用使用Circle类创建对象类创建对象 上述上述Circle类不是主类,因为类不是主类,因为Circle类没有类没有main方法。方法。Circle类好比类好比是生活中的一个电阻,如果没有电器设备使用它,电阻将无法体现其作是生活中的一个电阻,如果没有电器设备使用它,电阻将无法体现其作用。用。以下以下Java程序的程序的Application4_1类(主类)中用类(主类)中用Circle类创建了对象,类创建了对象,该对象可以完成计算圆面积的任务。该对象可以完成计算圆面积的任务。2023/2/9第 14 页 4.1.2 能力目标能力目标 编编写写简简单单的的封封装装矩矩形形相相关关数数据据和和算算法法的的Rectangle类类,并并在应用程序使用在应用程序使用Rectangle类创建对象来计算矩形的面积类创建对象来计算矩形的面积。2023/2/9第 15 页 4.1.3 任务驱动 用户从键盘输入矩形的宽和高,程序输出矩形的面积用户从键盘输入矩形的宽和高,程序输出矩形的面积。Rectangle.java Application4_2.java 代码。代码。程序运行效果如图程序运行效果如图4.14.1。2023/2/9第 16 页 任务小结任务小结 (1)类类的的目目的的是是创创建建具具有有属属性性(变变量量)和和行行为为(方方法法)的的对对象象。程程序序可可以以让让对对象象操操作作自自己己的的变变量量改改变变状状态态,而而且且可可以以让让对对象象调调用用方法体现其行为。方法体现其行为。(2)对象通过使用对象通过使用“.”运算符操作自己的变量和调用方法。运算符操作自己的变量和调用方法。对象操作自己的变量的格式为:对象操作自己的变量的格式为:对象对象.变量变量;例如:例如:rect.wdith=100;rect.height=90;调用方法的格式为:调用方法的格式为:对象对象.方法方法;例如:例如:puterArea();2023/2/9第 17 页4.2 4.2 类的结构类的结构 4.2.1 核心知识核心知识 _11类的定义类的定义使用关键字使用关键字class定义一个类,语法格式如下:定义一个类,语法格式如下:class 类名类名 /类声明 /类体开始 /类体内容 /类体结束2类体类体 类类体体的的内内容容由由如如下下所所述的两部分构成:述的两部分构成:变量的声明:变量的声明:用来存储用来存储数据(体现属性值)。数据(体现属性值)。方方法法的的定定义义:方方法法可可以以对对类类中中声声明明的的变变量量进进行行操操作作,即即给给出出算算法法(体现行为)。(体现行为)。class Rectangle double width;/矩形的宽(变量声明)double height;/矩形的高(变量声明 double computerArea()/计算面积(方法)double area=width*height;return area;double getPerimeter()/计算周边长(方法)double perimeter=2*height+2*width;return perimeter;2023/2/9第 18 页 4.2.1 核心知识核心知识 _23成员变量成员变量 类中声明变量部分所声明的变量被称为成员变量。类中声明变量部分所声明的变量被称为成员变量。成成员员变变量量的的类类型型可可以以是是Java中中的的任任何何一一种种数数据据类类型型,包包括括基基本类型和引用类型。本类型和引用类型。成成员员变变量量在在整整个个类类内内都都有有效效,其其有有效效性性与与声声明明它它的的先先后后位位置置无关。无关。如如果果在在声声明明成成员员变变量量时时没没有有指指定定其其初初始始值值,成成员员变变量量也也有有默默认值。整型,浮点型的默认值是认值。整型,浮点型的默认值是0,逻辑类型的默认值是,逻辑类型的默认值是false。2023/2/9第 19 页成员变量设计:确定变量的数据类型:运动员类的心率?int float;银行帐号的利率?int float;确定变量的访问存取类型:原则尽量用private,体现数据隐藏特性;变量名尽量体现实际意义,增强可读性。width,height等。Kuandu,gaodu或aa,bb等不建议2023/2/9第 20 页4局部变量局部变量 在方法的方法体中声在方法的方法体中声明的变量以及方法的参明的变量以及方法的参数称为局部变量。局部数称为局部变量。局部变量只在方法内有效,变量只在方法内有效,而且与其声明的位置有而且与其声明的位置有关。关。方法的参数在当前方法方法的参数在当前方法内有效,方法内的局部内有效,方法内的局部变量从声明它的位置之变量从声明它的位置之后开始有效。后开始有效。如果局部变量的声明是如果局部变量的声明是在一个复合语句中,那在一个复合语句中,那么该局部变量的有效范么该局部变量的有效范围是当前复合语句。围是当前复合语句。public class A int m=10,sum=0;/成员变量,在整个类中有效 void f()int z=10;/z是局部变量 z=2*m+z;for(int t=0;tm;t+)/t是局部变量 sum=sum+t;m=t;/非法,因为t已无效 void g(int n)/n是局部变量 sum=n+1;sum=z+10;/非法,因为z无效 2023/2/9第 21 页成员方法(成员函数)()public void setExchangeRate (double rate )exchangeRate=rate;StatementsModifierReturn TypeMethod NameParameter2023/2/9第 22 页 4.2.2 能力目标能力目标 能用所学的语法,定义简单的类。2023/2/9第 23 页 4.2.3 任务驱动 用用类类封封装装一一元元一一次次方方程程:ax+b=0的的有有关关数数据据和和求求根根的的算算法法,即类来描述一元一次方程即类来描述一元一次方程。将将下下列列Equation.java Application4_3.java中中的的【代代码码】替替换换为程序代码。为程序代码。程序运行效果如图程序运行效果如图4.24.2。2023/2/9第 24 页 任务任务 小结小结(1)类类名名的的首首字字母母使使用用大大写写字字母母。类类名名最最好好容容易易识识别别、见见名名知知意意。当当类类名名由几个由几个“单词单词”复合而成时,每个单词的首字母使用大写。复合而成时,每个单词的首字母使用大写。(2)变变量量或或方方法法的的名名字字除除了了符符合合标标识识符符规规定定外外,名名字字的的首首单单词词的的首首字字母母使使用用小小写写;如如果果变变量量或或方方法法的的名名字字由由多多个个单单词词组组成成,从从第第2个个单单词词开开始始的的其其它它单单词的首字母使用大写。词的首字母使用大写。(3)提倡一行只声明一个变量。提倡一行只声明一个变量。(4)需需要要强强调调的的是是类类体体的的内内容容由由两两部部分分构构成成:一一部部分分是是变变量量的的声声明明,另另一一部部分分是是方方法法的的定定义义。对对成成员员变变量量的的操操作作只只能能放放在在方方法法中中,方方法法使使用用各各种种语语句句对对成成员员变变量量和和方方法法体体中中声声明明的的局局部部变变量量进进行行操操作作,如如图图4.3所示。所示。2023/2/9第 25 页对象可以把类看作一个模板,按照类模板所定义的一个个具体的对象称作类的实例,或称作对象。苹果类苹果类2023/2/9第 26 页对象引用对象引用:对象引用:对象引用可以理解为对象引用可以理解为对象的名字对象的名字,指向具体指向具体对象。对象。例如:例如:Date deadline=new Date();deadline内存内存成员变量成员变量成员方法2023/2/9第 27 页创建对象使用下列语法可创建对象:类名 对象名=new 构造方法关键字 new 通常称为创建运算符,用于分配对象内存,并将该内存初始化为缺省值。一旦 new 完成分配和初始化内存,它就将调用构造方法来执行对象初始化。当创建一个类时,只是创当创建一个类时,只是创建了一种新的数据类型建了一种新的数据类型(模版)。对象是类的具(模版)。对象是类的具体存在实例体存在实例class Test public static void main(String args)Date f=new Date();创建对象创建对象2023/2/9第 28 页4.34.3构造方法与对象的创建 4.3.1 核心知识核心知识_1Circle类:类:class Circle double radius;Circle()radius=1;Circle(double r)radius=r;构造方法构造方法 (1)类类中中的的构构造造方方法法的的名名字字必必须须与与它它所所在在的的类类的的名名字字完完全全相相同同,而而且且没没有有返返回回值值.允允许许一一个个类类中中编编写写若若干干个个构构造造方方法法,但但必必须须保保证证他他们们的的参参数数不同。不同。(2)如如果果类类中中没没有有编编写写构构造造方方法法,系系统统会会默默认认该该类类只只有有一一个个构构造造方方法法,该该默默认认构构造造方方法法是是无无参参数数的的,且且方方法法体中没有语句。体中没有语句。(3)构构造造方方法法的的作作用用是是初初始始化化成成员员变量。变量。2023/2/9第 29 页 4.3.1 核心知识核心知识 _2 3创建对象创建对象 声声明明对对象象后后,对对象象的的内内存存中中存存放放的的是是null,表表明明这是一个空对象这是一个空对象,内存模型如图内存模型如图4.5所示。所示。Circle tomCat;Circle类:class Circle double radius;Circle()radius=1;Circle(double r)radius=r;使使用用new运运算算符符和和类类的的构构造造方方法法来来创创建建对对象象,即即为为对对象象分分配配变变量量(赋赋予予对对象象属属性性及及其其值值)。如如图图4.6所示所示.tomCat=new Circle();一一个个类类可可以以创创建建多多个个不不同同的的对对象象,这这些些对对象象将将被被分分配配不不同同的的变变量量,因因此此,改改变变其其中中一一个个对对象象的的变变量量不不会会影影响响其其它它对对象象的的变变量量。内内存存模模型如图型如图4.7所示。所示。Circle jerryMouse=new Circle(5.8);2023/2/9第 30 页 4.3.1 核心知识核心知识 _34使用对象使用对象 对象通过使用对象通过使用“.”运算符操作自己的变量和调用方法。运算符操作自己的变量和调用方法。对象操作自己的变量的格式为:对象操作自己的变量的格式为:对象对象.变量变量;调用方法的格式为:调用方法的格式为:对象对象.方法方法;2023/2/9第 31 页 4.3.2 能力目标能力目标 使用类创建对象,让对象改变自己的属性的值,让对象产生行为。2023/2/9第 32 页 4.3.3 任务驱动 定义一个名字Lade的类(抽象出梯形的数据和算法)。在主类中用Lade类创建两个对象,让这两个对象分别改变自己的变量,并分别输出各自的面积。将将下下列列 Lade.java Application4_4.java中中的的【代代码码】替替换换为为程序代码。程序代码。程序运行效果如图程序运行效果如图4.84.8。2023/2/9第 33 页 任务任务 小结小结(1)如果在声明成员变量时没有指定其初始值,成员变量也有默认值。整型,浮点型的默认值是0,逻辑类型的默认值是false。(2)局部变量没有默认值,在使用之前必须保证局部变量是有值的。(3)当对象调用方法时,方法中出现的成员变量就是分配给该对象的变量。2023/2/9第 34 页 4.3.4 实践环节 Application4_5.java2023/2/9第 35 页4.4 4.4 Java程序的结构 4.4.1 核心知识核心知识 一一个个Java应应用用程程序序(也也称称为为一一个个工工程程)是是由由若若干干个个类类所所构构成成,这些类可以在一个源文件中,也可以分布在若干个源文件中这些类可以在一个源文件中,也可以分布在若干个源文件中。2023/2/9第 36 页 4.4.2 能力目标能力目标 将应用程序涉及的Java源文件保存在相同的目录中,分别编译通过,得到Java应用程序所需要的字节码文件,运行主类。2023/2/9第 37 页 4.4.3 任务驱动 本任务中,一共有三个Java源文件,其中Application4_6.java是含有主类的Java源文件。HandleData.java ComputerData.java 程序运行效果如图程序运行效果如图4.104.10。2023/2/9第 38 页 任务任务 小结小结 当使用解释器运行一个Java应用程序时,Java虚拟机将Java应用程序需要的字节码文件加载到内存,然后再由Java的虚拟机解释执行,因此,可以事先单独编译一个Java应用程序所需要的其它源文件,并将得到的字节码文件和主类的字节码文件存放在同一目录中。如果应用程序的主类的源文件和其他的源文件在同一目录中,也可以只编译主类的源文件,Java系统会自动地先编译主类需要的其它源文件。2023/2/9第 39 页 4.4.4 实践环节 Application4_7.java2023/2/9第 40 页4.5 4.5 对象的引用和实体 4.5.1 核心知识核心知识 1 引用与实体引用与实体 类类是是体体现现封封装装的的一一种种数数据据类类型型,类类声声明明的的变变量量称称为为对对象象,对对象象中中负负责责存存放放引用,以确保可以操作分配给它的变量以及调用类中的方法。引用,以确保可以操作分配给它的变量以及调用类中的方法。2 具有相同引用的对象具有相同引用的对象 一一个个类类声声明明的的两两个个对对象象如如果果具具有有相相同同的的引引用用,二二者者就就具具有有完完全全相相同同的的变变量量(实体实体)。进行赋值操作进行赋值操作 p1=p2对于Point类创建的两个对象,p1和p2Point p1 =new Point(5,15);Point p2 =new Point(8,18);2023/2/9第 41 页 4.5.2 能力目标能力目标 掌握怎样将一个对象的引用传递给另一个同类型的对象。2023/2/9第 42 页 4.5.3 任务驱动将下列Application4_8.java中的【代码】替换为程序代码。程序运行效果如图程序运行效果如图4.12.4.12.2023/2/9第 43 页 任务任务 小结小结(1)在Java语言中,类有构造方法。(2)Java运行环境有“垃圾收集”机制,因此Java很少出现“内存泄露”,即由于程序忘记释放内存所导致的内存溢出。2023/2/9第 44 页4.6 4.6 对象的组合 4.6.1 核心知识核心知识 一个类的成员变量可以是某个类声明的变量,即可以是对象。一个类的成员变量可以是某个类声明的变量,即可以是对象。当当一一个个类类把把某某个个对对象象作作为为自自己己的的一一个个成成员员变变量量时时,如如果果用用这这样样的的类类创创建建对对象象,那那么么该该对对象象中中就就会会有有其其它它对对象象,也也就就是是说说该该类类的对象将其他对象作为自己的组成部分。的对象将其他对象作为自己的组成部分。当当A类类把把B类类的的对对象象作作为为自自己己的的成成员员时时,称称A类类的的对对象象组组合合了了B类的对象类的对象。2023/2/9第 45 页 4.6.2 能力目标能力目标 掌握在一个类中怎样包含其他对象。2023/2/9第 46 页 4.6.3 任务驱动圆锥含有一个底圆,即圆锥将一个圆作为其组成部分(圆锥组合了一个圆)。将下列将下列Application4_10.java中的中的【代码代码】替换为程序代码。替换为程序代码。Circle.java Circular.java 程序运行效果如图程序运行效果如图4.144.14。2023/2/9第 47 页 任务任务 小结小结执行【代码1】Circle circle=new Circle(10);后内存中对象的模型,图4.15。执行【代码2】Circular circular=new Circular(circle,20);后内存中对象的模型图4.16。2023/2/9第 48 页 4.6.4 实践环节 上上机机调调试试下下列列代代码码,注注意意MobileTelephong(手手机机)和和SIM卡卡的关系。的关系。SIM.java MobileTelephone.java Application4_11.java2023/2/9第 49 页4.7 4.7 实例成员与类成员实例成员与类成员(static)4.7.1 核心知识核心知识_11 实例变量和类变量的声明实例变量和类变量的声明 类的成员变量可细分为实例变量和类变量。类的成员变量可细分为实例变量和类变量。在在声声明明成成员员变变量量时时,用用关关键键字字static给给予予修修饰饰的的称称作作类类变变量量(类类变变量量也称为也称为static变量变量静态变量),否则称作实例变量。例如:静态变量),否则称作实例变量。例如:class Dog float x;/实例变量实例变量 static int y;/类变量类变量 2 不同对象的实例变量互不相同不同对象的实例变量互不相同 一一个个类类通通过过使使用用new运运算算符符可可以以创创建建多多个个不不同同的的对对象象,这这些些对对象象将将被被分配不同的实例成员变量。分配不同的实例成员变量。3 所有对象共享类变量所有对象共享类变量 如如果果类类中中有有类类变变量量,当当使使用用new运运算算符符创创建建多多个个不不同同的的对对象象时时,分分配配给给这这些些对对象象的的这这个个类类变变量量占占有有相相同同的的一一处处内内存存,改改变变其其中中一一个个对对象象的的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量.2023/2/9第 50 页 4.7.1 核心知识核心知识 _24 通过类名直接访问类变量通过类名直接访问类变量 类类变变量量是是与与类类相相关关联联的的变变量量,类类变变量量不不仅仅可可以以通通过过某某个个对对象象访访问问,也也可可以直接通过类名访问。以直接通过类名访问。5 通过对象访问实例变量通过对象访问实例变量 实实例例变变量量仅仅仅仅是是和和相相应应的的对对象象关关联联的的变变量量,实实例例变变量量可可以以通通过过对对象象访问访问,不能使用类名访问。不能使用类名访问。class Lader double 上底,高;/实例变量 static double 下底;/类变量 public class E public static void main(String args)Lader.下底=100;Lader laderOne=new Lader();Lader laderTwo=new Lader();2023/2/9第 51 页 4.7.2 能力目标能力目标 掌握static成员变量和实例变量的区别。2023/2/9第 52 页 4.7.3 任务驱动用程序模拟两个村庄:赵庄和李庄共用同一口井水.Application4_12.java 程序运行效果如图程序运行效果如图4.204.202023/2/9第 53 页 任务任务 小结小结(1)在声明在声明static变量时,变量时,static关键字需放在变量的类型的前面。关键字需放在变量的类型的前面。(2)类类中中的的方方法法也也可可分分为为实实例例方方法法和和类类方方法法。方方法法声声明明时时,方方法法类类型型前前面面不加关键字不加关键字static修饰的是实例方法、加修饰的是实例方法、加static关键字修饰的是类方法。关键字修饰的是类方法。(3)类类方方法法不不可可以以操操作作实实例例变变量量,实实例例方方法法中中不不仅仅可可以以操操作作实实例例变变量量,也也可可以操作类变量以操作类变量.(4)可可以以用用类类名名或或对对象象调调用用类类方方法法,但但是是,实实例例方方法法不不能能通通过过类类名名调调用用,只只能由对象来调用。能由对象来调用。2023/2/9第 54 页 4.7.4 实践环节 上机调试下列代码(注意上机调试下列代码(注意x,y,z没有被分配内存空间)。没有被分配内存空间)。Application4_13.java 2023/2/9第 55 页4.8 4.8 this关键字关键字 4.8.1 核心知识核心知识 this是是Java的的一一个个关关键键字字,表表示示某某个个对对象象。this可可以以出出现现在在实实例例方方法法和和构构造造方法中。方法中。1 实例方法或构造方法中的实例方法或构造方法中的this 实实例例方方法法只只能能通通过过对对象象来来调调用用,当当this关关键键字字出出现现实实例例方方法法中中时时,this就就代代表表正正在调用该实例方法的当前对象。在调用该实例方法的当前对象。通常情况下,可以省略实例成员变量名字前面的通常情况下,可以省略实例成员变量名字前面的“this.”。class Dog int leg;void setLeg(int m)this.leg=m;当用Dog创建名字分别是yellowDog和blackDog的两个对象后 执行yellowDog.setLeg(4);时,setLeg()方法中的this就是指对象yellowDog;而执行blackDog.setLeg(4);时,setLeg()方法中的this就是指对象blackDog。2 类方法中不可以出现类方法中不可以出现this this不不能能出出现现在在类类方方法法中中,这这是是因因为为,类类方方法法可可以以通通过过类类名名直直接接调调用用,这这时时,可能还没有任何对象诞生。可能还没有任何对象诞生。2023/2/9第 56 页4.8 4.8 this关键字关键字this的用法访问本类的成员变量和成员方法this.成员变量this.成员方法(参数列表)调用本类重载的构造方法this(参数列表)指代对象本身This注意:什么时候注意:什么时候this不能省略不能省略2023/2/9第 57 页 4.8.3 任务驱动编写一个Rect类,该类有名字是width和height的成员变量,要求分别提供更改width和height值的方法,并且方法的参数名字分别是width和height。class Rect int width,height;Rect(int w,int h)width=w;height=h;Rect()this(3,3);void setWidth(int w)width=w;/将参数的值赋值给成员变量将参数的值赋值给成员变量width void setHeight(int height)this.height=height;/将参数的值赋值给成员变量将参数的值赋值给成员变量height int getArea()return width*height;Rect change()this.width=this.width+1;return this;public class E public static void main(String args)Rect rect=new Rect();rect=rect.change();System.out.println(rect.getArea();2023/2/9第 58 页 4.8.4 实践环节 上机调试下列程序,并解释程序输出的结果为什么不是上机调试下列程序,并解释程序输出的结果为什么不是30。E.java2023/2/9第 59 页4.9 4.9 方法重载方法重载 4.9.1 核心知识核心知识 方方法法重重载载(Overload)是是指指一一个个类类中中可可以以有有多多个个方方法法具具有有相相同同的的名名字字,但这些方法的参数必须不同。两个方法的参数不同是指满足下列之一:但这些方法的参数必须不同。两个方法的参数不同是指满足下列之一:参数的个数不同。参数的个数不同。参数个数相同,但参数列表中对应的某个参数的类型不同。参数个数相同,但参数列表中对应的某个参数的类型不同。例如,下列例如,下列Computer类中的类中的jisuan方法就是被重载的方法。方法就是被重载的方法。class Computer float jisuan(int a,int b)return a+b;float jisuan(long a,int b)return a-b;double jisuan(double a,int b)return a*b;2023/2/9第 60 页 4.9.2 能力目标能力目标 在类中实施方法重载。并能明确地调用被重载的方法中的某个方法。2023/2/9第 61 页 4.9.3 任务驱动当让一个人去执行“计算面积”时,他可能问你计算什么图形的面积,之所以如此反问是因为“计算面积”这个方法是被重载了的方法。因此,可以向执行者提供“计算面积”方法的参数,以便执行者根据参数去确认调用重载的方法中的哪个方法。Circle.java Lade.java Student.java Application4_14.java程序运行效果如图程序运行效果如图4.224.22。2023/2/9第 62 页4.10 4.10 包语句包语句 4.10.1 核心知识核心知识1 package的语法的语法 package语语句句作作为为Java源源文文件件的的第第一一条条语语句句,指指明明该该源源文文件件定定义义的的类类所所在在的的包包,即即为为该该源源文文件件中中声声明明的的类类指指定定包包名名。package语语句句的的一一般般格格式式为:为:package 包名包名;包包名名的的目目的的是是有有效效的的区区分分名名字字相相同同的的类类,不不同同Java源源文文件件中中两两个个类类名字相同时,它们可以通过隶属不同的包来相互区分。名字相同时,它们可以通过隶属不同的包来相互区分。2 有包名的类的存储目录有包名的类的存储目录 如如果果一一个个类类有有包包名名,就就不不能能在在任任意意位位置置存存放放它它,否否则则虚虚拟拟机机将将无无法法加加载载这这样样的的类类。程程序序如如果果使使用用了了包包语语句句,例例如如:package tom.jiafei;那那么么存存储储文文件件的的目目录录结结构构中中必必须须包包含含有有如如下下的的结结构构 tomjiafei比比如如 c:1000tomjiafei。2023/2/9第 63 页 4.10.2 能力目标能力目标 掌握怎样存放、编译有包名的类,以及运行有包名的主类。2023/2/9第 64 页 4.10.3 任务驱动 编写Student类,该类的包名是tom.jiafei。主类UsePackage的包名也是tom.jiafei,在UserPackage类的main方法中用Student类创建一个对象。程序运行效果如图程序运行效果如图4.234.23。1 将Student.java保存到C:1000tomjiafei目录 2 将UsePackage.java存到C:1000tomjiafei目录 思考:如果上面两个类不在一个包思考:如果上面两个类不在一个包里怎么办?里怎么办?2023/2/9第 65 页4.11 4.11 import语句语句 4.11.1 核心知识核心知识1import语句的使命语句的使命 一一个个类类需需要要使使用用的的类类和和它它不不在在一一个个包包中中,这这时时需需要要import语语句句的的帮帮助才能完成任务。助才能完成任务。2import语句与包语句与包 Java运运行行环环境境提提供供的的类类库库是是按按着着包包名名分分门门别别类类的的,也也就就是是说说一一个个包包中中提提供供了了许许多多类类。可可以以使使用用import语语句句引引入入包包中中类类。在在一一个个Java源源程程序序中中可可以以有有多多个个import语语句句,它它们们必必须须写写在在package语语句句(假假如如有有package语句的话)和源文件中类的定义之间。语句的话)和源文件中类的定义之间。如如果果要要引引入入一一个个包包中中的的全全部部类类,则则可可以以用用通通配配符符号号星星号号(*)来来代代替替,如如:import java.util.*;表表示示引引入入java.util包包中中所所有有的的类类,而而import java.util.Date;只是引入只是引入java.util包中的包中的Date类。类。java.lang包包是是Java语语言言的的核核心心类类库库,它它包包含含了了运运行行Java程程序序必必不不可可少少的的系系统统类类,系系统统自自动动为为程程序序引引入入java.lang包包中中的的类类(比比如如System类类,Math类等类等),因此不需要再使用,因此不需要再使用import语句引入该包中的类。语句引入该包中的类。2023/2/9第 66 页 4.11.2 能力目标能力目标 掌握怎样使用类库中的类和导入其他包中的类2023/2/9第 67 页 4.11.3 任务驱动(1)导入类库中的类:将下列Application4_15.java中的【代码】替换为程序代码。程序运行效果如图程序运行效果如图4.244.24。2023/2/9第 68 页 (2 2)导入其他包中的类导入其他包中的类 编编译译下下列列Triangle类类(其其包包名名是是),并并将将编编译译后后得得到到的的Triangle.class复制到复制到c:1000sohucom目录中。目录中。Triangle.java 引引入入Triangle类类。将将下下列列Application4_16.java保保存存到到C:1000中,然后编译、运行中,然后编译、运行。2023/2/9第 69 页4.12 4.12 访问权限访问权限 4.12.1 核心知识核心知识_1 访访问问权权限限是是指指对对象象是是否否可可以以通通过过“.”运运算算符符操操作作自自己己的的变变量量或或通通过过“.”运运算算符符使用类中的方法。使用类中的方法。访访问问限限制制修修饰饰符符有有private(私私有有)、protected(保保护护)和和public(公公共共),都是都是Java的关键字,用来修饰成员变量或方法。的关键字,用来修饰成员变量或方法。访访问问限限制制修修饰饰符符按按访访问问权权限限从从高高到到低低的的排排列列顺顺序序是是public、protected、友友好好的、的、private。1private权限权限 用关键字用关键字private修饰的成员变量和方法称为私有变量和私有方法。如:修饰的成员变量和方法称为私有变量和私有方法。如:class Tom private float weight;private float f(float a,float b)return a+b;当当在在另另外外一一个个类类中中用用类类Tom创创建建了了一一个个对对象象后后,该该对对象象不不能能访访问问自自己己的的私私有有变变量量和和私有方法。如:私有方法。如:class Jerry void g()Tom cat=new Tom();cat.weight=23f;/非法非法 float sum=cat.f(3,4);/非法非法 2023/2/9第 70 页 4.12.1 核心知识核心知识 _22protected权限权限 用用protected修修饰饰的的成成员员变变量量和和方方法法被被称称为为受受保保护护的的成成员员变变量量和和受受保保护护的的方方法法。当当在在另另外外一一个个类类中中,比比如如在在Jerry类类中中,用用Tom类类创创建建了了一一个个对对象象后后,如如果果Jerry类类与与Tom类类在在同同一一个个包包中中,那那么么该该对对象象能能访访问问自自己的己的protected变量和变量和protected方法。方法。3public权限权限 用用public修饰的成员变量和方法被称为共有变量和共有方法。当在修饰的成员变量和方法被称为共有变量和共有方法。当在任何一个类中用类任何一个类中用类Tom 创建了一个对象后,该对象能访问自己的创建了一个对象后,该对象能访问自己的public变量和类中的变量和类中的public方法方法4友好权限(默认权限友好权限(默认权限或者包权限)或者包权限)不不用用private、public、protected修修饰饰符符