Java面向对象程序设计第4章-类与对象.ppt

上传人:小飞机 文档编号:5436259 上传时间:2023-07-06 格式:PPT 页数:63 大小:835.50KB
返回 下载 相关 举报
Java面向对象程序设计第4章-类与对象.ppt_第1页
第1页 / 共63页
Java面向对象程序设计第4章-类与对象.ppt_第2页
第2页 / 共63页
Java面向对象程序设计第4章-类与对象.ppt_第3页
第3页 / 共63页
Java面向对象程序设计第4章-类与对象.ppt_第4页
第4页 / 共63页
Java面向对象程序设计第4章-类与对象.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《Java面向对象程序设计第4章-类与对象.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序设计第4章-类与对象.ppt(63页珍藏版)》请在三一办公上搜索。

1、第4章 类与对象,主讲:赵建邦办公室:信息学院202,2,本章主要内容,类对象参数传值对象组合static关键字this关键字包import关键字类包装 jar文件,难点:参数传值,对象组合包和import语句,4.1 编程语言的发展,面向机器语言包括机器语言、汇编语言代码量庞大,对不同机器编写不同指令优点:可执行文件小,执行速度快面向过程语言按照流程化的思想来组织,不符合人的思维习惯,重用率低,维护困难,用函数调用实现代码重用,信息完全暴露,很难实现大型程序,3,4.1 编程语言的发展,面向对象语言按照类和对象的思想来组织:将数据以及数据的操作封装在一个单独的数据结构中抽象:强调实体本质、内

2、在的属性封装性:封装性是保证软件部件具有优良的模块性的基础,将说明与实现分开继承性:不同级别上促进了共享多态性:同一操作作用于不同的类的实例,将产生不同的执行结果,4,4.1 编程语言的发展,(作者)(图灵奖)1957 Fortran John Bacus 19971967 Simula D.J Dahl 2001 K.Nygaard 1968 Pascal Niklaus wirth 19841972 C Ken Thompson 1983 D.M Ritchie 19801995 C+Bjarne Stroustrup1971 Smalltalk Alan Kay 20031995 Jav

3、a James Gosling,5,4.2 类,“万物皆为对象”Alan Kay现实世界中的任一客观实体:有一个名字(ID)用来标识有一组属性来描述其特征有一组方法来实现其功能类是对具有相似属性对象的抽象类是实例化对象的模板对象是类的实例,6,4.2.1 类的声明,类的实现包括:类声明和类体类实现的格式:class 类名 类体的内容注意类名的命名约定:拉丁字母的首字母使用大写:Hello、Time复合词中的每个单词首字母大写:HelloWorld,7,和之间的内容称作类体,4.2.2 类体,类体包括两部分:变量的声明,用来刻画属性方法的定义,用来刻画功能,8,4.2.3 成员变量和局部变量,不

4、同变量的定义:成员变量:变量声明部分所声明的变量局部变量:方法体中声明的变量和方法 体的参数变量的类型:基本类型(整数、浮点、字符、逻辑)引用类型(数组、对象、接口),9,4.2.3 成员变量和局部变量,变量的有效范围成员变量在整个类内部有效,并且有效性与它在类体中书写的先后位置无关方法的参数在整个方法内部有效方法内的局部变量从声明它的位置之后开始有效,并且仅限于声明它的复合语句或者循环体例P57中,class A、class 梯形注意:for循环中变量的有效性与C语言不同,10,4.2.3 成员变量和局部变量,成员变量再细分:实例变量、类变量类变量:成员变量声明时,用static关键 字给予

5、修饰,也称静态变量,11,4.2.3 成员变量和局部变量,成员变量的隐藏如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。P58 class 三角形,12,4.2.4 方法,类似于类的实现结构,方法的实现也包括两部分:方法声明和方法体方法声明部分 方法体的内容方法起名习惯和类名不同,首个字母约定使用小写,13,4.2.4 方法,方法的声明格式:返回值类型 方法名(参数1,参数2,)当一个方法不需要返回值时,返回类型为void方法体,14,4.2.5 方法重载,一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同:参数的个数不同参数的类型不同

