《第06章对象和类(2)PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第06章对象和类(2)PPT讲稿.ppt(83页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第0606章对象和类章对象和类章对象和类章对象和类(2)(2)第1页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程2/138学习目标学习目标1.理解对象和类的基本概念,能定义类并能理解对象和类的基本概念,能定义类并能创建类的对象;理解构造方法的作用,能使创建类的对象;理解构造方法的作用,能使用构造方法创建类的对象。用构造方法创建类的对象。2.掌握使用掌握使用Java类库中类的方法。类库中类的方法。3.理解类的封装。理解类的封装。4.初步掌握面向对象程序设计。初步掌握面向对象程序设计。第2页,共83页,编辑于2022年
2、,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程3/138内容摘要内容摘要6.1 引言引言6.2 对象和类对象和类6.3 使用构造方法创建对象使用构造方法创建对象 6.4 通过引用变量来访问对象通过引用变量来访问对象6.5 使用使用Java类库中的类类库中的类6.6 可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器6.7 数据域的封装数据域的封装第3页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程4/138内容摘要内容摘要6.8 永久对象和类永久对象和类6.9 给方法传递对
3、象参数给方法传递对象参数6.10 静态变量、常量和静态方法静态变量、常量和静态方法6.11 变量的作用域变量的作用域6.12 关键字关键字this6.13 对象数组对象数组第4页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程5/138内容摘要内容摘要6.1 引言引言6.2 对象和类对象和类6.3 使用构造方法创建对象使用构造方法创建对象 6.4 通过引用变量来访问对象通过引用变量来访问对象6.5 使用使用Java类库中的类类库中的类6.6 可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器6.7 数据域的封装数据域的
4、封装第5页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程6/1386.6可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器 所谓所谓可见性修饰可见性修饰是指对数据、方法和类的访问权限进行是指对数据、方法和类的访问权限进行控制的行为;而用来表示这种行为的符号称为控制的行为;而用来表示这种行为的符号称为可见性修可见性修饰符饰符。本节介绍本节介绍public、private和默认修饰符。和默认修饰符。public:使得类、方法和数据域可以在任何类中访问;:使得类、方法和数据域可以在任何类中访问;private:使得方法和数
5、据域只能从它自己所在的类:使得方法和数据域只能从它自己所在的类中访问;中访问;默认修饰符:使得类、方法和数据域可以从同一个包里的默认修饰符:使得类、方法和数据域可以从同一个包里的任何类中访问。任何类中访问。图图6-8描述了同一个包和不同包中访问的情形。描述了同一个包和不同包中访问的情形。第6页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程7/1386.6可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器 图图6-8 public修饰符使修饰符使得访问没有限制,得访问没有限制,private修饰符限定只能修饰符限定只能
6、从它自己所在的类中访从它自己所在的类中访问,默认修饰符限定只问,默认修饰符限定只能在包内访问。能在包内访问。第7页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程8/1386.6可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器 图图6-9描述了类被限定的情形。描述了类被限定的情形。第8页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程9/1386.6可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器 注意注意1:可见性修饰符:可见性修饰符pr
7、ivate只修饰数据和只修饰数据和方法,不修饰整个类(除了内部类)。方法,不修饰整个类(除了内部类)。注意注意2:可见性修饰符用于类的成员,而不:可见性修饰符用于类的成员,而不能用于方法中的局部变量。在方法中使用可能用于方法中的局部变量。在方法中使用可见性修饰符将引起编译时错误。见性修饰符将引起编译时错误。注意注意3:大多数情况下,构造方法是公有的,:大多数情况下,构造方法是公有的,但是,为想防止用户创建类的实例,可以使但是,为想防止用户创建类的实例,可以使用私有的构造方法。用私有的构造方法。第9页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程
8、序设计课程程序设计课程10138内容摘要内容摘要6.1 引言引言6.2 对象和类对象和类6.3 使用构造方法创建对象使用构造方法创建对象 6.4 通过引用变量来访问对象通过引用变量来访问对象6.5 使用使用Java类库中的类类库中的类6.6 可见性修饰符、访问器和修改器可见性修饰符、访问器和修改器6.7 数据域的封装数据域的封装第10页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程111386.7 数据域的封装数据域的封装 我们来看一下前面的例我们来看一下前面的例6.1:class SimpleCircle double
9、radius;SimpleCircle()/*构造一个其半径为构造一个其半径为1的圆对象的圆对象*/radius=1.0;/*构造一个由参数指定半径的圆对象构造一个由参数指定半径的圆对象*/SimpleCircle(double newRadius)/*构造一个由参数指定构造一个由参数指定半径的圆对象半径的圆对象*/radius=newRadius;第11页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程121386.7 数据域的封装数据域的封装 double findArea()return radius*radius*3
10、.14159;/*类定义结束类定义结束*/public class TestSimpleCircle public static void main(String args)/创建一个半径为创建一个半径为5的圆对象的圆对象 SimpleCircle myCircle;myCircle=new SimpleCircle(5);/创建一个半径为创建一个半径为1的圆对象的圆对象 SimpleCircle yourCircle;yourCircle=new SimpleCircle();System.out.println(“其半径为其半径为”+myCircle.radius+“的的圆面积为圆面积为”
11、+myCircle.findArea();第12页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程131386.7 数据域的封装数据域的封装 System.out.println(“其半径为其半径为”+yourCircle.radius+“的圆面的圆面积为积为”+yourCircle.findArea();/修改圆半径修改圆半径 yourCircle.radius=100;System.out.println(“其半径为其半径为”+yourCircle.radius+“的圆的圆面积为面积为”+yourCircle.findA
12、rea();问题:问题:它允许通过对象直接访问数据域并进行修改(如它允许通过对象直接访问数据域并进行修改(如yourCircle.radius=100),这样做使类难于维护并且不易调试。),这样做使类难于维护并且不易调试。解决:解决:使用使用private修饰符限定修饰符限定radius变量,使它成为私有的。这就称为变量,使它成为私有的。这就称为数数据域的封装据域的封装。第13页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程141386.7 数据域的封装数据域的封装产生了的新问题:客户经常需要存取、修改产生了的新问题:客户
13、经常需要存取、修改数据域,怎么办?数据域,怎么办?解决方法:解决方法:可以编写一个可以编写一个get方法返回数据值,这样客方法返回数据值,这样客户就能访问私有数据域;编写一个户就能访问私有数据域;编写一个set方法方法进行修改数据值,这样客户就能修改私有数进行修改数据值,这样客户就能修改私有数据域。据域。通俗地把通俗地把get方法称为方法称为读取器读取器或或访问器访问器,set称为称为设置器设置器或或修改器修改器。第14页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程151386.7 数据域的封装数据域的封装get方法的形
14、式:方法的形式:public ()return ;set方法的形式:方法的形式:public void()=;第15页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程161386.7 数据域的封装数据域的封装例例6.2:修改例:修改例6.1,对类中方法进行封装。,对类中方法进行封装。解答:程序如下解答:程序如下class SimpleCircle private double radius;SimpleCircle()/*构造一个其半径为构造一个其半径为1的圆对象的圆对象*/radius=1.0;/*构造一个由参数指定半径的
15、圆对象构造一个由参数指定半径的圆对象*/SimpleCircle(double newRadius)/*构造一个由参数指定半径构造一个由参数指定半径的圆对象的圆对象*/radius=newRadius;第16页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程171386.7 数据域的封装数据域的封装 /*返回私有变量返回私有变量Radius*/publiuc double getRadius()return radius;/*修改私有变量修改私有变量Radius*/public void setRadius(double n
16、ewRadius)radius=newRadius;第17页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程181386.7 数据域的封装数据域的封装 double findArea()return radius*radius*3.14159;/*类定义结束类定义结束*/public class TestSimpleCircle public static void main(String args)/创建一个半径为创建一个半径为5的圆对象的圆对象 SimpleCircle myCircle;myCircle=new Sim
17、pleCircle(5);/创建一个半径为创建一个半径为1的圆对象的圆对象 SimpleCircle yourCircle;yourCircle=new SimpleCircle();System.out.println(“其半径为其半径为”+myCircle.getRadius()+“的圆的圆面积为面积为”+myCircle.findArea();第18页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程191386.7 数据域的封装数据域的封装 System.out.println(“其半径为其半径为”+yourCircl
18、e.getRadius()+“的的圆面积为圆面积为”+yourCircle.findArea();/修改圆半径修改圆半径 yourCircle.setRadius(100);System.out.println(“其半径为其半径为”+yourCircle.getRadius()+“的的圆面积为圆面积为”+yourCircle.findArea();第19页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程20138内容摘要内容摘要6.8 永久对象和类永久对象和类6.9 给方法传递对象参数给方法传递对象参数6.10 静态变量、常
19、量和静态方法静态变量、常量和静态方法6.11 变量的作用域变量的作用域6.12 关键字关键字this6.13 对象数组对象数组6.14 类的抽象和填封装类的抽象和填封装第20页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程211386.8 永久对象和永久对象和永久类永久类我们先来回顾一下例我们先来回顾一下例6.2:它把例它把例6.1中中SimpleCircle类的数据域进行了类的数据域进行了封装封装,即限定数据域为私有的即限定数据域为私有的,并引入了修改器并引入了修改器以便客户通过它能进行修改私有数据。以便客户通过它能进行
20、修改私有数据。现在我们试想一下,如果把现在我们试想一下,如果把SimpleCircle类修类修改器去掉即没有改器去掉即没有set方法,则会有什么情况?方法,则会有什么情况?回答是:回答是:SimpleCircle类的对象的内容将永远类的对象的内容将永远不能再改变。不能再改变。此时,这种对象就称为永久对象。此时,这种对象就称为永久对象。所谓所谓永久对象永久对象就是一旦创建其内容就不能改变就是一旦创建其内容就不能改变的对象,永久对象的类称为的对象,永久对象的类称为永久类永久类。第21页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计
21、课程221386.8 永久对象和永久对象和永久类永久类例例6.3:把把SimpleCircle类改为一个永久类。类改为一个永久类。解答:在例解答:在例6.2中去掉修改器即可:中去掉修改器即可:class SimpleCircle private double radius;SimpleCircle()/*构造一个半径为构造一个半径为1的圆对象的圆对象*/radius=1.0;/*构造一个由参数指定半径的圆对象构造一个由参数指定半径的圆对象*/SimpleCircle(double newRadius)/*构造一个由参构造一个由参数指定半径的圆对象数指定半径的圆对象*/radius=newRad
22、ius;第22页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程231386.8 永久对象和永久对象和永久类永久类/*返回私有变量返回私有变量Radius*/public double getRadius()return radius;/*计算圆面积计算圆面积*/double findArea()return radius*radius*3.14159;/*类定义结束类定义结束*/第23页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程241386.8 永
23、久对象和永久对象和永久类永久类注意:一个类的所有数据域都是私有的并且没有修改器,注意:一个类的所有数据域都是私有的并且没有修改器,但,它不一定是永久类。但,它不一定是永久类。为什么呢?为什么呢?因为:客户可以通过其它类对它进行修改。因为:客户可以通过其它类对它进行修改。例如:下面的例如:下面的Student类,其所有数据都是私有的并且没类,其所有数据都是私有的并且没有修改器,但它不是永久的,因为客户可以通过有修改器,但它不是永久的,因为客户可以通过BirthDate类实现对它的修改:类实现对它的修改:public class Student private int id;private Bir
24、thDate birthDate;/*引用非永久对象引用非永久对象*/第24页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程251386.8 永久对象和永久对象和永久类永久类 public Student(int ssn,int year,int month,int day)id=ssn;birthDate=new BirthDate(year,month,day);public int getId()return id;public BirthDate getBirthDate()return birthDate;第25
25、页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程261386.8 永久对象和永久对象和永久类永久类public class BirthDate/*非永久类非永久类*/private int year;private int month;private int day;public BirthDate(int newYear,int newMonth,int newDay)year=newYear;month=newMonth;day=newDay;第26页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范
26、学院计算机科学系 java程序设计课程程序设计课程271386.8 永久对象和永久对象和永久类永久类 public void setYear(int newYear)year=newYear;/*The end of class BirthDate*/下面的代码说明下面的代码说明Student不是永久类:不是永久类:public class Test public static void main(String args)Student student=new Student(11122333,1970,5,3);BirthDate date=student.getBirthDate;date
27、.setYear(2010);第27页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程281386.8 永久对象和永久对象和永久类永久类分析:分析:Student student=new Student(11122333,1970,5,3);第28页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程291386.8 永久对象和永久对象和永久类永久类 BirthDate date=student.getBirthDate;第29页,共83页,编辑于2022年,
28、星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程301386.8 永久对象和永久对象和永久类永久类 date.setYear(2010);第30页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程311386.8 永久对象和永久对象和永久类永久类结论结论:要使一个类成为永久类要使一个类成为永久类,必须将其所有数据域必须将其所有数据域说明为私有的说明为私有的(private),并且其不含引用非永并且其不含引用非永久对象的数据域久对象的数据域.第31页,共83页,编辑于2022年,星期日楚雄
29、师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程32138内容摘要内容摘要6.8 永久对象和类永久对象和类6.9 给方法传递对象参数给方法传递对象参数6.10 静态变量、常量和静态方法静态变量、常量和静态方法6.11 变量的作用域变量的作用域6.12 关键字关键字this6.13 对象数组对象数组第32页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程331386.9 给方法传递对象参数给方法传递对象参数到目前为止到目前为止,我们已经学过如何将基本数据型我们已经学过如何将基本数据型参数和数组参数
30、传递给方法参数和数组参数传递给方法.本节将学习如何把对象传递给方法本节将学习如何把对象传递给方法.与传递数组一样与传递数组一样,传递对象实际上是传递对象传递对象实际上是传递对象的引用的引用.下面的例子把对象下面的例子把对象myCircle作为参数传递给作为参数传递给printCircle方法方法:第33页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程341386.9 给方法传递对象参数给方法传递对象参数public class TestPassObject public static void main(String ar
31、gs)SimpleCircle myCircle=new SimpleCircle(5);printCircle(myCircle);public static void printCircle(SimpleCircle c)System.out.println(“其半径为其半径为”+c.getRadius+”的圆面积是的圆面积是”+c.findArea();第34页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程351386.9 给方法传递对象参数给方法传递对象参数注意注意:Java只有一种参数传递方式只有一种参数传递方式
32、:值传递值传递(pass by value).在上面的例子中在上面的例子中,myCircle的的值传递给值传递给printCircle方法方法,这个值是这个值是SimpleCircle对象的引用值对象的引用值.第35页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程36138内容摘要内容摘要6.8 永久对象和类永久对象和类6.9 给方法传递对象参数给方法传递对象参数6.10 静态变量、常量和静态方法静态变量、常量和静态方法6.11 变量的作用域变量的作用域6.12 关键字关键字this6.13 对象数组对象数组第36页,共8
33、3页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程371386.10 静态变量、常量和静态方法静态变量、常量和静态方法在前面的例子中,在前面的例子中,SimpleCircle类中的变量类中的变量radius属于每一个对象实例,它不能被多个属于每一个对象实例,它不能被多个SimpleCircle对象共享。例如:对象共享。例如:SimpleCircle circle1=new SimpleCircle(2);SimpleCircle circle2=new SimpleCircle(5);Circle1中的中的radius与与circl
34、e2中的中的radius不是不是同一个变量,它们具有不同的存储空间,如下同一个变量,它们具有不同的存储空间,如下图所示:图所示:第37页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程381386.10 静态变量、常量和静态方法静态变量、常量和静态方法第38页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程391386.10 静态变量、常量和静态方法静态变量、常量和静态方法上述象上述象radius的这种变量称为的这种变量称为实例变量实例变量。所以,类的所以
35、,类的实例变量实例变量就是其属于类中每一个对就是其属于类中每一个对象实例,而不能被同一个类的不同对象共享的象实例,而不能被同一个类的不同对象共享的变量。变量。那么,现在我们的问题是,如何让一个类中的那么,现在我们的问题是,如何让一个类中的所有实例(对象)共享数据?所有实例(对象)共享数据?答案是:使用答案是:使用静态变量静态变量(又称为(又称为类变量类变量)。)。静态变量将变量值存储于类的公用内存,为所静态变量将变量值存储于类的公用内存,为所有对象所共享。有对象所共享。第39页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程
36、401386.10 静态变量、常量和静态方法静态变量、常量和静态方法例例6.4:修改:修改SimpleCircle类,使它能记录当类,使它能记录当前共创建了多少个对象。前共创建了多少个对象。分析:我们在分析:我们在SimpleCircle类中,定义一个静类中,定义一个静态变量态变量numbersOfObject,其初始值为其初始值为0,每,每创建一个对象就将该变量递增创建一个对象就将该变量递增1,即在构造方,即在构造方法中增加语句法中增加语句:numbersOfObject+;解答:程序如下:解答:程序如下:第40页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机
37、科学系 java程序设计课程程序设计课程411386.10 静态变量、常量和静态方法静态变量、常量和静态方法class SimpleCircle private double radius;private static int numbersOfObject=0;SimpleCircle()/*构造一个其半径为构造一个其半径为1的圆对象的圆对象*/radius=1.0;numbersOfObjec+;/*构造一个由参数指定半径的圆对象构造一个由参数指定半径的圆对象*/SimpleCircle(double newRadius)radius=newRadius;numbersOfObjec+;第
38、41页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程421386.10 静态变量、常量和静态方法静态变量、常量和静态方法 /*返回私有变量返回私有变量Radius*/public double getRadius()return radius;/*修改私有变量修改私有变量Radius*/public void setRadius(double newRadius)radius=newRadius;/*返回当前创建了的对象数目返回当前创建了的对象数目*/public static int getNumbersOfObjec(
39、)return numbersOfObjec;第42页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程431386.10 静态变量、常量和静态方法静态变量、常量和静态方法 /*计算圆面积计算圆面积*/public double findArea()return radius*radius*3.14159;/*类定义结束类定义结束*/下面使用下面使用UML图说明实例变量与静态变量的差别:图说明实例变量与静态变量的差别:图中使用到的图中使用到的UML符号:符号:+:公用的:公用的-:私有的:私有的下划线:静态变量或方法下划线:静
40、态变量或方法第43页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程441386.10 静态变量、常量和静态方法静态变量、常量和静态方法第44页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程451386.10 静态变量、常量和静态方法静态变量、常量和静态方法要声明一个常量,在静态变量声明中加上要声明一个常量,在静态变量声明中加上关键字关键字final即可。即可。例如:在前例中,我们声明常量例如:在前例中,我们声明常量PI:第45页,共83页,编辑于202
41、2年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程461386.10 静态变量、常量和静态方法静态变量、常量和静态方法class SimpleCircle private double radius;private final static double PI=3.14159;private static int numbersOfObject=0;SimpleCircle()/*构造一个其半径为构造一个其半径为1的圆对象的圆对象*/radius=1.0;numbersOfObjec+;/*构造一个由参数指定半径的圆对象构造一个由参数指定半径的圆对象
42、*/SimpleCircle(double newRadius)radius=newRadius;numbersOfObjec+;第46页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程471386.10 静态变量、常量和静态方法静态变量、常量和静态方法 /*返回私有变量返回私有变量Radius*/publiuc double getRadius()return radius;/*修改私有变量修改私有变量Radius*/public void setRadius(double newRadius)radius=newRadi
43、us;/*返回当前创建了的对象数目返回当前创建了的对象数目*/public static int getNumbersOfObjec()return numbersOfObjec;第47页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程481386.10 静态变量、常量和静态方法静态变量、常量和静态方法 /*计算圆面积计算圆面积*/public double findArea()return radius*radius*PI;/*类定义结束类定义结束*/第48页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄
44、师范学院计算机科学系 java程序设计课程程序设计课程491386.10 静态变量、常量和静态方法静态变量、常量和静态方法前面,我们讲了实例变量与静态变量,同样前面,我们讲了实例变量与静态变量,同样地,也有地,也有实例方法实例方法与与静态方法静态方法。所谓所谓静态方法静态方法就是不用创建类的实例(对象)就是不用创建类的实例(对象)就可以调用的方法。在方法声明中使用关键就可以调用的方法。在方法声明中使用关键字字static可以定义一个静态方法。可以定义一个静态方法。所谓所谓实例方法实例方法就是只能在创建类的实例(对就是只能在创建类的实例(对象)后调用的方法。在方法声明中没有关键象)后调用的方法。
45、在方法声明中没有关键字字static,则该方法即为实例方法。,则该方法即为实例方法。第49页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程501386.10 静态变量、常量和静态方法静态变量、常量和静态方法例:在前的例子中,例:在前的例子中,getNumberOfObject方法被定义为一个静态方法,其它的方法是方法被定义为一个静态方法,其它的方法是实例方法。实例方法。实例方法按下列形式调用:实例方法按下列形式调用:.();静态方法按下列形式之一调用:静态方法按下列形式之一调用:.();.();第50页,共83页,编辑于2
46、022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程511386.10 静态变量、常量和静态方法静态变量、常量和静态方法注意:静态方法和静态变量既可以在类的实注意:静态方法和静态变量既可以在类的实例方法中使用例方法中使用,也可以在类的静态方法中使用。也可以在类的静态方法中使用。但是,实例方法和实例变量只能在类的实例但是,实例方法和实例变量只能在类的实例方法中使用,而不能在类的静态方法中使用。方法中使用,而不能在类的静态方法中使用。例,下面给出的代码就是错误的:例,下面给出的代码就是错误的:public class F int i=5;static
47、int k=2;第51页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程521386.10 静态变量、常量和静态方法静态变量、常量和静态方法 public static void main(String args)int j=i;/*错误错误,因为因为i是一个实例变量是一个实例变量*/m1();/*错误错误,因为因为m1是一个实例方法是一个实例方法*/public void m1()i=i+k+m2();/*正确正确*/public static int m2(int i,int j)return(int)(Math.pow
48、(i,j);第52页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程531386.10 静态变量、常量和静态方法静态变量、常量和静态方法最后,如何判断一个变量或方法定义为实最后,如何判断一个变量或方法定义为实例的不是静态的?例的不是静态的?如果一变量或方法依赖于类的具体实例,如果一变量或方法依赖于类的具体实例,就应该定义为实例变量或实例方法;就应该定义为实例变量或实例方法;如果一变量或方法不依赖于类的具体实例,如果一变量或方法不依赖于类的具体实例,就应该定义为静态变量或静态方法。就应该定义为静态变量或静态方法。第53页,共8
49、3页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程54138内容摘要内容摘要6.8 永久对象和类永久对象和类6.9 给方法传递对象参数给方法传递对象参数6.10 静态变量、常量和静态方法静态变量、常量和静态方法6.11 变量的作用域变量的作用域6.12 关键字关键字this6.13 对象数组对象数组第54页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系 java程序设计课程程序设计课程551386.11 变量的作用域变量的作用域在方法一章中在方法一章中,我们讨论过局部变量和它们我们讨论过局部变量
50、和它们的作用域的作用域,本节将讨论所有变量的作用域本节将讨论所有变量的作用域.类的实例变量和静态变量称为类的实例变量和静态变量称为类属变量类属变量(classs variable)或或数据域数据域(data field),定义在方法内部的变量称为定义在方法内部的变量称为局部变量局部变量.不管在何处声明不管在何处声明,类属变量的作用域是整个类属变量的作用域是整个类类.类属变量和方法在类中可以按任意顺序类属变量和方法在类中可以按任意顺序声明声明,如图如图6.15(a)所示所示,但当一个数据域但当一个数据域第55页,共83页,编辑于2022年,星期日楚雄师范学院计算机科学系楚雄师范学院计算机科学系