第3章类和对象课件.ppt

上传人(卖家):晟晟文业 文档编号:4514042 上传时间:2022-12-16 格式:PPT 页数:68 大小:390.50KB
下载 相关 举报
第3章类和对象课件.ppt_第1页
第1页 / 共68页
第3章类和对象课件.ppt_第2页
第2页 / 共68页
第3章类和对象课件.ppt_第3页
第3页 / 共68页
第3章类和对象课件.ppt_第4页
第4页 / 共68页
第3章类和对象课件.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

1、2022-12-161第第3章章 类与对象类与对象2022-12-1623.1 Java语言的类语言的类3.1.1 系统定义的类系统定义的类1、java.*包包(核心包核心包):Applet,AWT,Beans,IO,Lang,Math,Net,SQL,Util等等.2、Javax.*包包:Swing,Securing,Rmi等等3、org.*组织扩展包组织扩展包:CORBA和和XML 用用import 来引入这些包来引入这些包.2022-12-1633.1.2 用户自定义类用户自定义类1、类、对象与对象引用、类、对象与对象引用 (1)类类(class)类是类是Java中的一种重要的复合数据类

2、型,是组成中的一种重要的复合数据类型,是组成Java程序的基本要素,它封装了一类对象的状态和方法,是程序的基本要素,它封装了一类对象的状态和方法,是这一类对象的原型。创建一个新的类,就是创建一个新这一类对象的原型。创建一个新的类,就是创建一个新的数据类型。实例化一个类,就得到该类的一个对象。的数据类型。实例化一个类,就得到该类的一个对象。类类(class)是可以由用户自己定义的引用类型,它是是可以由用户自己定义的引用类型,它是相似对象的软件抽象、创建对象的模板。每一个类都相似对象的软件抽象、创建对象的模板。每一个类都组合了一些能够反映某种类型属性的字段和反映某种组合了一些能够反映某种类型属性的

3、字段和反映某种类型动作的方法。类型动作的方法。2022-12-164 (2)对象对象(Object)对象是一个人、地址、物品、事件、概念、屏幕显示对象是一个人、地址、物品、事件、概念、屏幕显示或者报表,它属于某一个类,对象拥有自己的属性值或者报表,它属于某一个类,对象拥有自己的属性值和方法调用。每一个类都将存在许多相互独立的对象。和方法调用。每一个类都将存在许多相互独立的对象。通常说一个对象是类的一个实例,一个对象的生命周通常说一个对象是类的一个实例,一个对象的生命周期包括声明、创建、使用和清除期包括声明、创建、使用和清除4个状态。个状态。在在Java语言中只能引用对象,无法声明一个直接包语言

4、中只能引用对象,无法声明一个直接包含对象的变量。类的变量实际上只是拥有对象的地址,含对象的变量。类的变量实际上只是拥有对象的地址,而不是拥有对象本身。所有对象总是且只是通过内存而不是拥有对象本身。所有对象总是且只是通过内存引用访问的,这种方式称为间接寻址引用访问的,这种方式称为间接寻址(Indirect addressing)。绝对不可以直接涉及对象,而只能通过一。绝对不可以直接涉及对象,而只能通过一个保留地址的变量访问对象。通常情况下,类类型变个保留地址的变量访问对象。通常情况下,类类型变量称为引用变量,它们并不直接保留对象,只是保留量称为引用变量,它们并不直接保留对象,只是保留对象的地址,

5、通过引用变量即可以得到一个对象。对象的地址,通过引用变量即可以得到一个对象。2022-12-165class Constructor public Constructor()System.out.println(调用构造方法调用构造方法);public class InitConstructor public static void main(String st)new Constructor();2022-12-1662、类的定义、类的定义修饰符修饰符 class 类名称类名称 /开始定义类开始定义类 程序区段程序区段;/定义类的属性与方法定义类的属性与方法/完成类定义完成类定义public

6、abstract|finalclass className extends superclassNameimplements interfaceNameList /property and the method declarations/end of class2022-12-167(1)访问控制权访问控制权public、缺省缺省 一个一个Java源文件中最多只能有一个源文件中最多只能有一个public类,而且文件名必须和类,而且文件名必须和public类的类名相同,类的类名相同,拥有拥有main()方法的类中;其它为辅助类方法的类中;其它为辅助类。(2)修饰符修饰符 abstract 当一个