6、注意:方法的返回类型不参与比较:如果两个方法名字相同,即使类型 不同,也必须保证参数不同,15,4.2.6 构造方法,构造方法是一种特殊方法,名字必须与类名相同,没有返回值类型构造方法可以重载,16,4.2.7 类方法和实例方法,方法声明时,方法类型前面不加关键字static修饰的是实例方法、加static修饰的是类方法(静态方法),17,4.2.8 几个值得注意的问题,对成员变量的操作只能放在方法中,方法可以对成员变量和该方法体中声明的局部变量进行操作需要注意的是:实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作一个类中的方法可以互相调用,实例方法可以调用该类中的其它

7、方法;类中的类方法只能调用该类的类方法,不能调用实例方法 参照本节的例子理解以上内容,18,4.3 对象,类是创建对象的模板,对象是类创建的实例如何创建对象?创建对象分为声明对象和为对象分配内存两部分声明格式:“类名 对象名;”例如:People zhangPing;使用new关键字分配内存:zhangPing=new People();People zhangPing=new People();/实际包括了声明和分配内存两部分,19,4.3.1 创建对象,对象的内存模型声明后的对象变量是一个空对象,不能使用分配内存后,即使用new语句以后,对象的成员变量被分配内存空间,并对成员变量进行初始化

8、;并且,将返回一个引用给对象变量创建多个不同对象的时候,这些对象具有不同的引用和内存空间,20,4.3.2 使用对象,通过运算符“.”来实现对类中变量的访问和方法的调用体现封装类体内如何操作成员变量,在类体内是看不到的,类体外看到的只是方法的接口但是,方法所用到的局部变量,包括参数和方法体内的变量,在使用之前需要赋值例:4.3,21,4.3.3 对象的引用和实体,声明一个对象之后,在栈中为其分配引用;Java的对象在堆(heap)中分配内存,这些内存空间称为对象的实体通过引用,可以调用对象的属性和方法一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体没有实体的对象称作空对象,编

9、译器对空对象不作检查,但是它不能被使用,22,4.4 参数传值,Java中,方法的所有参数都是“传值”,即方法中参数变量的值是调用者指定值的一个拷贝 DataType a;/a已经被赋值 void function(DataType c)基本类型参数的传值引用类型参数的传值,23,4.4.1 基本类型参数的传值,原则:基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别 只要值在Main函数中没变,a的值不管怎么传都不回变,这是因为a是传值,而这个值是a的一个拷贝,a的值在传递后的改变只是改变了a的拷贝的内容,并没有改变真正的a的值,24,int a=3的拷贝!,返回,4.4.2

10、引用类型参数的传值,当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体例4.5,25,4.4.3 可变参数,在声明方法时不给出参数列表中某项直至最后一项参数的名字和个数,但这些参数的类型必须一致。使用“”表示若干个参数,它们的类型必须相同public void f(int x)public void f(double d,int x);用法类似于数组与for的新增功能,回忆章节3.7,26,4.4.4 有理数的类封装,面向对象的编程,核心思想之一是将数据和对数据的操作封装在一起,从而形成包装类,通过类创建具体的对象,对象调用方法,实现更简洁的计算效果本节对有理数(

11、Rational)进行封装,是面向对象程序设计的一个简单应用,27,4.5 对象的组合,一个类的成员变量可以是Java允许的任何数据类型,即一个类的成员变量可以是其它类的对象,甚至可以是该类的自身对象一个类的成员变量可以由若干个类组成,或者说该类的对象可以使若干对象的组合例 4.7,28,举例:对象的组合,29,4.6 static关键字,成员变量分为:类变量和实例变量用static修饰的变量为类变量不用static修饰的变量为实例变量方法分为:类方法和实例方法用static修饰的方法为类方法不用static修饰的方法为实例方法调用原则:实例方法可以调用所有方法类方法只能调用类方法,30,4.

12、6.1 实例变量和类变量,区别1:一个类可以创建多个不同的对象,每个对象的实例变量将被分配不同的内存空间;如果一个类中定义了类变量,那么,所有的类变量仅分配相同的类变量,一个对象改变了类变量,则彻底改变也就是说,对象共享类变量区别2:类变量在没有创建对象的情况下已经加载到内存,直到程序退出才释放所占用的内存类变量不仅可以通过对象访问,也可以通过类名访问,31,4.6.2 实例方法和类方法,区别1:对象创建后才分配实例方法入口对象创建前已经分配类方法入口区别2:所有对象都不存在时,实例方法的入口地址撤销程序退出时,类方法的入口地址才被取消static方法仅能调用其它的static方法、仅能访问s

