JAVA面向对象基础 (2).ppt

上传人:牧羊曲112 文档编号:6510286 上传时间:2023-11-07 格式:PPT 页数:68 大小:1,001.50KB
返回 下载 相关 举报
JAVA面向对象基础 (2).ppt_第1页
第1页 / 共68页
JAVA面向对象基础 (2).ppt_第2页
第2页 / 共68页
JAVA面向对象基础 (2).ppt_第3页
第3页 / 共68页
JAVA面向对象基础 (2).ppt_第4页
第4页 / 共68页
JAVA面向对象基础 (2).ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《JAVA面向对象基础 (2).ppt》由会员分享,可在线阅读,更多相关《JAVA面向对象基础 (2).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 OpenIcebox()printf(“把冰箱门打开n);void PutEleph

3、antI()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|final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化;方法声明及方法体;,变

5、量声明格式public|protected|private static finaltransient volatile变量数据类型 变量名1=变量初值,变量名2=变量初值,;格式说明public、protected、private 为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改transient指明变量是临时状态volatile指明变量是一个共享变量,类的方法声明格式:public|protected|privatestaticfinalabstractnativesynchronized 返回类型 方法名(参数列表)throws exceptionList

6、 方法体;,格式说明方法修饰public、protected、private 为存取控制符static指明方法是一个类方法final指明方法是一个终结方法abstract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问,方法调用给对象发消息意味着调用对象的某个方法从对象中取得信息 修改对象的状态或进行某种操作 进行计算及取得结果等调用格式.(参数列表)称点操作符“.”前面的为消息的接收者(receiver)参数传递值传递:参数类型为基本数据类型时引用传递:参数类型为对象类型或数组时,访问修饰符,访问修饰符,访问修

7、饰符可访问性,类和对象的关系,类的定义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);return age;public void updateName(String name2)name=name2;public void getSalary()System.out.println(The salary of

8、 this month is 2000);,属性,方法,类和对象的关系,类的定义 练习 Person.java定义一个Person类,Person类具有名字、年龄及性别等属性,并具有一个getInfo()方法可以打印出Person类的属性,sayHello()方法和大家说“Hello everybody!”,类和对象的关系,类的定义 练习 Point.java 定义一个点类Point,包含两个成员变量x、y分别表示x和y的坐标,一个movePoint(int dx,int dy)方法实现点的位置的移动。public class Pointint x,y;void movePoint(int d

9、x,int dy)x=dx;y=dy;,类和对象的关系,类的定义 练习 MyDate.java 定义一个点日期MyDate,包含三个成员变量year、month、day分别表示年、月、日,以及每个属性对应的get和set方法(如,year有getYear()方法用来获得日期的年份,还有setYear(int y)方法用来修改或设置日期的年份),最后还有printDate()方法,调用该方法可以把日期按照“yyyy-mm-dd”的形式输出。,类和对象的关系,类和对象的关系类(class)是对某一类事物的描述对象(object)是实际存在的某类事物的个体,也称为实例(instance)类是创建对象

10、的模板,对象是类的实例。,类和对象的关系,对象的创建语法格式示例 TestEmployee.java,类名 对象名=new 构造函数,Employee zhang=new Employee(),类和对象的关系,对象的创建 练习 TestPerson.java在TestPerson类里写一个main方法,在main()方法中:创建一个Person类的对象这个对象的名字叫小沈阳,年龄28,性别男在控制台中打印这个实例的信息并调用这个对象的sayHello()方法,向大家问好,类和对象的关系,对象的创建 练习 TestPoint.java在TestPoint类里写一个main方法,在main()方法

11、中:创建一个Point类的对象 这个点的坐标是(3,2)将这个点移动到坐标为(5,6)的位置并把移动后的点的坐标按“(x,y)”形式打印在控制台上,类和对象的关系,对象的创建 练习 TestDate.java在TestDate类里写一个main方法,在main()方法中:创建一个MyDate类的对象 通过setXXX方法将该日期对象的时间设置为“2013年10月8日”在控制台上打印该对象的月份 把该日期对象按“2013-10-8”的格式输出,类和对象的关系,匿名对象创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象使用匿名对象的情况如果对一

12、个对象只需要进行一次方法调用,new Person().sayHello(),Person p1=new Person();p1.sayHello();,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,构造方法,构造方法(构造函数/构造器,Constructor)具有与类相同的名称不含返回值类型不能在方法中用return语句返回一个值一般访问权限为public 在一个类中,具有上述特征的方法就是构造方法。构造方法的作用完成对象的创建,即完成对象的实例化一般使用构造方法来完成对成员变量的初始化 示例 TestPerson.java,构造方法,默

13、认的构造方法在Java中,每个类都至少要有一个构造方法,如果程序员没有在类里定义构造方法,系统会自动为这个类产生一个默认的构造方法一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法,class Employee public Employee(),class Employee,构造方法,练习 下列关于类的定义的选项中,哪些可以通过new Thing()方法来创建该类的一个对象_?A.public class Thing B.public class Thing public Thing()C.public class Thing D.public class Thing public

14、 Thing(void)public Thing(String s)E.public class Thing public void Thing()public Thing(String s),答案:A、B,构造方法,练习 给定下列代码的执行结果是_?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,构造方法,类和对象的关系 练习 Xiy

15、oujiRole.java构造一个完整的西游记人物类,并定义一个构造方法,通过这个方法可以创建不同的西游记人物,并写一个main函数进行验证。孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星唐 僧:唐僧没有武器,战斗力为零,耐力五颗星猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星沙 僧:沙僧的武器是月牙铲,战斗力三颗星,耐力四颗星,方法的重载,方法的重载(overload)函数的重载就是在同一个类中允许同时存在一个以上同名的函数方法重载的规则函数名称相同函数的参数必须不同参数个数不同 或参数类型不同函数的返回值类型可以相同,也可以不同,方法的重载,方法的重载(overload),方