7、类前加上了当一个类前加上了abstract,表示该类是抽象类,表示该类是抽象类,所谓抽象类的意思是该类必须被继承,本身不实现任何所谓抽象类的意思是该类必须被继承,本身不实现任何实际操作,该类中至少有一个抽象方法;当一个类中,实际操作,该类中至少有一个抽象方法;当一个类中,如果出现了某一个如果出现了某一个abstract的方法,那么这个类的前面也的方法,那么这个类的前面也必须加上必须加上abstract的修饰符。的修饰符。2022-12-168 final final如果一个类上加了如果一个类上加了final这个修饰符,那这个修饰符,那么这个类就不能被任何其他的类所继承,也就是么这个类就不能被任

8、何其他的类所继承,也就是说,这个类绝后了。当不希望某个类被其他类继说,这个类绝后了。当不希望某个类被其他类继承时,就可以将该类标识为承时,就可以将该类标识为final。Java没有限制没有限制public,abstract和和final的次的次序。可以写成序。可以写成public abstract,public final,abstract public或者或者final public(对编译器而言对编译器而言都是一样的都是一样的)。abstract不能与不能与final共同修饰同一类共同修饰同一类2022-12-1692、属性、属性(property或或attribute)属性就是类的成员变

9、量属性就是类的成员变量(member variable)或成或成员数据员数据(member data)(字段或域字段或域(field)。当定义一个属性时,必须在类内定义,并告诉当定义一个属性时,必须在类内定义,并告诉Java这个属性的数据类型是什么这个属性的数据类型是什么?以及存取控制的等级是什么以及存取控制的等级是什么?完成定义后,当程序执行时,计算机才知道要分配多少内完成定义后,当程序执行时,计算机才知道要分配多少内存来存储这个属性,以及哪些对象可以存取此属性。其语存来存储这个属性,以及哪些对象可以存取此属性。其语法如下:法如下:修饰符修饰符 数据类型属性名称;数据类型属性名称;publi

10、c|protected|privatestatic final transient volatile type variableName;2022-12-1610存取等级存取等级 同一类同一类 同一同一package 不同不同package 其它类其它类 子类子类 其它类其它类 子类子类public可可 可可 可可 可可 可可 private 可可 不不可可 不不可可不不可可不不可可protected 可可 可可 可可 不不可可可可 default可可 可可 可可 不不可可不不可可(1)访问控制符访问控制符2022-12-1611 设计类成员访问控制的最常用策略是将所设计类成员访问控制的最常用

11、策略是将所有数据成员声明为私有的,以实现信息隐藏;有数据成员声明为私有的,以实现信息隐藏;将所有方法成员声明为公有的,以供其他程序将所有方法成员声明为公有的,以供其他程序片段使用。这种设计模式的好处是,当一个类片段使用。这种设计模式的好处是,当一个类的属性表示方法发生变化时,只需修改类中一的属性表示方法发生变化时,只需修改类中一些方法成员的方法体代码,只要该类能保持所些方法成员的方法体代码,只要该类能保持所有方法成员的接口及其实现的功能不变,那么有方法成员的接口及其实现的功能不变,那么上述变化就不会影响到使用该类的其他程序。上述变化就不会影响到使用该类的其他程序。2022-12-1612 如果

12、设计的类中有一个数据成员需要对外公开,就如果设计的类中有一个数据成员需要对外公开,就要仔细研究其他程序片段是仅仅需要读取该数据成员要仔细研究其他程序片段是仅仅需要读取该数据成员的值,还是需要修改该数据成员的值。若是前者则仍的值,还是需要修改该数据成员的值。若是前者则仍应将数据成员声明为私有的,然后提供一个返回该数应将数据成员声明为私有的,然后提供一个返回该数据的公有方法成员;若是后者则有两种处理方式:一据的公有方法成员;若是后者则有两种处理方式:一是将数据成员声明为公有,二是将数据成员声明为私是将数据成员声明为公有,二是将数据成员声明为私有并提供一个公有的访问方法和一个公有的修改方法。有并提供

13、一个公有的访问方法和一个公有的修改方法。返回私有数据成员的那些公有方法成员又称返回私有数据成员的那些公有方法成员又称getter方法,因为这些公有方法通常命名为方法,因为这些公有方法通常命名为get()(注注意对布尔类型返回值通常命名为意对布尔类型返回值通常命名为is();修改私有数;修改私有数据成员的那些公有方法成员又称据成员的那些公有方法成员又称setter方法,因为这方法,因为这些方法通常命名为些方法通常命名为set()。2022-12-1613class Person /类名类名private String address;/籍贯籍贯private String name;/姓名姓名p

14、rivate int age;/年龄年龄public String getName()/获取人名获取人名 return name;public int getAge()/获取年龄获取年龄 return age;public void changeName(String new_name)/改名改名 name=new_name;public void incrementAge()/增加增加1岁岁 age+;public void setAge(int new_age)/设置年龄设置年龄 age=new_age;2022-12-1614 public String getAddress()/获取籍

15、贯获取籍贯 return address;public void setAddress(String x)/设置籍贯设置籍贯address=x;public String toString()/读对象信息读对象信息String s=Name:+name+n;s+=Age:+age+n;s+=Address:+address+n;return s;2022-12-1615class Base public int attPublic=50;private int attPrivate=50;public class AccessControl1 public static void main(S

16、tring args)Base A_Base=new Base();System.out.println(“在不同类中存取在不同类中存取 public属性属性);System.out.println(attPublic:+A_Base.attPublic);/输出输出A_Base对象的对象的attPublic属性属性 /System.out.println(attPrivate:“+A_Base.attPrivate);2022-12-1616执行结果:执行结果:在不同类中存取在不同类中存取public属性属性 attPublic:50 注意:访问描述符关键字不能作为方注意:访问描述符关键字不

17、能作为方法的局部变量和参数变量声明的一部分法的局部变量和参数变量声明的一部分2022-12-1617(2)修饰符修饰符 成员变量的声明可以带下面的修饰符成员变量的声明可以带下面的修饰符(modifier)关关键字:键字:final或或volatile,static,transient。final:final:将一个成员变量声明为将一个成员变量声明为finalfinal时,编译时,编译器保证对这个成员变量进行初始化,并且在以后将它器保证对这个成员变量进行初始化,并且在以后将它看做一个常量。编译器可以在程序的字节码上执行内看做一个常量。编译器可以在程序的字节码上执行内部优化,因为它部优化,因为它“

18、知道知道”常量不会发生改变常量不会发生改变(默认情默认情况下,一个成员变量是可读况下,一个成员变量是可读/写的写的)。volatilevolatile用于声明一个共享变量,一般用在多个用于声明一个共享变量,一般用在多个并发线程共享变量时,这样各个线程对变量的访问就并发线程共享变量时,这样各个线程对变量的访问就可以保持一致。可以保持一致。2022-12-1618 static:当一个成员变量被声明为当一个成员变量被声明为static时,声时,声明这个成员变量的类所创建的所有对象共享这个成员明这个成员变量的类所创建的所有对象共享这个成员变量的一个副本。给这个成员变量赋新值会让所有对变量的一个副本。

19、给这个成员变量赋新值会让所有对象象“看到看到”这个新值这个新值(默认情况下,每个对象有自己默认情况下,每个对象有自己的一个成员变量副本的一个成员变量副本)。transient用来声明一个暂时性变量,指示用来声明一个暂时性变量,指示Java虚拟机该变量不属于对象的永久状态,对象存档时不虚拟机该变量不属于对象的永久状态,对象存档时不必保存该变量,而缺省情况下,类中所有变量都是对必保存该变量,而缺省情况下,类中所有变量都是对象永久状态的一部分,当对象被存档时,这些变量必象永久状态的一部分,当对象被存档时,这些变量必须同时保存。须同时保存。注意注意:修饰符关键字不能作为方法的参数变量声明的修饰符关键字

20、不能作为方法的参数变量声明的一部分,而且除了一部分,而且除了final以外,修饰符也不能作为方以外,修饰符也不能作为方法的局部变量声明的一部分。法的局部变量声明的一部分。2022-12-1619public class Account /银行账户银行账户 /银行账户的属性银行账户的属性 private double balance=0;/存款余额存款余额 /向账户中存款,存款金额为向账户中存款,存款金额为amount public void deposit(double amount)balance=balance+amount;/从账户中取款,取款金额为从账户中取款,取款金额为amount;

21、取款成功返回;取款成功返回true,否则返回否则返回false public boolean withdraw(double amount)if(amount=balance)balance=balance-amount;return true;else return false;/查询账户的当前余额查询账户的当前余额 public double getBalance()return balance;2022-12-16203.2 对象的创建与引用对象的创建与引用3.2.1 对象的创建与访问对象成员对象的创建与访问对象成员 创建对象包括三步:创建对象包括三步:对象的声明对象的声明 对象的实例化

22、对象的实例化 对象的初始化对象的初始化2022-12-1621public class TestPerson public static void main(String args)Person p1=new Person();Person p2=new Person();p1.changeName(John);p1.setAge(23);p1.setAddress(江西江西);p1.incrementAge();p2.changeName(Mary Ann);p2.setAge(22);p2.setAddress(北京北京);System.out.println(姓名姓名=+p1.getNa

23、me()+,地址地址=+p1.getAddress();System.out.println(姓名姓名=+p2.getName()+,地址地址=+p2.getAddress();/System.out.println(p1);/System.out.println(p2);2022-12-1622public String toString()toString()方法返回当前对象的字符方法返回当前对象的字符串表示形式,返回的字符串中包括当前串表示形式,返回的字符串中包括当前对象对应的类名、一个对象对应的类名、一个符号和一个该符号和一个该对象的对象的hash码的无符号十六进制描述码的无符号十六进

24、制描述(Java赋予当前对象的标识码赋予当前对象的标识码)。希望用户开发类都重载希望用户开发类都重载toString()方方法使其返回能反映当前对象特点的字符法使其返回能反映当前对象特点的字符串串2022-12-16233.2.2 对象的初始化和构造方法对象的初始化和构造方法1、默认值:默认值:定义属性时没有指定初始值,则系统自动指定初值。定义属性时没有指定初始值,则系统自动指定初值。2、定义属性成员时指定初值。定义属性成员时指定初值。3、用代码块设置初始化值用代码块设置初始化值4、使用构造方法给对象初始化使用构造方法给对象初始化2022-12-16241、定义属性时没有指定初始值、定义属性时

25、没有指定初始值 使用默认值使用默认值class Course /Course是课程类名是课程类名/定义成员变量定义成员变量private int cNumber;/课程编号课程编号private String cName;/课程名课程名private int cUnit;/学分数学分数/定义成员方法定义成员方法void setCNumber(int Number)/成员方法成员方法setCNumbercNumber=Number;int getCNumber()/成员方法成员方法getCNumberreturn cNumber;void setCName(String Name)/成员方法成员

26、方法setCNamecName=Name;String getCName()/成员方法成员方法getCNamereturn cName;2022-12-1625 void setCUnit(int Unit)/成员方法成员方法setCUnitcUnit=Unit;int getCUnit()/成员方法成员方法getCUnit return cUnit;public class InitialDemo1 public static void main(String args)Course cs1=new Course();/声明一个声明一个Course对象对象cs1System.out.prin

27、tln(cs1.getCNumber();System.out.println(cs1.getCName();System.out.println(cs1.getCUnit();2022-12-16262、定义属性成员时初始化定义属性成员时初始化class Course /Course是课程类名是课程类名int cNumber=1;/课程编号课程编号String cName=Wang;/课程名课程名int cUnit=2;/学分数学分数public class InitialDemo2public static void main(String args)Course cs1=new Cour

28、se();/声明一个声明一个Course对象对象cs1System.out.println(cs1.cNumber);System.out.println(cs1.cName);System.out.println(cs1.cUnit);2022-12-16273、通过初始化块来设置对象的初始值、通过初始化块来设置对象的初始值public class ClassExample /声明成员属性,可以是静态的或非静态的声明成员属性,可以是静态的或非静态的 int i;static int j;/静态初始化语句块静态初始化语句块 static j=10;System.out.println(In s

29、tatic initializer.);System.out.println(j=+j);/实例初始化语句块实例初始化语句块 i=10;System.out.println(In instance initializer.);System.out.println(i=+i);2022-12-1628 /构造方法构造方法 public ClassExample()System.out.println(In constructor.);public static void main(String args)new ClassExample();2022-12-16294、使用构造方法初始化、使用构

30、造方法初始化构造方法构造方法:(1)构造方法名与类名相同。构造方法名与类名相同。(2)构造方法的作用是给对象赋初值,没有返回值,但不构造方法的作用是给对象赋初值,没有返回值,但不需要用需要用void来指明这一点。来指明这一点。(3)构造方法不能被程序显式调用,即不应该向其它方法构造方法不能被程序显式调用,即不应该向其它方法一样来使用构造方法。一样来使用构造方法。(4)构造方法可以在类中由编程者定义,若编程者没有定构造方法可以在类中由编程者定义,若编程者没有定义,系统将自动生成一个构造方法义,系统将自动生成一个构造方法(默认构造方法默认构造方法),来,来完成对象创建时的初始化工作。完成对象创建时

31、的初始化工作。(5)构造方法可以通过重载实现不同的初始化方法。构造方法可以通过重载实现不同的初始化方法。(6)构造方法可以用构造方法可以用public修饰或缺省修饰或缺省(7)编程者一旦定义了构造方法,就不能再调用默认构造编程者一旦定义了构造方法,就不能再调用默认构造方法。方法。2022-12-1630class Course /Course是课程类名是课程类名/定义成员变量定义成员变量int cNumber=1;/课程编号课程编号String cName;/课程名课程名int cUnit=2;/学分数学分数Course(String Name,int Unit)/构造方法构造方法cName=

32、Name;cUnit=Unit;2022-12-1631public class InitialDemo3public static void main(String args)/使用类中声明的构造方法声明一个使用类中声明的构造方法声明一个Course对象对象cs1 Course cs1=new Course(“Zhang”,6);System.out.println(cs1.cNumber);System.out.println(cs1.cName);System.out.println(cs1.cUnit);2022-12-1632复制构造方法复制构造方法 复制构造方法就是将传入的对象的状

33、态值取复制构造方法就是将传入的对象的状态值取出并设置新创建的对象,使之成为新对象的状出并设置新创建的对象,使之成为新对象的状态,如此一来,可使两个对象有相同的状态,可态,如此一来,可使两个对象有相同的状态,可是却是指向不同的对象。是却是指向不同的对象。2022-12-1633class Circledouble radius;Circle(Circle acircle)radius=acircle.radius;Circle(double rad)radius=rad;void setRadius(double radi)radius=radi;void showRadius()System.

34、out.println(半径为半径为:+radius);return;double showArea()return Math.PI*Math.pow(radius,2);2022-12-1634public class CircleConstructor public static void main(String args)Circle acirc;acirc=new Circle(12.0);Circle bcirc=new Circle(acirc);bcirc.showRadius();acirc.setRadius(14.0);bcirc.showRadius();System.o

35、ut.println(“acirc的面积等于的面积等于+acirc.showArea();System.out.println(“acirc的面积等于的面积等于+bcirc.showArea();2022-12-1635例例3-22022-12-16363.3 变量作用域变量作用域 变量的作用域也称变量的有效范围,它是程变量的作用域也称变量的有效范围,它是程序的一个区域,变量在其作用域内可以通过名字序的一个区域,变量在其作用域内可以通过名字来引用。变量分为来引用。变量分为4类情形:类情形:成员变量成员变量 局部变量局部变量 方法参数方法参数 异常处理参数异常处理参数2022-12-1637pu

36、blic class Scope int x;/成员变量成员变量 int y;/成员变量的初始化代码成员变量的初始化代码 x=2;y=1;public void method(int a)/方法参变量在整个方法内有效方法参变量在整个方法内有效 int x=5;/局部变量将成员变量隐藏局部变量将成员变量隐藏 for(int i=1;ia;i+)/在循环内定义的变量在循环内定义的变量i只在循环内有效只在循环内有效 x=x+i;System.out.println(x=+x+,y=+y+,a=+a);public static void main(String args)Scope x=new Sc

37、ope();x.method(6);2022-12-16383.4 类变量和静态方法类变量和静态方法3.4.1 变量变量(实例变量和类变量实例变量和类变量)、实例成员变量实例成员变量 在类体中在类体中声明但不使用关键字声明但不使用关键字static修饰符,则这修饰符,则这个成员变量称为实例成员变量个成员变量称为实例成员变量(instance variable),也,也称为非静态成员变量称为非静态成员变量。它在对象初始化时完成相应的初始化工作它在对象初始化时完成相应的初始化工作 每个对象都拥有自己的实例变量每个对象都拥有自己的实例变量 实例变量的作用域是某一个类具体创建的实例对象实例变量的作用域

38、是某一个类具体创建的实例对象 2022-12-1639实例成员变量与对象相关,而不与类相关联。在实例成员变量与对象相关,而不与类相关联。在修改一个实例成员变量的时候,只有与这个成员变量修改一个实例成员变量的时候,只有与这个成员变量相关的对象才能看到所发生的变化。实例成员变量在相关的对象才能看到所发生的变化。实例成员变量在创建对象时被创建,在删除对象时被删除。创建对象时被创建,在删除对象时被删除。class InstanceFieldDemoclass InstanceFieldDemo double d=1234.5;double d=1234.5;当当JVMJVM创建一个创建一个Instan

39、ceFieldDemoInstanceFieldDemo对象时,它为对象时,它为d d分分配内存,并且将配内存,并且将1234.51234.5赋给这个成员变量。赋给这个成员变量。2022-12-1640但如果不对一个实例成员变量进行显式的赋值,但如果不对一个实例成员变量进行显式的赋值,JVM就会将这个域的内存清为零,这个动作为实例成就会将这个域的内存清为零,这个动作为实例成员变量设了一个默认值。默认值的解释方法取决于实员变量设了一个默认值。默认值的解释方法取决于实例成员变量的类型,例如:例成员变量的类型,例如:一个对象类型实例成员变量的默认值为一个对象类型实例成员变量的默认值为null;一个数

40、字类型实例成员变量的默认值为一个数字类型实例成员变量的默认值为0或或0.0;一个布尔类型实例成员变量的默认值为一个布尔类型实例成员变量的默认值为false;一个字符类型实例成员变量的默认值为一个字符类型实例成员变量的默认值为u0000。2022-12-1641、类成员变量类成员变量(Class variable)类变量必须在类体中声明,并且使用关键字类变量必须在类体中声明,并且使用关键字static,因此也称为静态变量。因此也称为静态变量。类变量在类被加载时完成相应的初始化工作。类变量在类被加载时完成相应的初始化工作。类变量在一个运行系统中只有一份供整个类和实例对类变量在一个运行系统中只有一份

41、供整个类和实例对象共享的值,该值有可能被类象共享的值,该值有可能被类(及其子类及其子类)和它们所创建和它们所创建的实例改变,每一次的改变都将影响到该类的实例改变,每一次的改变都将影响到该类(及其子类及其子类)和其他实例的调用。和其他实例的调用。类变量的作用域是整个类。类变量的作用域是整个类。类成员变量与类相关,而不与对象相关联。类成员变量与类相关,而不与对象相关联。2022-12-1642在修改一个类成员变量的时候,类在修改一个类成员变量的时候,类(以及从这个类以及从这个类创建的对象创建的对象)“看到看到”所发生的变化。类成员变量在加载所发生的变化。类成员变量在加载类的时候被创建,在卸载类的时

42、候被删除类的时候被创建,在卸载类的时候被删除(某些某些JVM会会卸载执行程序不再使用的类,以释放内存空间卸载执行程序不再使用的类,以释放内存空间)。下面的代码片段声明了一个下面的代码片段声明了一个ClassFieldDemo类,其类,其中包含类成员变量中包含类成员变量count的声明:的声明:class ClassFieldDemo static int count;当当JVM加载加载c1assFieldDemo类时,它为类时,它为count分配内分配内存,并且将这个成员变量的内存清零。将存,并且将这个成员变量的内存清零。将count设为默设为默认值认值0。注意:静态代码块也在类加载时被执行。

43、注意:静态代码块也在类加载时被执行。2022-12-16432022-12-16443、访问成员变量、访问成员变量 当你声明一个类时,需要编写代码来访问成员变量。当你声明一个类时,需要编写代码来访问成员变量。如何访问一个成员变量取决于下面这些因素:如何访问一个成员变量取决于下面这些因素:成员变量是一个实例成员变量还是一个类成员变量成员变量是一个实例成员变量还是一个类成员变量代码是通过同一个类的实例方法还是类方法来访问这代码是通过同一个类的实例方法还是类方法来访问这个成员变量个成员变量代码是通过其他类的实例方法还是类方法来访问这个代码是通过其他类的实例方法还是类方法来访问这个成员变量成员变量例子

44、例子:2022-12-1645前面的例子说明了以下成员变量访问规则:前面的例子说明了以下成员变量访问规则:(1)如果用同一个类的实例方法访问实例成员变量,如果用同一个类的实例方法访问实例成员变量,只需要指定成员变量名。只需要指定成员变量名。(2)如果用同一个类的类方法访问实例成员变量,则如果用同一个类的类方法访问实例成员变量,则必须创建一个对象,然后使用对象引用必须创建一个对象,然后使用对象引用(带句点分隔带句点分隔符符)来访问这个成员变量。但是在进行这些操作的时来访问这个成员变量。但是在进行这些操作的时候,是通过一个对象的上下文,而不是类的上下文来候,是通过一个对象的上下文,而不是类的上下文

45、来实现的。实现的。(3)如果从同一个类的实例方法访问类成员变量,只如果从同一个类的实例方法访问类成员变量,只需要指定成员变量名。需要指定成员变量名。(4)如果从同一个类的类方法访问类成员变量,只需如果从同一个类的类方法访问类成员变量,只需要指定成员变量名。要指定成员变量名。2022-12-1646(5)如果从另一个类的实例方法访问实例成员变量,则如果从另一个类的实例方法访问实例成员变量,则必须创建一个对象,然后用对象引用必须创建一个对象,然后用对象引用(带句点分隔符带句点分隔符)来来访问实例成员变量。但是在进行这些操作的时候,是通访问实例成员变量。但是在进行这些操作的时候,是通过一个对象的上下

46、文,而不是实例方法来实现的。过一个对象的上下文,而不是实例方法来实现的。(6)如果从另一个类的类方法访问实例成员变量,则必如果从另一个类的类方法访问实例成员变量,则必须创建一个对象,然后使用对象引用须创建一个对象,然后使用对象引用(带句点分隔符带句点分隔符)来来访问这个成员变量。但是在进行这些操作的时候,是通访问这个成员变量。但是在进行这些操作的时候,是通过一个对象的上下文,而不是类的上下文来实现的。过一个对象的上下文,而不是类的上下文来实现的。(7)如果从另一个类的类方法访问类成员变量,则必须如果从另一个类的类方法访问类成员变量,则必须在类成员变量之前加上类名在类成员变量之前加上类名(带句点

47、分隔符带句点分隔符)。(8)如果从另一个类的实例方法访问类成员变量,则必如果从另一个类的实例方法访问类成员变量,则必须在类成员变量之前加上类名须在类成员变量之前加上类名(带句点分隔符带句点分隔符)。注意:如果直接从类方法访问实例成员变量,编译器将注意:如果直接从类方法访问实例成员变量,编译器将 会报错。会报错。2022-12-16473.4.2 方法方法(实例方法和类方法实例方法和类方法)方法表示一个对象的行为或者一个类的行方法表示一个对象的行为或者一个类的行为。在面向对象编程中,行为指的是一个对象为。在面向对象编程中,行为指的是一个对象向另一个对象发送的消息。发送消息的对象称向另一个对象发送

48、的消息。发送消息的对象称为发送方为发送方(或源或源),接受消息的一方称为接受方,接受消息的一方称为接受方(或目的或目的)。2022-12-16481、方法定义、方法定义修饰符返回数据类型方法名称修饰符返回数据类型方法名称(参数串行参数串行)/程序语句程序语句 return 返回值返回值;(public|private|protected)(abstract|final static native synchronized)type methodIdentifier(parameterList)statement .2022-12-1649存取等级存取等级 同一类同一类 同一同一package

49、不同不同package 其它类其它类 子类子类 其它类其它类子类子类public可可 可可 可可 可可 可可 private 可可 不不可可 不不可可不不可可不不可可protected可可 可可 可可 不不可可可可 default可可可可 可可 不不可可不不可可(1)访问描述符访问描述符(方法的存取控制方法的存取控制)方法可以使用下面的访问描述符关键字:方法可以使用下面的访问描述符关键字:public,private或或protected以及无修饰符种以及无修饰符种。此关键字决定。此关键字决定了这个方法对于其他类中代码的可访问程度。访问的了这个方法对于其他类中代码的可访问程度。访问的范围从完全

50、可访问到完全不可访问。范围从完全可访问到完全不可访问。2022-12-1650(2)修饰符修饰符 一个方法可以用下列修饰符关键字进行声明:一个方法可以用下列修饰符关键字进行声明:abstract或或final,static,native,或,或synchronized。这几个修饰符。这几个修饰符的作用分别是将方法变为抽象的的作用分别是将方法变为抽象的(只带一个语法格式只带一个语法格式),将,将实例方法转换为类方法,让实例方法转换为类方法,让Java方法调用与平台相关的方法调用与平台相关的库的本地代码,以及将方法的执行限制到一个线程上。库的本地代码,以及将方法的执行限制到一个线程上。当一个方法声

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第3章类和对象课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|