《《对象和类》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《对象和类》PPT课件.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、8.1 引言引言8.2 定义对象的类定义对象的类 8.4 构造方法构造方法 8.5 通过引用变量访问对象通过引用变量访问对象 8.6 使用使用java中的类中的类8.7 静态变量、常量、静态方法静态变量、常量、静态方法8.8 可见性修饰符可见性修饰符8.9 数据域封装数据域封装补充:不可变对象和类补充:不可变对象和类8.10 对象引用作为参数对象引用作为参数补充:变量的作用域补充:变量的作用域补充:关键字补充:关键字this8.11 对象数组对象数组第第8章章 对象对象和类和类8.1 引言引言l面向对象的程序设计面向对象的程序设计与结构化程序设计方法相比,OO更符合人类认识现实世界的思维方式
2、已成为程序设计的主流方向涉及的主要概念l抽象l封装l继承l多态 第11章第8,10章所有对象的抽象,是类类。类是模板。类是模板。对象对象是类的具体实例(instance,实例化 instantiation)实例变量 实例方法8.2 定义对象的类定义对象的类对象的状态状态 status 数据域 属性 成员变量成员变量对象的行为行为 behavior成员方法(函数)成员方法(函数)OOP8.3 举例:定义类和创建对象举例:定义类和创建对象class Circle private double r;public void setR(double x)r=x;public double getArea
3、()return Math.PI*r*r;class TestCirclepublic static void main(String s)Circle c1=new Circle();Circle c2=new Circle();c1.setR(1);c2.setR(2);System.out.println(c1.getArea();System.out.println(c2.getArea();8.4 使用构造方法构造对象使用构造方法构造对象l构造方法构造方法一种和类同名的特殊方法用来初始化对象Java中的每个类都有构造方法,用来初始化该类的一个新的对象没有定义构造方法的类,系统自动提供
4、默认的构造方法l构造方法的特点构造方法的特点方法名与类名相同没有返回类型,修饰符void也不能有。如果有,编译器认为它是普通方法,而非构造方法通常被声明为公有的(public)可以有任意多个参数主要作用是完成对象的初始化工作不能在程序中显式的调用在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象进行初始化没有定义构造方法的类,系统自动提供默认的构造方法l系统提供的默认构造方法系统提供的默认构造方法如果在类的声明中没有声明任何构造方法,则Java编译器会提供一个默认的构造方法默认的构造方法没有参数,其方法体为空使用默认的构造方法初始化对象时,如果在类声明中没有给实例变量赋初值,则对象的
5、属性值为零或空l声明一个银行帐号类及测试代码声明一个银行帐号类及测试代码class BankAccountString ownerName;int accountNumber=2012;float balance;public class BankTester public static void main(String args)BankAccount myAccount=new BankAccount();System.out.println(ownerName=+myAccount.ownerName);System.out.println(accountNumber=+myAccoun
6、t.accountNumber);System.out.println(balance=+myAccount.balance);l运行结果运行结果ownerName=nullaccountNumber=2012l自定义构造方法与方法重载自定义构造方法与方法重载可在生成对象时给构造方法传送初始值,使用希望的值给对象初始化构造方法可以被重载,构造方法的重载和方法的重载一致一个类中有两个及以上同名的方法,但参数表不同,这种情况就被称为方法重载。在方法调用时,Java可以通过参数列表的不同来辨别应调用哪一个方法Class Circledouble radius=1.0;Circle()Circle(d
7、ouble newRadius)radius=newRadius;double getArea()return radius*radius*public class Test public static void main()Circle c=new Circle();Circle d=new Circle(2.0);l自定义无参的构造方法自定义无参的构造方法无参的构造方法对其子类的声明很重要。如果在一个类中不存在无参的构造方法,则要求其子类声明时必须声明构造方法,否则在子类对象的初始化时会出错在声明构造方法时,好的声明习惯是l不声明任何构造方法l如果声明,至少声明一个无参构造方法l构建一个构
8、建一个BushBush类,有两个有参数的构造方法类,有两个有参数的构造方法class Bush Bush(int i)Bush(double d)如果写:new Bush();编译器将要告诉你找不到对应的构造方法l说明说明用户在进行类声明时,如果没有声明任何构造方法,系统会赋给此类一个默认(无参)的构造方法。但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不再赋默认的构造方法记住一点:在构造子类时,一定会显式或隐式地调用到父类记住一点:在构造子类时,一定会显式或隐式地调用到父类的构造方法。的构造方法。class A class A public A()public A()/1/
9、1:无参数构造方法。:无参数构造方法。public A(String s)public A(String s)/2/2:有参构造方法:有参构造方法 class B extends Aclass B extends Apublic B(String s)public B(String s)super(s);super(s);/3./3.显式调用父类的构造方法显式调用父类的构造方法 如果1和3都去掉,编译会不会报错?8.5 通过引用变量访问对象通过引用变量访问对象8.5.1 引用变量和引用类型类名 对象引用变量名;对象引用变量名=new 类名();Class Circledouble radius
10、=1.0;Circle()Circle(double newRadius)radius=newRadius;double getArea()return radius*radius*public class Test public static void main()Circle c=new Circle();Circle d=new Circle(2.0);8.5.2 访问对象的数据和方法点运算符.Circle c=new Circle();();();有时候,创建对象后很快不用,回收内存,创建对象不需要引用对于实例变量和实例方法:对象.变量 或 对象.方法对于静态变量和静态方法:常用类名.
11、变量 或 类名.方法也可以 对象.变量 或 对象.方法举例l对象的声明对象的声明格式类名 变量名 Clock aclock;声明一个引用变量时并没有对象生成l对象的创建对象的创建生成实例的格式:new()例如:aclock=new Clock()其作用是:l在内存中为此对象分配内存空间l返回对象的引用8.5.3 数据域引用和 null成员变量有默认值:引用型:null数值型:boolean型:falsechar型:u0000(空不显示 DOS若字体大 a)局部变量没有默认值:必须初始化,否则编译错8.5.4 基本数据类型变量和引用类型变量的区别P218 图8-7 图8-8 8.6 使用使用ja
12、va中的类中的类System类currentTimeMillis()返回1970-1-1日0时到现在的毫秒数java.util.DateDate类new Date().getTime()同上Math类random(),返回0.0,1.0)之间的double数值java.util.RandomRandom类new Random().nextInt(101);返回(0,101)间整数new Random().nextDouble();返回(0.0,1.0)间小数8.7 静态变量、常量、静态静态变量、常量、静态方法方法l数据成员数据成员表示Java类的状态声明数据成员必须给出变量名及其所属的类型,同
13、时还可以指定其他特性在一个类中成员变量名是唯一的数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)分为实例变量和类变量声明格式public|protected|private static finaltransient volatile变量数据类型变量数据类型 变量名变量名1=变量初值变量初值,变量名变量名2=变量初值变量初值,;格式说明lpublic、protected、private 为访问控制符lstatic指明这是一个静态成员变量,属于类lfinal指明变量的值不能被修改ltransient指明变量是临时状态lvolatile指明变量是一个共享变量l实例变量实例变
14、量没有没有static修饰的变量称为实例变量(Instance Variables)只能在对象创建后使用只能在对象创建后使用用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同可通过下面的表达式访问实例属性的值.l类变量类变量也称为静态变量,声明时需加static修饰符不管类的对象有多少,类变量只存在一份,在整个类中只有一个值类初始化的同时就被赋值适用情况l类中所有对象都相同相同的属性l经常需要共享共享的数据l系统中用到的一些常量常量值引用格式.l类方法类方法 静态方法静态方法同上声明常量常量用finalfinalfinalfinal类变量必须在声明的同时初始化类变量必须在声明的同时初
15、始化多数时候,常量被类的所有对象共享,多数时候,常量被类的所有对象共享,故,故,final staticfinal static补充:补充:finalfinal修饰类?修饰类?abstractabstract修饰类?修饰类?staticstatic方法中不能访问非方法中不能访问非staticstatic成员成员public class Foopublic void method1();public static void main(String args)method1();/编译错Foo a=new Foo();a.method1();问:编程时,变量和方法是否该定义成问:编程时,变量和方法
16、是否该定义成staticstatic的?的?答:看其是否与具体实例相关答:看其是否与具体实例相关8.8 可见性修饰符可见性修饰符l类成员的访问控制类成员的访问控制公有(public)l可以被其他任何对象访问(前提是对类成员所在的类有访问权限)保护(protected)l只可被同包任何类同包任何类,同一类及其子类的实例对象访问私有(private)l只能被这个类本身访问,在类外不可见默认(default)l仅允许同一个包内的访问;又被称为“包(package)访问权限”类型类型private无修饰无修饰protectedpublic同一类同一类yesyesyesyes同一包中的同一包中的子类子类
17、noyesyesyes同一包中的同一包中的非子类非子类noyesyesyes不同包中的不同包中的子类子类nonoyesyes不同包中的不同包中的非子类非子类nononoyes修饰成员(数据和方法)时修饰类时l类的访问控制类的访问控制类的访问控制只有public(公共类)及无修饰符(缺省类)两种访问权限符与访问能力之间的关系如表类型类型无修饰无修饰public同一包中的类yesyes不同包中的类noyes8.9 数据域封装数据域封装P227private private 成员变量成员变量作用:作用:防止数据被其它类直接篡改;防止数据被其它类直接篡改;容易调试维护容易调试维护public public 返回类型返回类型 setset方法方法/设置器设置器 修改器修改器public public 返回类型返回类型 getget方法方法/读取器读取器 访问器访问器如果返回值是booleanboolean型,get方法往往取名isis属性名属性名()()8.10 对象引用作为方法参数对象引用作为方法参数Java只有一种参数传递方式:值传递参数本身不会被改变P2298.11 对象数组对象数组基本数据类型数组基本数据类型数组int a=new int5;对象数组对象数组Circle b=new Circle5;for(Circle i:b)i=new Circle();ab
限制150内