13、tatic数据,不能以任何形式引用this、super,32,难点1:成员变量被隐藏,P58,对于类体中的方 法,如果局部变量名字 和成员变量名字相同,则成员变量被隐藏想仍然在这种情况下 使用成员变量,需要thisP58中的两个例子,以及习题4.8,33,难点2:成员变量初始化,声明类的成员变量 时可以同时赋予初值P62,class A,注意不 能用单独的赋值语句通过构造方法初始化生成对象时已完成构造方法可以重载通过其它方法初始化必须通过对象调用方法,34,难点3:参数传值,发生在main()方法或者其它方法调用有参数的方法的时候基本类型“传值”:方法中参数变量的值是调用者指定值的一个拷贝,方

14、法可以改变参数的值,但是不能改变使用的变量的值引用类型“传值”:传递的是变量中存放的“引用”P72-73,35,4.7 this关键字,this关键字在Java中表示某个对象this可以出现在实例方法和构造方法中,不能出现在类方法中:因为类方法被调用时允许对象没有被生成在构造方法中使用this:例4.10在实例方法中使用this,代表正在调用该方法的当前对象实例方法可以操作成员变量:实例成员变量默认格式:this.成员变量类成员变量默认格式:类名.成员变量通常情况下可以省略上面的“this.”和“类名.”,在省略的过程中需要注意:成员变量可能被隐藏,36,4.8 包,包的作用:解决命名冲突,有

15、效管理项目中的类和接口包语句:必须做为源文件中的第一句程序代码一个源文件最多只能有一条包语句如果在代码中没有书写package语句,则该类将被加入到默认包(无名包)中,默认包无法被其它的包引用,37,4.8.1 包语句,通过关键字package声明包语句package 包名;如果源文件中省略了包语句,源文件中所定义的类被默认为无名包的类包名可以是一个合法的标示符,也可以是由若干个标示符通过“.”拼接而来package sunrise;package;Java不允许使用java作为包名的第一部分,38,4.8.2 有包名的类的存储,原则上来讲,源文件可以存放在任何文件夹里有包名的字节码文件只能存

16、放在包名对应的文件夹里,否则无法运行package tom.jiafei;.class文件只能存放在“tomjiafei”目录下,39,4.8.2 有包名的类的编译与运行,1、将例4.11的两个文件保存在“tomjiafei”目录下,在当前目录编译,字节码文件自动生成在当前文件夹,40,4.8.2 有包名的类的编译与运行,2、在任意目录下编译源文件,然后将字节码文件拷贝入“tomjiafei”目录下,运行命令同上页相同,41,4.8.2 有包名的类的编译与运行,3、在任意目录下编译源文件,命令为:“javac d 包的父目录 源文件全路径”,42,4.8.3 规范自己的编程习惯,43,4.9

17、import语句,一个类可能需要另一个类声明的对象作为自己的成员或方法中的局部变量,如果这两个类在同一个包中,当然没有问题。如果一个类想要使用的那个类和它不在一个包中,要使用import语句完成使命。一个Java源文件可以有多个import语句,必须写在package语句和类的定义之间,44,4.9 import语句,引入自定义包中的类1、更新classpath,将包名所对应目录的父目录添加到classpath变量中2、“.;”表示可以加载应用程序当前目录中的无名包类,而且当前子目录下的子孙目录都可以作为包的名字来使用使用无包名的类想使用无包名的类,只要将这个无包名的类的字节码和当前类保存在同

18、一目录即可,45,4.9 import语句,避免类名混淆(解决方法:不要省略包名)区分无包名和有包名的类:假如一个源文件使用了无包名的A类和一个有包名的A类使用“import 包名.A;”:生成“A”的对象时,如果省略包名,”A a=new A();”则生成的a是A的对象使用“import 包名.*;”:生成“A”的对象时,如果省略包名,”A a=new A();”则生成的a是A的对象如果一个源文件引入两个包中同名的类,不允许省略包名:包1.A a1=new 包1.A();包2.A a2=new 包2.A();,46,4.10 访问权限,类创建的对象通过“.”访问变量、调用方法,但对象操作自己

19、的变量和使用类中的方法是有一定限制的。访问限制修饰符(关键字)有private、protected和public,47,4.10.1 私有变量和私有方法,用private修饰的成员变量和方法称为私有变量和私有方法只有在本类中创建该类的对象时,这个对象才能访问私有成员和私有方法例4.16良好的编程习惯:对于类中的所有变量,适当设计改变或者读取它们的方法,尽量不要在类外用“.变量”方式,48,4.10.2 共有变量和共有方法,用public修饰的成员变量和方法称为共有变量和共有方法类所创建的对象在其它类中均可以访问该对象的public变量和public方法对于public类变量和public类方法

