JAVA面向对象基础.ppt

上传人:本田雅阁 文档编号:3481928 上传时间:2019-09-01 格式:PPT 页数:68 大小:1.71MB
返回 下载 相关 举报
JAVA面向对象基础.ppt_第1页
第1页 / 共68页
JAVA面向对象基础.ppt_第2页
第2页 / 共68页
JAVA面向对象基础.ppt_第3页
第3页 / 共68页
JAVA面向对象基础.ppt_第4页
第4页 / 共68页
JAVA面向对象基础.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《JAVA面向对象基础.ppt》由会员分享,可在线阅读,更多相关《JAVA面向对象基础.ppt(68页珍藏版)》请在三一文库上搜索。

1、第三章 面向对象基础,目标: 介绍面向对象编程的基本思想,通过本课的学习,应该掌握如下知识: 1)理解什么是类、对象、构造方法, 2)对象在内存中的表现形式及如何使用对象等。 3)Java的垃圾回收机制及访问修饰符。,本章要点,类和对象的关系 面向对象的思想 子类实例化的过程 对象的创建 构造方法 变量的初始化顺序 对象创建的内存模型 垃圾回收机制 Java中的关键字 this关键字 static关键字,主要内容,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,类和对象的关系,面向对象的思想( Object Oriented Programming,简称OOP

2、) 面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式 面向对象更加强调运用人类在日常的思维逻辑中经常采用的思维方法与原则 面向对象的三个特征 封装 继承 多态,类和对象的关系,面向对象与面向过程,public class Icebox static void putThings(String things) System.out.println(“把冰箱门打开“); System.out.println(“把“+things+“放进来“); System.out.println(“把冰箱门关上“); ,void OpenIcebo

3、x() printf(“把冰箱门打开n“); void PutElephantI() printf(“把大象放冰箱n“); void CloseIcebox() printf(“把冰箱们关上n“); int main() OpenIcebox(); PutElephantIn(); CloseIcebox(); ,public class Mine public static void main(String args ) Icebox.putThings(“大象“); ,面向对象,面向过程,类和对象的关系,类的定义 把相似的对象划归成一个类。 在软件设计中,类,就是一个模板,它定义了通用于一

4、个特定种类的所有对象的属性(变量)和行为(方法)。,类和对象的关系,类的定义 ?西游记游戏软件中的游戏人物 孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星 唐 僧:唐僧没有武器,战斗力为零,耐力五颗星 猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星 沙 僧:沙僧的武器是月牙铲 ,战斗力三颗星,耐力四颗星,类和对象的关系,类的定义 修饰符一般为public,也可以没有修饰符。 注意类名的命名规范。类名一般大写 类的成员: 成员变量(属性) 成员函数(方法) 通过“.”调用属性和方法,访问权限控制符 class 类名 类的成员 ,类的完全声明形式 public abstract |

5、final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化; 方法声明及方法体; ,变量声明格式 public | protected | private static finaltransient volatile 变量数据类型 变量名1=变量初值, 变量名2=变量初值, ; 格式说明 public、protected、private 为访问控制符 static指明这是一个静态成员变量 final指明变量的值不能被修改 transient指明变量是临时状态 volatile指明变量是一个共享变量,类的方法声明格式: public|pro

6、tected|private staticfinalabstractnativesynchronized 返回类型 方法名(参数列表) throws exceptionList 方法体; ,格式说明 方法修饰 public、protected、private 为存取控制符 static指明方法是一个类方法 final指明方法是一个终结方法 abstract指明方法是一个抽象方法 native用来集成java代码和其它语言的代码 synchronized用来控制多个并发线程对共享数据的访问,方法调用 给对象发消息意味着调用对象的某个方法 从对象中取得信息 修改对象的状态或进行某种操作 进行计算及

7、取得结果等 调用格式 .(参数列表) 称点操作符“.”前面的为消息的接收者(receiver) 参数传递 值传递:参数类型为基本数据类型时 引用传递:参数类型为对象类型或数组时,访问修饰符,访问修饰符,访问修饰符可访问性,类和对象的关系,类的定义 Employee.java,class Employee String name; int age; double salary; public String showName() System.out.println(name); return name; public int showAge() System.out.println(age);

8、return age; public void updateName(String name2) name = name2; public void getSalary() System.out.println(“The salary of this month is 2000“); ,属性,方法,类和对象的关系,类的定义 练习 Person.java 定义一个Person类,Person类具有名字、年龄及性别等属性,并具有一个getInfo( )方法可以打印出Person类的属性, sayHello()方法和大家说“Hello everybody!”,类和对象的关系,类的定义 练习 Poin

