chapter04类和对象.ppt
《chapter04类和对象.ppt》由会员分享,可在线阅读,更多相关《chapter04类和对象.ppt(71页珍藏版)》请在三一文库上搜索。
1、第4章 类和对象,本章知识点,利用数据抽象和数据隐藏技术创建类 创建和使用对象 对属性和方法进行访问 方法的重载 构造方法及其使用 this引用的用法 Java的垃圾收集机制 static方法和属性的使用 类的组合方法 包的创建和使用,4.1 面向对象程序设计的思想,4.1.1 面向对象编程思想 4.1.2 定义时钟类 4.1.3 类、属性、方法和构造方法,4.1.1 面向对象编程思想,面向对象编程技术 将数据及对数据的操作封装在一起而形成了类,类是描述相同类型的对象集合。 面向对象编程(object-oriented programming,OOP)就是定义这些类。 类是抽象的数据类型,用类
2、创建对象。 程序的执行,表现为一组对象之间的交互通信。对象之间通过公共接口进行通信,从而完成系统功能。对象的公共接口是该对象的应用程序编程接口,把对象的内部详细信息隐藏起来,使得对象变得抽象,将这种技术称为数据的抽象化。,4.1.2 定义时钟类,【例4-1】编写一个时钟类。 时钟类的设计,4.1.2 定义时钟类,时钟类:Timer.java。 测试类:TimerTest.java。TimerTest类包含main方法,在main方法中将创建Timer类的一个对象,并调用对象的方法。,4.1.2 定义时钟类,public class Timer extends Object private in
3、t hour; private int minute; private int second; public Timer() setTime( 0, 0, 0 ); public void setTime( int h, int m, int s ) hour = ( ( h = 0 ,秒,设置时间,构造方法,秒,属性,4.1.2 定义时钟类,public String toUniversalString() return hour + “:“ + minute + “:“ + second ; public String toStandardString() return ( (hour =
4、 12 | hour = 0) ? 12 : hour % 12 ) + “:“ + minute + “:“ +second+( hour 12 ? “ AM“ : “ PM“ ); ,以24时制格式显示时间,以12时制格式显示时间,public class TimerTest public static void main(String args) Timer timer; timer = new Timer(); timer.setTime(23, 55, 10); System.out.println(timer.toStandardString(); System.out.print
5、ln(timer.toUniversalString(); ,对象和引用,Timer timer; /引用变量 timer = new Timer(); /对象,timer,0X3000,通过引用变量timer对对象进行使用。,4.1.3 类、属性、方法和构造方法,1定义类的语法格式 类的修饰符 class 类名 extends 父类名 /类体 public class Timer extends object ,2属性 在类中声明一个属性的形式为: 属性修饰符 类型 属性名; 例: private int hour; private int minute; private int secon
6、d;,4.1.3 类、属性、方法和构造方法,类中数据成员的缺省值,注意:定义在类中的每一个数据成员都会有一个缺省值。,3. 方法(method) 方法一般是对类中的数据成员进行操作。 如果类中的数据成员是private型的,则往往定义public的方法来设置数据成员的值或读取数据成员的值(具体在4.6节中讲解)。,4.1.3 类、属性、方法和构造方法,4.1.3 类、属性、方法和构造方法,4. 构造方法(constructor) Timer类包含一个构造方法Timer()。 构造方法名与类名相同。 构造方法一般用于初始化类的对象。 程序创建Timer类的对象时,new运算符为该对象分配内存,并
7、调用构造方法来初始化该对象。 (具体在4.4节中讲解),4.4 初始化类的对象-构造方法,构造方法的作用 为类的新建对象分配内存空间 为对象进行初始化 说明 构造方法必须与类名相同。 构造方法没有返回值,但可以有参数,并且可以重载。 构造方法只能在创建对象时用new命令由系统调用。 如果一个类中未定义构造方法,则编译时系统会自动提供一个缺省的无参的构造构造方法,其方法体为空。 public 类名( ) ,【例4-4】构造方法的重载。,/5个重载的构造方法 public Timer() setTime( 0, 0, 0 ); public Timer( int h ) setTime( h, 0
8、, 0 ); public Timer( int h, int m ) setTime( h, m, 0 ); public Timer( int h, int m, int s ) setTime( h, m, s ); public Timer( Timer timer ) setTime( timer.hour, timer.minute, timer.second ); ,public class TimerTest3 public static void main( String args ) Timer t1 = new Timer(); / 00:00:00 Timer t2 =
9、 new Timer( 2 ); / 02:00:00 Timer t3 = new Timer( 21, 34 ); / 21:34:00 Timer t4 = new Timer( 12, 25, 42 ); / 12:25:42 Timer t5 = new Timer( t4 ); / 12:25:42 ,4.6 使用set和get方法,如果类中声明了private成员变量,则该类的使用者只能通过该类的方法来操作它们。 在类中,通常会定义私有成员变量的set和get方法以便该类的用户对其进行存取。 存:设置private成员变量的取值setXxxx(xxx) 取:读取private成员
10、变量的取值xxx getXxxx(),【例4-6】 set和get方法的使用。,public class Timer2 private int hour, minute, second; public void setHour( int hour ) /setHour方法 this.hour = ( ( hour = 0 ,【例4-6】 set和get方法的使用。,public class Timer2Test public static void main(String args) Timer2 time = new Timer2(); time.setHour(23); time.setM
11、inute(39); time.setSecond(20); System.out.println(time.getHour()+“:“+time.getMinute() +“:“ +time.getSecond(); ,4.10 包(package)的创建和访问,包:已被组织到某一目录下并被命名的一组类的集合。 包机制:提供类的多层类命名空间,对各种用途的类进行分门别类的使用和存放。,4.10.1 包的创建,每一个包中的文件在文件开头必须含有包的说明,格式为: package 包名; 例如:pakage chap4; package chap4.lesson1; 包 子包,【例4-9-1】包
12、的创建。,带有包定义的代码。,package chap4.lesson2; public class Course private String courseName; /课程名 public Course(String courseName) this.courseName = courseName; public String getCourseName() return courseName; public void setCourseName(String courseName) this.courseName = courseName; void show () System.out
13、.println(courseName); ,【例4-9-1】包的创建。,package chap4.lesson2; /与Course类所在包相同 public class CourseTest public static void main(String args) Course course = new Course(“java程序设计“); course.show(); ,命令行方式下的编译和执行,带有包的类的编译: 需要将类文件按包所指定的路径进行存储。 编译命令: javac d 路径 java源文件 常用形式:javac d . java源文件 演示,查看class文件,命令行方
14、式下的编译和执行,当前目录 e:java_source,chap4,lesson2,Course.class CourseTest.class,CourseTest.java Course.java,javac d . Course.java javac d . CourseTest.java,命令行方式下的编译和执行,带包定义的类的执行 需要在包的上级目录执行类的class文件 java chap4.lesson2.CourseTest,当前目录e:java_source,chap4,lesson2,Course.class CourseTest.class,CourseTest.java
15、Course.java,命令行方式下的编译和执行,CourseTest.java,设置环境变量classpath:指定寻找类字节码的路径包的上级文件夹。,当前目录,classpath=e:java_source;,设置classpath后,在任意路径都可以执行包下面的类。,4.10.2 包的使用,同一个包中的类互相引用时不需要写出包名。 引用其他包中的类的方法 方式一:包名.类名 例如:chap4.lesson2.Course 缺点:书写类时比较麻烦,总要写出包名。 方式二:用import语句导入 例:import chap4.lesson2.Course; import javax.swin
16、g.JOptionPane; import java.util.*; “*”表示导入整个包下的所有类 注意:导入包导入子包,【例4-9-2】包的使用。,不同包下加包前缀,package chap4.lesson3; /与Course类所在包不同 public class CourseTest public static void main(String args) Course course = new chap4.lesson2.Course(“java程序设计“); course.show(); ,【例4-9-2】包的创建及使用。,不同包下导入,package chap4.lesson3;
17、 import chap4.lesson2.*; public class CourseTest public static void main(String args) Course course = new Course(“java程序设计“); course.show(); ,4.2 类的作用域,定义类的作用域的修饰符(modifier) public(公共作用域):一个具有公共作用域的类在封装它的包外面是可见的。 package(包作用域, 缺省值):一个具有包作用域的类只是在封装它的包中是可见的。,4.2 类的作用域,public class C1 ,package sub1; cl
18、ass C21 ,package sub2.sub3; class C3 ,package sub1; public class C22 ,类的使用: C1 sub1.C21 sub1.C22 sub2.sub3.C3,4.2 类的作用域,public class C1 ,package sub1; class C21 ,package sub2.sub3; class C3 ,package sub1; public class C22 ,package命令指定类存储的位置 类的修饰符指定类被使用的范围,公共作用域,包作用域,4.3 成员访问控制,成员访问控制:用来控制类中成员的访问范围。,
19、声明类的公有成员,可以在类外被使用,声明保护成员,可以在同一包中或子类(同包/不同包)中使用,声明包作用域成员,该成员只能在同一包中被使用,声明私有成员,该成员只能在自身类中访问,大,小,类中定义的成员可以在自身类中各方法中使用,相当于存在于类中的“全局变量”,【例4-2】成员访问控制举例1。,public class Timer extends Object private int hour; / 0 - 23 private int minute; / 0 - 59 private int second; / 0 - 59 public Timer() public void setTim
20、e( int h, int m, int s ) public String toUniversalString() public String toStandardString() ,public class TimerTest2 public static void main( String args) Timer time = new Timer(); time.hour = 7; /error time.minute = 15; /error time.second = 30; /error ,private成员不能在定义自身的类外使用,【例4-3】成员访问控制举例2。,public
21、class AccessModifier private int a; int b; protected double c; public char d; ,class AccessModifierTest public static void main( String args) accessModifier obj = new AccessModifier(); obj.a=1; obj.b = 2; obj.c = 1.5; obj.d=#; ,设两个类在同一个包中(包未命名)。,创建类的对象,private属性的使用,default成员的使用,protected成员的使用,public
22、成员的使用,public void setA(int a1) a=a1;,obj.setA(1);,4.5 this,this:被调用的方法/属性的当前对象的引用。 说明:this引用仅能出现在类中的方法中。 this的使用 通过this引用成员变量(属性) 通过this引用方法,【例4-5】通过this引用成员变量。,class SimpleTime private int hour, minute, second; public SimpleTime( int hour, int minute, int second ) void show() System.out.print(hour+
23、“:“+minute+“:“+second); ,public class SimpleTimeTest public static void main(String args) SimpleTime time = new SimpleTime(12, 30, 19); time.show(); ,当类的成员变量与方法中的局部变量同名时,成员变量使用this引用。,this.hour = hour; this.minute = minute; this.second = second;,4.9 类的组合(Composition),类的组合:指类之间的一种”has a”的关系,即一个类中的成员是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chapter04 对象
链接地址:https://www.31doc.com/p-3478788.html