收藏 分销(赏)

第四章 类与对象.ppt

上传人:pc****0 文档编号:13360295 上传时间:2026-03-07 格式:PPT 页数:64 大小:307.50KB 下载积分:10 金币
下载 相关 举报
第四章 类与对象.ppt_第1页
第1页 / 共64页
第四章 类与对象.ppt_第2页
第2页 / 共64页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java面向对象,程 序 设 计,第四章 类与对象,类,对象,参数传值,对象组合,static,关键字,this,关键字,包与,import,语句,jar,文件,难点,参数传值与对象组合,包和,import,语句,主要内容,4.1,编程语言的几个发展阶段,客观事物,(,问题域,),计算机,(,硬件,),语言的鸿沟,自然语言,面向对象的语言,非,OO,的高级语言,汇编语言,机器语言,4.1.1,面向机器的语言,机器语言,汇编语言,机器语言,机器语言是计算机能够理解并直接执行的惟一语言。,整个语言只包含“,0”,和“,1”,两种符号。,机器语言编写的程序,无论是它的指令、数据还是其存储地址,都是由二进制的“,0”,和“,1”,组成的。,汇编语言,用一些易于理解和记忆的符号来代替二进制指令,这便是汇编语言,汇编语言是一种与具体机器有关的语言,也是一种面向机器的语言,称符号化的机器语言。,4.1.2,面向过程的语言,C,语言,Fortran,语言,Pascal,语言,4.2.3,面向对象的语言,封装性,类的抽象,继承性,子类可以继承父类的属性和功能,多态性,同一操作的多个不同状态,类和对象的关系,抽象,实例化,对象:刘丽,静态特征:刘丽,女,讲师,890.00,动态特征:授课,评职称,调工资,数据值,执行的,操作,方法名,数据结构,类:教师,属性:姓名,性别,职称,工资,服务:授课,评职称,调工资,4.2,类,类是组成,Java,程序的基本要素,类封装了一类对象的状态和方法,类是用来定义对象的模板,类的实现,类的实现包括:类声明和类体。,格式,class,类名,类体,class,是关键字,类的声明部分,类体,4.2.1,类声明,class People,class,植物,习惯:,英文类名第一个字母大写,类名的定义应做到见名知意,4.2.2,类体,类体由两部分构成,变量的声明(类的属性),方法的定义(类的功能),例,class,梯形,float,上底,下底,高,面积,;,/,变量声明,梯形,(float,x,float,y,float,h),/,方法定义,上底,=x;,下底,=y;,高,=h;,void,修改高,(float height),/,方法定义,高,=height;,4.2.3,成员变量和局部变量,成员变量,类体中声明的变量,局部变量,方法中定义的变量,1.,变量的类型,成员变量,和,局部变量,的类型可以是,Java,中的,任意类型,例:,class People,int,boy;,float a;,void f(),boolean,cool;,workman,zhangboy,;,class Student,double x;,2.,变量的有效范围,成员变量在整个类内都有效,局部变量只在声明它的方法内有效,方法参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。,例,:,class Sun,int,distance;,int,find(),int,a=12;,distance=a;,return distance;,void g(),int,y;,y=a;,例(,P57,),public class A,void f(),int,m=10,sum=0;,if(m,9),int,z=10;,z=2*,m+z,;,for(int,i=0;i,m;i,+),sum=,sum+i,;,m=sum;,z=,i+sum,;,4.2.3,成员变量和局部变量,类体中,变量声明部分所声明的变量被称作类的成员变量。在方法体中声明的变量和方法的参数被称作局部变量。,1变量的类型:,成员变量和局部变量的类型可以是,Java,中的任何一种数据类型,包括基本类型:整型、浮点型、字符型;引用类型:数组、对象和接口(对象和接口见后续内容)。,2变量的有效范围:,3实例变量与类变量:,在声明成员变量时,用关键字,static,给予修饰的称作类变量,否则称作实例变量(类变量也称为,static,变量,静态变量)。,4成员变量的隐藏:,如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。,5,编程风格,(1)一行只声明一个变量。,(2)变量的名字符合标识符规定。,(3)变量名字见名知意,避免容易混淆的变量名字。,4.2.4,方法,方法的定义包括两部分:方法声明和方法体。一般格式为:,方法声明部分,方法体的内容,1,方法声明,方法声明包括方法名和方法的返回类型,如:,float area(),注:,方法的返回类型,、,方法的参数、方法的名字,2,方法体,方法声明之后的一对大括号“”,“”以及之间的内容称作方法的方法体。方法体的内容包括局部变量的声明和,Java,语句。,4.2.5,方法重载,方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。,4.2.6,构造方法,构造方法是一种特殊方法,,它的名字必须与它所在的类的名字完全相同,而且没有类型,构造方法也可以重载。,4.2.7,类方法和实例方法,方法声明时,方法类型前面不加关键字,static,修饰的是实例方法、加,static,修饰的是类方法(静态方法)。,4.2.8 几,个值得注意的问题,1,对成员变量的操作只能放在方法中,方法可以对成员变量和该方法体中声明的局部变量进行操作。,2,需要注意的是:实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作。,3,一个类中的方法可以互相调用,实例方法可以调用该类中的其它方法;类中的类方法只能调用该类的类方法,不能调用实例方法。,4.3,对象,4.3.1,创建对象,1,对象的声明,People,zhangPing,;,2.为声明的对象分配内存,zhangPing,=new People();,例4-1,例4-2,3对象的内存模型,(1),声明对象时的内存模型,(2),对象分配内存后的内存模型,4,创建多个不同的对象,4.3.2,使用对象,1通过使用运算符“.”对象操作自己的变量(对象的属性),2使用运算符“.”,对象调用类中的方法(对象的功能),例4-3,4.3.3,对象的引用和实体,当用类创建一个对象时,类中的成员变量在分配内存空间,这些内存空间,称作,该对象的实体或对象的变量,而对象中存放着引用。,一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。,4.4,参数传值,4.4.1,基本数据类型参数的传值,对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,。,例4-4,4.4.2,引用类型参数的传值,当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。,例4-5,4.4.3,可变参数,可变参数是指在声明方法时不给出参数列表中从某项直至最后一项参数的名字和个数,但这些参数的类型必须相同。可变参数使用“”表示若干个参数,这些参数的类型必须相同,最后一个参数必须是参数列表中的最后一个参数。,例如:,public void,f(int,.x),例4-6,4.4.4,有理数的类封装,面向对象编程核心思想之一就是将数据和对数据的操作封装在一起。,1Rational(,有理数)类,2,用,Rational,对象做运算,Rational.java,MainClass.java,4.5,对象的组合,一个类可以把对象作为自己的成员变量,如果用这样的类创建对象,那么该对象中就会有其它对象,也就是说该对象将其他对象作为自己的组成部分,或者说该对象是由几个对象组合而成。,例4-7,4.6,static,关键字,用,static,修饰的变量,类变量,没有用,static,修饰的变量,实例变量,方法声明中,用,static,修饰的方法,类方法,方法声明中不,用,static,修饰的方法,实例方法,4.6.1,实例变量和类变量的区别,如果类中有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。,例4-8,4.6.2,实例方法和类方法的区别,当用类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。,对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。,例4-9,4.7,this,关键字,this,是,Java,的一个关键字,表示某个对象。,this,可以出现在实例方法和构造方法中,但不可以出现在类方法中。,4.7.1,在构造方法中使用,this,this,关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。,例4-10,4.7.2,在实例方法中使用,this,当,this,关键字出现实例方法中时,代表正在调用该方法的当前对象。,当实例成员变量在实例方法中出现时,默认的格式是:,this.,成员变量。,当,static,成员变量在实例方法中出现时,默认的格式是:,类名.成员变量。,4.8,包,包是,Java,语言中有效地管理类的一个机制。,包名的目的是有效的区分名字相同的类。,4.8.1,包语句,通过关键字,package,声明包语句。,package,语句作为,Java,源文件的第一条语句,为该源文件中声明的类指定包名。,package,语句的一般格式为:,package,包名;,4.8.2,有包名的类的存储目录,程序如果使用了包语句,例如:,package,tom.jiafei,;,那么存储文件的目录结构中必须包含有如下的结构,tom,jiafei,如:,c:1000tomjiafei,并且要将源文件编译得到的类的字节码文件保存在目录,c:1000tomjiafei,中(源文件可以任意存放)。,4.8.3,运行有包名的主类,如果主类的包名是,tom.jiafei,,,那么主类的字节码一定存放在,tom,jiefei,目录中,运行时必须到,tom,jiefei,的上一层(即,tom,的父目录)目录中去运行主类。,假设,tom,jiefei,的上一层目录是1000,那么,必须如下格式来运行:,C:1000java,tom.jiafei,.,主类名,注:主类名是:“包名.主类名”,例4-11,4.9,import,语句,一个类可能需要另一个类声明的对象作为自己的成员或方法中的局部变量,如果这两个类在同一个包中,当然没有问题。,如果一个类想要使用的那个类和它不在一个包中,要使用,import,语句完成使命。,4.9.1,引入类库中的类,如果用户需要类库中的类就必须使用,import,语句,如:,import,java.until.Date,;,例4-12,4.9.2,引入自定义包中的类,用户程序可以使用,tom.jiafei,包,中的类,,即使用,非类库,中有包名的类,也要使用,import,语句,如:,import,tom.jiafei,.*;,例4-13,例4-14,4.9.3,使用无包名的类,如果一个类想使用无名包中的类,只要将这个无包名的类的字节码和当前类保存在同一目录中即可。,例4-15,4.9.4,避免类名混淆,1区分无包名和有包名的类,如果想同时使用,tom.jiafei,包中的,A,类和无名包中的,A,类,就不能省略包名,例如:,A a1=new A();,tom.jiafei.A,a2=new,tom.jiafei.A,();,2,区分有包名的类,如果一个源文件引入了两个包中同名的类,那么在使用该类时,不允许省略包名,比如:,tom.jiafei.A,bird=new,tom.jiafei.A,();,.A,goat=new,.A,();,4.10,访问权限,访问限制修饰符有,private,、,protected,和,public,,,都是,Java,的关键字,用来修饰成员变量或方法。,4.10.1,私有变量和私有方法,用关键字,private,修饰的成员变量和方法称为私有变量和私有方法。,对于私有成员变量或方法,只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法。,例4-16,例4-17,4.10.2,共有变量和共有方法,用,public,修饰的成员变量和方法被称为共有变量和共有方法,。,我们在任何一个类中用类,Tom,创建了一个对象后,该对象能访问自己的,public,变量和类中的,public,方法(也可以通过类名来操作成员变量、方法)。,4.10.3,友好变量和友好方法,当在另外一个类中用类,Tom,创建了一个对象后,如果这个类与,Tom,类在同一个包中,那么该对象能访问自己的友好变量和友好方法。,在任何一个与,Tom,同一包中的类中,也可以通过,Tom,类的类名访问,Tom,类的类友好成员变量和类友好方法。,4.10.4,受保护的成员变量和方法,用,protected,修饰的成员变量和方法被称为受保护的成员变量和受保护的方法。,4.10.5,public,类与友好类,类声明时,如果在关键字,class,前面加上,public,关键字,就称这样的类是一个,public,类。,可以在,任何另外一个类,中,使用,public,类创建对象。,如果一个类不加,public,修饰,这样的类被称作友好类。,在另外一个类中使用友好类创建对象时,要保证它们是在,同一包中,。,4.11,基本类型的类包装,Java,的基本数据类型包括:,byte、int、short、long、float、double、char,。,Java,提供了基本数据类型相关的类,实现了对基本数据类型的封装。,这些类分别是:,Byte、Integer、Short、Long、Float、Double,和,Character,类。这些类在,java.lang,包中。,4.11.1,Double,和,Float,类,Double,类和,Float,类实现了对,double,和,float,基本型数据的类包装。,Double,类的构造方法:,Double(double,num),Float,类的构造方法:,Float(float,num),Double,对象调用,doubleValue,(),方法,可以返回该对象含有的,double,型数据,。,Float,对象调用,floatValue,(),方法,可以返回该对象含有的,float,型数据,。,4.11.2,Byte、Short,、,Integer、Long,类,上述个类的构造方法分别,:,Byte(byte,num),Short(short,num),Integer(int,num),Long(long,num),Byte、Short、Integer,和,Long,对象分别调用,byteValue,()、,shortValue()、intValue,(),和,longValue,(),方法,返回该对象含有的,基本型数据,。,4.11.3,Character,类,Character,类实现了对,char,基本型数据的类包装。,Character,类的构造方法:,Character(char,c),Character,类中的一些常用类方法:,public static,boolean,isDigit(char,ch,),如果,ch,是数字字符方法返回,true,否则返回,false。,public static,boolean,isLetter(char,ch,),如果,ch,是字母方法返回,true,,否则返回,false。,public static,boolean,isLetterOrDigit(char,ch,),如果,ch,是数字字符或字母方法返回,true,,否则返回,false。,public static,boolean,isLowerCase(char,ch,),如果,ch,是小写字母方法返回,true,,否则返回,false。,public static,boolean,isUpperCase(char,ch,),如果,ch,是大写字母方法返回,true,,否则返回,false。,public static char,toLowerCase(char,ch,),返回,ch,的小写形式。,public static char,toUpperCase(char,ch,),返回,ch,的大写形式。,public static,boolean,isSpaceChar(char,ch,),如果,ch,是空格返回,true。,例4-18,4.11.4,自动装箱与拆箱,所谓自动装箱,就是允许把一个基本数据类型的值直接赋值给基本数据类型相对应的类的实例,例如:,Integer number=100;,自动拆箱,就是允许把基本数据类型相对应的类的实例直接赋值给相应的基本数据类型变量或把基本数据类型相对应的类的实例当作相应的基本数据类型来使用,例如:,number,是一个,Integer,对象,那么允许:,int,x=,number+number,;,例4-19,4.12,反编译和文档生成器,4.12.1,javap,反编译,JDK,提供的反编译器,javap.exe,可以将字节码反编译为源码,查看源码类中的,public,方法名字和,public,成员变量的名字,例如:,javap,java.util.Date,4.12.2,javadoc,制作文档,使用,JDK,提供的,javadoc.exe,可以制做源文件的,html,格式文档。,假设,D:test,有源文件,Example.java,,,用,javadoc,Example.java,生成,Example.java,的,html,格式文挡。,例4-20,4.13,jar,文件,我们可以使用,jar.exe,命令把一些类的字节码文件压缩成一个,jar,文件,然后将这个,jar,文件存放到,Java,运行环境的扩展中,即将该,jar,文件存放在,JDK,安装目录的,jre,libext,文件夹中。这样,,Java,应用程序就可以使用这个,jar,文件中的类来创建对象了。,(1)有包名的类:,TestOne,和,TestTwo,类的包名为,moon.star,首先编写一个清单文件:,hello.mf(Manifestfiles,),保存到,C:1000,目录中,Manifest-Version:1.0,Class:,moon.start.TestOne,moon.star.TestTwo,Created-By:1.6,jar,命令,C:1000jar,cfm,Jerry.jar,hello.mf,moonstar,TestOne.class,moonstar,TestTwo.class,(2),无包名的类:,TestOne,和,TestTwo,类没有包名,只需将,TestOne.java,和,TestTwo,保存到,C:1000,中、编译得到字节码文件,将(1)中清单文件中类的包名去掉后保存到,c:1000,中。,使用,jar,命令:,C:1000jar,cfm,Jerry.jar,hello.mf,TestOne.class,TestTwo.class,4.14,小结,1.,类是组成,Java,源文件的基本元素,一个源文件是有若干个类组成的。,2类体可以有两种重要的成员:成员变量和方法。,3成员变量分为实例变量和类变量。类变量被该类的所有对象共享;不同对象的实例变量互不相同。,4.除构造方法外,其它方法分为实例方法和类方法。类方法不仅可以由该类的对象调用,也可以用类名调用;而实例方法必须由对象来调用。,5实例方法即可以操作实例变量也可以操作类变量,当对象调用实例方法时,方法中的成员变量就是指分配给该对象的成员变量,其中的实例变量和其它对象的不相同,即占有不同的内存空间;而类变量和其它对象的相同,即占有相的内存空间。类方法只能操作类变量,当对象调用类方法时,方法中的成员变量一定都是类变量,也就是说该对象和所有的对象共享类变量。,6在编写,Java,源文件时,可以使用,import,语句引入有包名的类;也可以使用静态导入引入有包名类的类变量。,7对象访问自己的变量以及调用方法受访问权限的限制。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服