9、t.java 定义一个点类Point,包含两个成员变量x、y分别表示x和y的坐标,一个movePoint(int dx,int dy)方法实现点的位置的移动。 public class Point int x,y; void movePoint(int dx,int dy) x=dx; y=dy; ,类和对象的关系,类的定义 练习 MyDate.java 定义一个点日期MyDate,包含三个成员变量year 、month、day分别表示年、月、日,以及每个属性对应的get和set方法(如,year有getYear( )方法用来获得日期的年份,还有setYear(int y)方法用来修改或设置日

10、期的年份),最后还有printDate()方法,调用该方法可以把日期按照“yyyy-mm-dd”的形式输出。,类和对象的关系,类和对象的关系 类(class) 是对某一类事物的描述 对象(object) 是实际存在的某类事物的个体, 也称为实例(instance) 类是创建对象的模板,对象是类的实例。,类和对象的关系,对象的创建 语法格式 示例 TestEmployee.java,类名 对象名 = new 构造函数,Employee zhang = new Employee( ),类和对象的关系,对象的创建 练习 TestPerson.java 在TestPerson类里写一个main方法,在

11、main( )方法中: 创建一个Person类的对象 这个对象的名字叫小沈阳,年龄28,性别男 在控制台中打印这个实例的信息 并调用这个对象的sayHello( )方法,向大家问好,类和对象的关系,对象的创建 练习 TestPoint.java 在TestPoint类里写一个main方法,在main( )方法中: 创建一个Point类的对象 这个点的坐标是(3,2) 将这个点移动到坐标为(5,6)的位置 并把移动后的点的坐标按“(x,y)”形式打印在控制台上,类和对象的关系,对象的创建 练习 TestDate.java 在TestDate类里写一个main方法,在main( )方法中: 创建一

12、个MyDate类的对象 通过setXXX方法将该日期对象的时间设置为“2013年10月8日” 在控制台上打印该对象的月份 把该日期对象按“2013-10-8”的格式输出,类和对象的关系,匿名对象 创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象 使用匿名对象的情况 如果对一个对象只需要进行一次方法调用,new Person().sayHello(),Person p1 = new Person(); p1.sayHello();,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,构造方法,

13、构造方法(构造函数/构造器,Constructor) 具有与类相同的名称 不含返回值类型 不能在方法中用return语句返回一个值 一般访问权限为public 在一个类中,具有上述特征的方法就是构造方法。 构造方法的作用 完成对象的创建,即完成对象的实例化 一般使用构造方法来完成对成员变量的初始化 示例 TestPerson.java,构造方法,默认的构造方法 在Java中,每个类都至少要有一个构造方法,如果程序员没有在类里定义构造方法,系统会自动为这个类产生一个默认的构造方法 一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法,class Employee public Emplo

14、yee( ) ,class Employee ,构造方法, 练习 下列关于类的定义的选项中,哪些可以通过new Thing()方法来创建该类的一个对象_? A. public class Thing B. public class Thing public Thing() C. public class Thing D. public class Thing public Thing(void) public Thing(String s) E. public class Thing public void Thing() public Thing(String s) ,答案:A、B,构造方法

15、, 练习 给定下列代码的执行结果是_? public class A void A() System.out.println(“Class A”); public static void main(String args) new A(); A. Class A B. 在第2行处抛出异常 C. 编译错误 D. 在第6行处抛出异常 E. 代码执行后没有输出,答案:E,构造方法,类和对象的关系 练习 XiyoujiRole.java 构造一个完整的西游记人物类,并定义一个构造方法,通过这个方法可以创建不同的西游记人物,并写一个main函数进行验证。 孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力

16、五颗星 唐 僧:唐僧没有武器,战斗力为零,耐力五颗星 猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星 沙 僧:沙僧的武器是月牙铲 ,战斗力三颗星,耐力四颗星,方法的重载,方法的重载(overload) 函数的重载就是在同一个类中允许同时存在一个以上同名的函数 方法重载的规则 函数名称相同 函数的参数必须不同 参数个数不同 或 参数类型不同 函数的返回值类型可以相同,也可以不同,方法的重载,方法的重载(overload),方法的重载, 练习 下列选项中,哪些可以与void setAge(int year,int month,int day)方法在同一个类中定义_? A. public vo