20、,如果该类在其它类中创建了对象,也可以通过类名来访问这些类变量和类方法,49,4.10.3 友好变量和友好方法,不用任何访问限制修饰符的成员变量和方法,称为友好变量和友好方法当在其它类(例B)中创建了一个类(例A)的对象后,如果A和B在同一个包中,那么A的对象能访问自己的友好对象和友好方法,否则不能访问,50,4.10.4 受保护的成员变量和方法,用protected修饰的成员变量和方法称为受保护的成员变量和方法当在其它类(例B)中创建了一个类(例A)的对象后,如果A和B在同一个包中,那么A的对象能访问自己的友好对象和友好方法,否则不能访问以后会涉及“受保护”和“友好”之间的区别,51,4.1

21、0小结:访问权限,52,4.10.5 public类与友好类,在类声明时,用public修饰的类为public类,public类可以在任何一个其它的类中创建对象如果一个类不加public修饰,则称为友好类,使用友好类之前,必须保证它们在同一个包中不能用protected和private修饰类,53,浅谈main()方法,public static void main(String args)main()方法由JVM直接调用,所以用public所在的类不需要产生任何对象,所以用static不需要返回值,所以用void为什么main?-这是规定有一个String类型的参数,是字符串数组,该字符串的

22、名称“args”可以改变,但为了和Sun Java规范范例保持一致,不建议修改,作用是接受命令行的输入,用空格隔开Static代码块的内容会在main()之前调用,54,浅谈main()方法,55,4.11 基本类型的类包装,Double类和Float类构造方法:Double(double num);Float(float num);返回double和float基本类型数据:doubleValue()方法 floatValue()方法,56,4.11 基本类型的类包装,57,Byte、Short、Integer和Long类构造方法:Byte(byte num);Short(short num)

23、;Integer(int num);Long(long num);返回基本类型数据:byteValue()方法 shortValue()方法 intValue()方法 longValue()方法,4.11 基本类型的类包装,Character类Character类实现了对char基本类型的包装构造方法:Character(char c);返回基本数据的方法:charValue();其它方法:boolean isDigit(char ch):判断ch是否数字字符boolean isLetter(char ch):判断ch是否字母字符boolean isLetterOrDigit(char ch)

24、:判断ch是否数字或字母boolean isLowerCase(char ch):判断ch是否小写字母Boolean isUpperCase(char ch):判断ch是否大写字母Char toLowerCase(char ch):返回ch的小写形式Char toUpperCase(char ch):返回ch的大写形式Boolean isSpaceChar(char ch):判断ch是否空格字符,58,4.11 自动装箱与拆箱,基本类型与其对应的包装类的转换自动装箱:允许将一个基本类型的值直接赋值给类的实例Integer number=100;或int m=100;Integer number

25、=new Integer(m);自动拆箱:允许把基本数据对应的类实例当作基本数据类型来使用如果number是Integer对象,允许:int x=number;自动装箱与拆箱仅是形式上的方便;装箱必须保证类型一致,59,4.12 反编译和文档生成器,反编译 javap操作对象:字节码文件命令:javap options class,60,4.12 反编译和文档生成器,制作文档:javadoc操作对象:源文件命令:javadoc Example.java javadoc-d C:document Example.java/*被注释语句*/专为JavaDoc设计关键词列表:author 作者名 v

26、ersion 版本标识 parameter 参数及其意义 return 返回值 throws 异常类及抛出条件 see referencedeprecated 引起不推荐使用的警告 override 重写since 最早使用该方法/类/接口的JDK版本,61,4.13 jar文件,使用jar命令把一些类的字节码文件压缩成一个jar文件,将这个文件放入JDK安装目录下的jrelibext文件夹中,这样,Java应用程序就可以使用这个jar文件创建对象了,62,4.13.1 有包名的类,1、在包名对应的文件夹编写源文件2、编译源文件3、将字节码文件压缩成.jar文件编写清单文件.mf运行jar命令,生成jar文件将.jar放在JDK“jrelibext”目录中4、在任意地方新建源文件,可以使用import语句,添加字节码文件,63,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号