16、法的重载,练习 下列选项中,哪些可以与void setAge(int year,int month,int day)方法在同一个类中定义_?A.public void 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类的基础上,完成以下功能:声

17、明一个有参的构造方法,使得通过调用该构造方法可以对Person类的三个成员变量进行初始化再声明一个无参的构造方法,实现构造方法的重载,方法的重载,练习 MethodAdd.java在类MethodAdd中,声明三个方法add,分别计算两个整数的和三个整数的和、两个双精度浮点数(double)数的和,并在该类写一个主程序中调用这个三个函数,并将其结果打印,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,对象创建的内存模型,引用类型变量除了8种基本数据类型的变量,其他变量都是引用类型变量类(class)接口(interface)数组,Person

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

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

20、n name;public void updateName(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

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

22、)/成员方法,设置日期值/无返回值,有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的引用类型数据包括对象、数组和接口,当方法中参数是引用类型时,引用数据类型传递给方法的是数据在内存中的地址,方法中对参数变量的操作可以改变原变量的值。,class P

23、eople 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)int m=100;double n=100.88;People zhang=new People();zha

24、ng.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的值分别是:101,101.88参数对象p的face是:笑脸main方法中m和n的值仍然分别是:100,100.88main方法中对象zhang的face是:笑脸,补充内容对象数组,在Java中不但可

25、以声明由原始数据组成的数组,还可以声明由对象组成的数组;声明对象数组的方式如:,/假设已经定义了一个Student类/*声明由5个Student对象组成的数组*/Student stdAry=new Student5;,对象数组=引用数组,对象数组示例,/*对象数组示例,假设已经定义了Student类*/public static void main(String args)/*创建包含有5个Student引用的数组*/Student stdAry=new Student5;/*逐一为每个引用创建对象实例*/stdAry0=new Student(张三,18);stdAry1=new Stud

26、ent(李四,20);stdAry2=new Student(王五,24);stdAry4=new Student(郑六,21);stdAry4=new Student(田七,19);for(int i=0;i stdAry.length;i+)stdAryi.display();,对象数组的存放形式,垃圾回收机制,垃圾回收器(GC,Garbage Collection)Java的一个重要特点句是具有一个垃圾回收器,并且能够自动回收垃圾,这也是Java相对于其他语言有优势的地方对内存的释放和回收的工作是由Java运行系统(JRE)承担的,不用编程者关注在Java程序运行过程中,一个垃圾回收器会

27、不定时地被唤起检查是否有不再被使用的对象,并释放它们所占用的内存空间垃圾回收器的启用不由程序员控制,也无规律可循,垃圾回收机制,垃圾回收机制 System.gc()、nullJava里提供了一个System.gc()方法,使用这个方法可以建议垃圾回收器回收垃圾在Java中,可以通过将对象的引用变量设置为null,来暗示垃圾回收器来回收该对象,class Employee String name;int age;double salary;public static void main(String args)Employee e=new Employee();new Employee();e=

28、null;System.gc();System.out.println(“The program is end”);,垃圾回收机制,后台线程,主线程,Object o2=new Object();,o2=null;,Object o1=new Object();,The heap,检查出对象没有引用指向,调用o2对象的finalize()方法,垃圾回收机制回收分配给该对象的内存,垃圾回收采用Java多线程机制,垃圾回收机制,垃圾回收机制,练习 什么时候程序会销毁一个对象x_?A.x.delete()B.x.finalize()C.System.gc()D.设置对象的引用为null F.只有垃圾

29、回收器才可以销毁一个对象,答案:F,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,Java中的关键字,this关键字代表对象自身的引用一个引用指向调用该方法的当前对象通常在类的方法定义中使用用this关键字的情况方法中的变量与成员变量重名在一个构造方法中,调用其它重载的构造方法返回当前对象的引用,成员变量和局部变量,public class Employee int sideA,sideB,sideC;void setSide(int sideA,int sideB,int sideC)this.sideA=sideA;this.sideB

30、=sideB;this.sideC=sideC;,注:如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,这时如果想在该方法内使用成员变量,必须使用关键字this。,Java中的关键字,static关键字static可以修饰的元素属性方法代码块需要注意的问题只能修饰类成员,不能修饰局部变量。,Java中的关键字,static修饰的变量 静态变量所有对象共享也称为类变量用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在两种方式访问:直接访问:类名.属性;实例化后访问:对象名.属性,静态属性,Java中的关键字,static变量的内存模型,Java中的关键

31、字,练习 Person.java在Person类中添加一些代码,使其可以统计在整个使用过程中一共产生了多少个Person类的实例对象提示:利用static修饰的变量,Java中的关键字,static修饰的方法 静态方法不需要实例化,可以直接访问也称为类方法两种方式访问:直接访问:类名.方法名()实例化后访问:对象名.方法名()static方法的作用简化方法的使用;便于访问静态属性;注意事项静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员静态方法中不能使用this、super关键字静态方法不能被非静态方法覆盖,静态方法不能修饰构造方法,静态方法,Java中的关键字,static修饰

32、的代码块 静态代码块一个类中由static关键字修饰的,不包含在任何方法体中的代码块当类被载入时,静态代码块被执行,且只被执行一次静态块经常用来进行类属性的初始化,静态代码块,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,答案:piCircleStatic c=new CircleStatic()c.radius,总 结,类和对象的关系如何定义类对象的创建构造方法如何定义构造方法方法的重载对象创建的内存模型引用类型变量变量的初始化垃圾回收机制Java中的关键字this关键字static关键字,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号