17、id setAge() B. void setAge(int age) C. void setAge(int y,int m,int d) D. int setAge(Date d) E. int setAge(int year,int month,int day) F. void setage(int year,int month,int dat),答案:ABDF,方法的重载, 练习 Person.java 在上一个Person类的基础上,完成以下功能: 声明一个有参的构造方法,使得通过调用该构造方法可以对Person类的三个成员变量进行初始化 再声明一个无参的构造方法,实现构造方法的重载,

18、方法的重载, 练习 MethodAdd.java 在类MethodAdd中,声明三个方法add,分别计算 两个整数的和 三个整数的和、两个双精度浮点数(double)数的和, 并在该类写一个主程序中调用这个三个函数, 并将其结果打印,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,对象创建的内存模型,引用类型变量 除了8种基本数据类型的变量,其他变量都是引用类型变量 类(class) 接口(interface) 数组,Person p ;,Animal a ;,int c ;,对象创建的内存模型,0x8000,1.74,44,“lisi”,P

19、erson p,0x8000,name,age,height,Person p = new Person( “lisi”, 44, 1.74);,引用类型变量的内存模型,对象创建的内存模型,0x8000,0x3000,1.74,44,“lisi”,Person p,0x3000,name,age,height,1.73,33,“zhang”,name,age,height,Person q,0x8000,引用类型变量的内存模型,Person p = new Person( “zhang”, 33,1.73); Person q = new Person( “lisi”, 44, 1.74);,

