版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 对象和类内容安排n1、面向对象的基本概念n2、类与对象n3、成员变量的定义与使用n4、方法的定义和实现n5、方法的调用n6、构造方法n7、静态方法n8、main()方法和命令行参数1、面向对象的基本概念n什么是面向对象n什么是对象n对象是作为计算机模拟真是世界的一个抽象,一个对象就是一个物理实体或逻辑实体,它反映了系统为之保存信息和(或)与它交互的能力。 n 具体的例子:椅子、桌子、沙发。1.1 对象n对象的方法: 对对象的属性进行的修改,只能通过对象的操作来进行,这种操作就是方法。n 具体的例子:椅子、桌子、沙发在其中加入方法“卖出”,就可以改变其该对象的属性中的“所有者”。n优点:
2、 模块化、信息隐藏、可移植性、安全性1.2 类n什么是类具有共同属性、共同操作的对象的集合n例子:家具、椅子、桌子、沙发。n注意:类和对象的关系可以看成是数据类型和变量的关系n 类是一个静态的概念 对象是一个动态的概念,它具有生命力。1.3 消息n什么是消息请求对象执行某一操作或是回答某些信息的要求就是消息。n消息组成部分消息接收者(接收对象名)、接收对象应采用的方法以及方法所需要的参数。n例子:老师向同学布置作业的整个过程。1.4 面向对象的4个基本特征n抽象性抽象包括两个方面:过程抽象和数据抽象。n封装性数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。这样的好处?n继承性可以
3、从父类继承功能和属性,加以扩充和修改n多态性允许不同类的对象对同一消息作出响应。2、 类与对象n类是组成Java程序的基本要素java中有两种类: 一种是JDK中已设计好的类一种是程序员自己设计和编写的类。2.1 类的基本结构观察下面的例子public class HelloWorldApp public static void main( String args ) System.out.println(Hello World !); 类最基本的两个部分:类的声明、类体。2.2 类的声明一般的声明: 类修饰符 class 类名 extends 父类名 implements 接口名列表clas
4、s、extends和implements都是关键字。父类:被继承的类接口:一种高度抽象的特殊类修饰符:主要有:final、abstract、public2.3 创建类体类体该类所有的变量和该类所支持的方法。类体中有三个部分:成员变量、成员方法和构造方法。例子:Point类public class Point int x,y; public Point( ) x = 0; y = 0; public Point(int ix, int iy) x = ix; y = iy; void move(int ix, int iy) x += ix; y += iy; 2.4 对象的生命周期定义类时,仅
5、通知编译器需要准备多大的内存空间,却没为它分配内存空间。只有创建对象后,才会真正占用内存空间。对象的三个阶段:对象的创建,对象的使用,对象的清除。T = T1 + T2 +T32.5 对象的创建类名 对象名=new 构造方法名(参数列表);例子:Point pt=new Point(1,2);三个步骤:声明、实例化、初始化。 对象声明:类名 对象名 对象实例化:new 构造方法(参数列表) 对象初始化:pt = new Point(1,2)2.6 对象的使用n使用:即通过消息来调用成员方法,或者直接读取或修改成员变量。n对象变量的使用:对象名.成员变量名。例如:pt.x=6; pt.y=6n对
6、象方法的调用对象名.成员方法名(参数列表)n例如:pt.move(5,5)2.7 对象的释放和垃圾收集机制n内存泄露:C+ 与 java的不同n何为垃圾:对象不再被引用n垃圾收集机制:解决对象释放后的内存管理问题。n优点:极大地降低了程序员的负担,避免了内存泄露。3、成员变量的定义与使用成员变量的定义:变量修饰符 类型说明符 变量名例如:下面是一没有变量修饰符的变量public class Cuber double width,height; int number; 成员变量的类型:java中任何类型3.1 成员变量的定义常常定义类的时候用成员变量修饰符来规定变量的相关属性public cla
7、ss Cuber private double width,height; /定义两个私有的成员变量 public static int count; /定义一个公共的静态类变量 /定义一个公共的整型静态常量 public static final int COLORE=1; 3.2 成员变量的访问权限3种访问权限:私有(private)、保护(protected)和公共(public)。公共变量:它可以被任何类所访问。例如:公共变量使用实例public class DeclarePublic public int publicVar=10; /定义一个公共变量public class Oth
8、erClass void change()/创建一个对象 DeclarePublic ca=new DeclarePublic(); /通过对象名来访问它的公共变量,正确 ca.publicVar=20; 3.2 成员变量的访问权限私有变量:只允许在本类的内部访问例子:私有变量的使用实例解决方法:设计者会提供一些方法给外部调用,这些方法被称为访问接口。public class DeclarePrivate private int privateVar=10; /定义一个私有变量 void change() privateVar=20; /在本类中访问私有变量,合法 public class O
9、therClass void change() DeclarePrivate ca=new DeclarePrivate(); ca.privateVar=20;/企图访问私有变量,非法 3.2 成员变量的访问权限保护(Protected)变量:允许在本类的内部访问之外,还允许同一个包中其它类访问它,还允许它的子类通过继承的方式访问它。例子:保护变量的使用实例package onlyDemo;public class DeclareProtected protected int protectedVar=10; /定义一个保护变量 void change() protectedVar=20;
10、/合法 package onlyDemo;/它也在包onlyDemo中public class AccessProtected void change() DeclareProtected oa=new DeclareProtected(); tectedVar=20; /合法 import onlyDemo.DeclareProtected; /引入需要的包public class Derive extends DeclareProtected void change() /合法,改变的是Derive从DeclarProtected中所继承的protectedVar值 prote
11、ctedVar=30; 3.2 成员变量的访问权限缺省访问变量的例子:package onlyDemo; /本类定义在包中public class DeclareDefault int defaultVar=10; /定义一个缺省访问变量 void change() defaultVar=20; /合法 package onlyDemo; /它也在包onlyDemo中public class AccessDefault void change() DeclareDefault oa = new DeclareDefault(); oa.defaultVar=20; /合法 package on
12、lyDemo;public class Derive_2 extends DeclareDefault /定义一个子类 void change() /合法,改变的是Derive_2从DeclarDefault中所继承的defaultVar值 defaultVar=30; 3.3 实例成员变量和静态成员变量实例成员变量的例子:public class InstanceVar protected int instVar=0; /定义一个实例成员变量public class ShowInstVar public static void main(String args) InstanceVar on
13、e = new InstanceVar(); /创建对象one InstanceVar two = new InstanceVar(); /创建对象two /分别为这两个对象的成员变量赋值 one.instVar = 100; two.instVar = 200; /分别显示这两个对象的成员变量值 System.out.println(one.instVar=+one.instVar); System.out.println(two.instVar=+two.instVar); 3.3 实例成员变量和静态成员变量静态成员变量关键字: static使用示例:public class Static
14、Var protected static int stat=0; /定义静态成员变量 public static void main(String args) StaticVar.stat=100; /通过类名.变量名访问静态变量,无需创建对象 System.out.println(StaticVar.stat=+StaticVar.stat); StaticVar one = new StaticVar(); /创建对象one StaticVar two = new StaticVar(); /创建对象two /分别为这两个对象的静态成员变量赋值 one.stat = 200; two.st
15、at = 300; /分别显示这两个对象的静态成员变量值 System.out.println(one.stat=+one.stat); System.out.println(two.stat=+two.stat); /再通过类来显示静态变量的值 System.out.println(StaticVar.stat=+StaticVar.stat); 4、方法的定义和实现n方法实现类的行为,和C中的函数相似。n方法的声明方法修饰符 方法返回值类型 方法名 (形式参数表)n例子 public int max(int a, int b)4.2 创建方法体与return语句public class S
16、howMethod private int x=0; /下面这个方法有一个参数ix public void setX(int ix) int factor = 10; /定义局部变量factor; x = factor * ix; /使用参数ix给成员变量x赋值 /下面这个方法参数列表为空 public int getX() return x; /返回x的值给调用者 4.2 创建方法体与return语句return语句:return后面的表达式类型必须与返回类型相容。 public int method_1( ) return 1; /合法,1是整型数 public void method_4
17、() return ; /合法 4.3 局部变量与成员变量的区别n局部变量没有访问权限修饰符。n局部变量不能用static修饰。n局部变量不会自动赋初值,但成员变量会。n局部变量的作用域仅限于定义它的方法,成员变量则是整个类内部都可见。n局部变量的生存周期与方法的执行期相同。n局部变量可以和成员变量同名,且在使用时,局部变量具有更高的优先级。4.4 方法的访问权限5、方法的调用n方法调用的形式调用者和被调用方法在同一类中,则如下:this.方法名(实际参数列表)调用者位于被调用方法所在类的外部: 对象名.方法名(实际参数列表) 或者 类名.方法名(实际参数列表)n例子:方法调用public c
18、lass InvokeMethod public void showMsg() System.out.println(This is showMsg method); public void callOther() showMsg(); /调用类中的另外一个方法,这 里也可以写成this.showMsg() public static void main(String args) /创建对象 InvokeMethod ob = new InvokeMethod(); ob.callOther(); /调用callOther()方法 外部类调用方法示例public class InvokeOth
19、er public static void main(String args) InvokeMethod ob = new InvokeMethod();/创建对象 ob.callOther();/调用callOther()方法 5.2 方法调用的参数n形参与实参n匹配的两个条件1,个数相等2,类型相容n根据数据类型:基本类型复合类型n注意两者的不同之处!5.2 方法调用的参数基本类型作为参数 public void tryChange(int ix) ix = ix * 2; /企图改变参数的值 public void showDiffer() int ix = 10; System.out
20、.println(调用tryChange方法之前,ix= + ix); /测试是否能改变实参的值 tryChange(ix); System.out.println(调用tryChange方法之后,ix= + ix); 能写出一个交换两个值的方法吗?5.2 方法调用的参数复合类型作为参数如果实参是一个类的对象,那么在调用相应的方法时,系统会将该对象的地址值传递给形参。public class OnlyTest private int x = 0; /设置成员变量x的值 public void setX(int ix) x = ix; /获取成员变量x的值 public int getX() r
21、eturn x; public void tryChange(OnlyTest form) int t = form.getX(); /获取对象form的成员变量x的值 form.setX(t*2); /改变对象form的成员变量x的值 public void showDiffer() OnlyTest actual = new OnlyTest(); actual.setX(100); System.out.println(调用tryChange方法之前,x= + actual.getX() ); /测试是否能改变actual的成员变量值 tryChange(actual); System.
22、out.println(调用tryChange方法之后,x= + actual.getX() ); 对象传地址值而非引用public void swap(OnlyTest a, OnlyTest b) OnlyTest temp; temp = a; a = b; b = temp; /测试能否交换实参的值 public void showDiffer() OnlyTest ox = new OnlyTest(); /创建两个对象 OnlyTest oy = new OnlyTest(); ox.setX(100); oy.setX(200); System.out.println(调用swa
23、p()方法之前的值:); System.out.println(ox.x=+ox.getX()+,oy.x=+ oy.getX(); swap(ox,oy); /测试是否能交换ox和oy的值 System.out.println(调用swap()方法之后的值:); System.out.println(ox.x=+ox.getX() + , oy.x = + oy.getX();调用调用swap()时的传值过程时的传值过程执行执行swap()之后的情形之后的情形5.3 隐含参数thisthis作为一个隐含的参数传递给每一个实例方法,它其实是指向当前对象的一根指针,直观理解,它就是表示“本对象”
24、的意思。例子: public static void main(String args) OnlyTest oa = new OnlyTest(); OnlyTest ob = new OnlyTest(); oa.setX(100); /将成员变量x赋值为100 ob.setX(200); /将成员变量x赋值为200 System.out.println( oa的成员变量 x= + oa.getX() ); System.out.println( ob的成员变量 x= + ob.getX() );6、构造方法特殊性:对象中第一个被执行的方法一般形式:构造方法名(参数列表) this(参数列表
25、); |super(参数列表); 语句序列注意点:名字必须和类的名字完全相同。n除了访问权修饰符之外,不能有其它任何修饰符,也就不能有返回值。n构造方法不能用static和final来修饰。n构造方法不能由对象显式地调用。n用户定义的类可以可以拥有多个构造方法,但要求参数列表不同。n无参数的构造方法和带参数的构造方法。6.1 无参数构造方法的定义和使用 public class ConstructNoPara private int x = 0; /定义一个无参数的构造方法,它必须和类同名 public ConstructNoPara() System.out.println(这是无参数的构造
26、器); x = 100; /为成员变量赋值 /获取成员变量x的值 public int getX() return x; public static void main(String args) /隐式调用无参数的构造方法 ConstructNoPara oa = new ConstructNoPara(); System.out.println(x = + oa.getX() ); /输出成员变量x的值 对于初学者而言,容易犯在构造方法之前加上“void”。public class ConstructNoPara private int x = 0; /试图定义一个无参数的构造方法 publ
27、ic void ConstructNoPara() /这里加了一个void System.out.println(这是无参数的构造方法); x = 100; /为成员变量赋值 /获取成员变量x的值 public int getX() return x; public static void main(String args) ConstructNoPara oa = new ConstructNoPara(); System.out.println(x = + oa.getX() ); 6.2 带参数的构造方法的定义和使用当用new来创建对象时,需要提供类型相容的参数,否则编译器将报错。 pr
28、ivate int x = 0; /定义一个带参数的构造方法 public ConstructWithPara(int ix) System.out.println(这是带参数的构造方法); x = ix; /为成员变量赋值 /获取成员变量x的值 public int getX() return x; public static void main(String args) ConstructWithPara oa = new ConstructWithPara(100); System.out.println(x = + oa.getX() ); 强烈建议程序员在定义带参数的构造方法时,一定
29、要定义一个不带参数强烈建议程序员在定义带参数的构造方法时,一定要定义一个不带参数的构造方法,即便这个方法什么事情也不做。的构造方法,即便这个方法什么事情也不做。 private int x = 0; /定义一个带参数的构造方法 public ConstructWithPara(int ix) System.out.println(这是带参数的构造方法); x = ix; /为成员变量赋值 /定义一个不带参数的构造方法 public ConstructWithPara() public int getX() return x; public static void main(String arg
30、s) ConstructWithPara oa = new ConstructWithPara(100); System.out.println(x = + oa.getX() ); 6.3 this关键字和构造方法的调用this关键字还有一个作用,就是用来显式地调用构造方法。注意:1,用this调用构造方法时,该语句只能用在构造方法中。2,this语句必须是构造方法中的第一条语句。3,只是执行构造方法中的语句例子:public class ConstructWithPara private int x = 0; /定义一个带参数的构造方法 public ConstructWithPara(i
31、nt ix) System.out.println(这是带参数的构造方法); x = ix; /为成员变量赋值 /定义一个不带参数的构造方法 public ConstructWithPara() this(100); /调用带参数的构造方法为x赋值 System.out.println(这是无参数的构造方法); public int getX() return x; public static void main(String args) ConstructWithPara oa = new ConstructWithPara(); System.out.println(x = + oa.ge
32、tX() ); 7、静态方法n Static 修饰的方法。n 静态方法可以在类实例化之前就使用。n 无论该类有多少实例,都共用同一个方法。n 声明与定义:n 访问权限修饰符 static 返回值类型 方法名(参数列表)n 语句序列 n 7.2 静态方法和实例方法的区别两个方面的区别:调用静态方法可以无需创建对象。而实例方法则不同。静态方法在访问本类的成员时,只允许访问静态成员。例子:public class HasStaticMethod /定义一个静态方法 public static void callMe() System.out.println(This is a static method.); public class InvokeStaticMethod public static void main(String args) /不创建对象,直接调用静态方法 HasStaticMeth
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工会财务核算制度
- 老年骨质疏松患者的运动护理查房
- 空调房的皮肤补水技巧
- 家电旧换新进销存制度
- 慢性鼻窦炎的鼻腔盐水冲洗规范
- 2026汕尾市专职消防员招聘笔试题及答案
- 2026三明市辅警招聘考试题及答案
- 海底捞应聘面试题目及答案
- 2026二年级下《表内除法》知识点梳理
- 2026八年级道德与法治下册 人格尊严不受侵犯
- 移动校招ai面试题库及答案
- 高考英语必背688个高频词汇清单
- 《氢能安全》课件
- 文化和旅游部直属事业单位招聘考试真题2024
- 暖通基础知识培训
- 课题申报书:我国青少年阅读能力的时代内涵与培养路径研究
- 【MOOC】模拟电子技术基础-华中科技大学 中国大学慕课MOOC答案
- 《建筑工程施工许可管理办法》2021年9月28日修订
- 最高人民法院实施民法典继续有效适用的司法解释文件汇编(下)
- 2023年广西二造《建设工程计量与计价实务(安装)》高频核心题库300题(含解析)
- GB/T 36501-2018土壤制图1∶25 000 1∶50 000 1∶100 000中国土壤图用色和图例规范
评论
0/150
提交评论