20、变量的作用域,变量的作用域 全局变量 类体中声明的成员变量为全局变量 全局变量在类的整个生命周期中都有效 局部变量 方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量 局部变量只在方法调用的过程中有效,方法调用结束后失效,变量的作用域,变量的作用域,class Employee String name; int age; double salary; public String showName() String hello = “你好”; System.out.println(hello+name); return name; public void updateName(

21、String name2) name = name2; ,全局变量,局部变量,变量的作用域,变量初始化的顺序 隐式赋予变量默认值 成员变量 显式赋予初始值 通过构造方法体赋予新值 示例 PersianCat.java,各类型变量默认初始化值,变量的作用域, 练习 给定下列代码的执行结果是_? public class X ( private static int a; public static void main(String args) modify(a); System.out.println(a); public static void modify(int a) a+; A. 0 B

22、. 1 C. 编译错误 D. 运行时异常,答案:A,程序执行过程, 执行过程中的内存管理,代码,JVM系统代码, 装载到内存区,stack,heap,data segment,code segment, 找到main方法开始执行,基本数据类型变量 引用类型变量地址,引用变量,静态变量 常量,存放代码,Java代码在系统中的执行过程,补充:参数传值,当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。 public class Date /类声明 int year,month,day; /成员变量,表示年、月、日 void setDate(int y,int m,int

23、d) /成员方法,设置日期值 /无返回值,有4个参数 year = y; month = m; day = d; public static void main(String args) Date1 aday = new Date1() ; /创建对象 aday.setDate(2013,9,28); /调用类方法 ,1基本数据类型参数的传值值,这种数据传递方式被称为是值传递,方法接收参数的值,但不能改变这些参数的值。,2引用类型参数的传值地址,引用传值方式:Java的引用类型数据包括对象、数组和接口,当方法中参数是引用类型时,引用数据类型传递给方法的是数据在内存中的地址,方法中对参数变量的操

24、作可以改变原变量的值。,class People String face; void setFace(String s) face = s; class C void f(int x, double y, People p) x = x + 1; y = y + 1; p.setFace(“笑脸“); System.out.println(“参数x和y的值分别是:“ + x + “,“ + y); System.out.println(“参数对象p的face是:“ + p.face); public class Ep4_8 public static void main(String args

25、) int m = 100; double n = 100.88; People zhang = new People(); zhang.setFace(“很严肃的样子“); C a = new C(); a.f(m, n, zhang); System.out.println(“main方法中m和n的值仍然分别是:“ + m + “,“ + n); System.out.println(“main方法中对象zhang的face是:“ + zhang.face); ,zhang.face= “很严肃的样子“;,改变形参值 导致实参值的改变,zhang.face= “笑脸“;,参数x和y的值分别

26、是:101,101.88 参数对象p的face是:笑脸 main方法中m和n的值仍然分别是:100,100.88 main方法中对象zhang的face是:笑脸,补充内容对象数组,在Java中不但可以声明由原始数据组成的数组,还可以声明由对象组成的数组; 声明对象数组的方式如:,/假设已经定义了一个Student类 /*声明由5个Student对象组成的数组*/ Student stdAry = new Student5;,对象数组=引用数组,对象数组示例,/*对象数组示例,假设已经定义了Student类*/ public static void main(String args) /*创建包

27、含有5个Student引用的数组*/ Student stdAry = new Student5; /*逐一为每个引用创建对象实例*/ stdAry0 = new Student(“张三“, 18); stdAry1 = new Student(“李四“, 20); stdAry2 = new Student(“王五“, 24); stdAry4 = new Student(“郑六“, 21); stdAry4 = new Student(“田七“, 19); for (int i = 0; i stdAry.length; i+) stdAryi.display(); ,对象数组的存放形式,

28、垃圾回收机制,垃圾回收器(GC, Garbage Collection) Java的一个重要特点句是具有一个垃圾回收器,并且能够自动回收垃圾,这也是Java相对于其他语言有优势的地方 对内存的释放和回收的工作是由Java运行系统(JRE)承担的,不用编程者关注 在Java程序运行过程中,一个垃圾回收器会不定时地被唤起检查是否有不再被使用的对象,并释放它们所占用的内存空间 垃圾回收器的启用不由程序员控制,也无规律可循,垃圾回收机制,垃圾回收机制 System.gc( )、null Java里提供了一个System.gc( )方法,使用这个方法可以建议垃圾回收器回收垃圾 在Java中,可以通过将对

29、象的引用变量设置为null,来暗示垃圾回收器来回收该对象,class Employee String name; int age; double salary; public static void main(String args) Employee e = new Employee(); new Employee(); e = null; System.gc(); System.out.println(“The program is end”); ,垃圾回收机制,后台线程,主线程,Object o2 = new Object( );,o2 = null;,Object o1 = new O

30、bject( );,The heap,检查出对象没有引用指向,调用o2对象的finalize() 方法,垃圾回收机制回收分配给该对象的内存,垃圾回收采用Java多线程机制,垃圾回收机制,垃圾回收机制, 练习 什么时候程序会销毁一个对象x_? A. x.delete() B. x.finalize() C. System.gc() D. 设置对象的引用为null F. 只有垃圾回收器才可以销毁一个对象,答案:F,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,Java中的关键字,this关键字 代表对象自身的引用 一个引用 指向调用该方法的当前

31、对象 通常在类的方法定义中使用 用this关键字的情况 方法中的变量与成员变量重名 在一个构造方法中,调用其它重载的构造方法 返回当前对象的引用,成员变量和局部变量,public class Employee int sideA, sideB, sideC; void setSide(int sideA, int sideB, int sideC) this.sideA = sideA; this.sideB = sideB; this.sideC = sideC; ,注:如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,这时如果想在该方法内使用成员变量,必须使用关键字this。,Ja

32、va中的关键字,static关键字 static可以修饰的元素 属性 方法 代码块 需要注意的问题 只能修饰类成员,不能修饰局部变量。,Java中的关键字,static修饰的变量 静态变量 所有对象共享 也称为类变量 用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在 两种方式访问: 直接访问:类名.属性; 实例化后访问:对象名.属性,静态属性,Java中的关键字,static变量的内存模型,Java中的关键字, 练习 Person.java 在Person类中添加一些代码,使其可以统计在整个使用过程中一共产生了多少个Person类的实例对象 提示:利用st

33、atic修饰的变量,Java中的关键字,static修饰的方法 静态方法 不需要实例化,可以直接访问 也称为类方法 两种方式访问: 直接访问:类名.方法名() 实例化后访问:对象名.方法名() static方法的作用 简化方法的使用; 便于访问静态属性; 注意事项 静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员 静态方法中不能使用this、super关键字 静态方法不能被非静态方法覆盖,静态方法不能修饰构造方法,静态方法,Java中的关键字,static修饰的代码块 静态代码块 一个类中由static关键字修饰的,不包含在任何方法体中的代码块 当类被载入时,静态代码块被执行,且

34、只被执行一次 静态块经常用来进行类属性的初始化,静态代码块,Java中的关键字, 练习,public class CircleStatic static double pi = 3.14; int radius=100; public static void main(String args) System.out.println( _1_ ); /打印pi _2_ ; System.out.println(_3_); /打印radius ,答案: pi CircleStatic c = new CircleStatic() c.radius,总 结,类和对象的关系 如何定义类 对象的创建 构造方法 如何定义构造方法 方法的重载 对象创建的内存模型 引用类型变量 变量的初始化 垃圾回收机制 Java中的关键字 this关键字 static关键字,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1