资源描述
本章目标,掌握类和对象理解封装会创建和使用对象,1/39,万物皆对象,世界是由什么组成的?,分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地进行分类,2/39,身边的对象,张浩,李明,收银员 员工号10001 姓名李明 部门财务部 操作: 收款 打印账单,顾客姓名张浩年龄20体重60kg 操作: 购买商品,3/40,3/39,对象的特征属性,属性对象具有的各种特征每个对象的每个属性都拥有特定值例如:张浩和李明的年龄、姓名不一样,20岁,张浩,属性,60kg,顾客张浩,4/39,对象的特征方法,方法对象执行的操作对象:用来描述客观事物的一个实体,由一组属性和方法构成,打印账单,方法,刷卡,收银员李明,5/40,收银,5/39,对象的属性和方法,列出尼古拉斯凯奇驾驶的这辆法拉利F360 Spider的属性和方法列出小狗对象的属性和方法,属性: 品牌:法拉利 型号:F360 Spider 颜色:黄色 价格:380万元方法: 发动 停止 加速,属性: 颜色:白色方法: 叫 跑 吃,6/40,提问,6/39,封装,对象同时具有属性和方法两项特性对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,不能分割,一辆汽车,有完好的零件和特定的颜色还应具备开动、刹车等方法行为,7/39,小结,说一说教室里的对象描述他们的属性和方法,颜色:黑色品牌:BENQ投影,姓名:张三年龄:20学习,类型:白炽灯开关变亮变暗,材制: 木质支撑物品,提问,8/40,8/39,从对象抽象出“类”,轿车,抽取出下列对象的共同特征(属性和方法),问题,顾客,9/39,类,顾客类轿车类 ,类是模子,定义对象将会拥有的特征(属性)和行为(方法),类是对象的类型不同于int类型:具有方法,各种口味的球状冰淇淋,10/40,10/39,类和对象的关系,类是抽象的概念,仅仅是模板比如说:“人”对象是一个你能够看得到、摸得着的具体实体,小布什,普京,克林顿,11/39,Java 是面向对象的语言,所有Java程序都以类class为组织单元关键字class定义自定义的数据类型,public class HelloWorld public static void main(String args)System.out.println(Hello World!);,12/40,类的基本框架,12/39,Java类模板,类将现实世界中的概念模拟到计算机程序中,public class 类名 /定义属性部分 属性1的类型 属性1; 属性2的类型 属性2; 属性n的类型 属性n; /定义方法部分 方法1; 方法2; 方法m;,语法,13/39,定义类,定义一个类的步骤,14/39,public class School /定义属性String schoolName;/学校名称int classNumber;/教室数目int labNumber;/机房数目/定义方法public void showSchool()System.out.println(schoolName + classNumber + labNumber );,15/39,如何创建和使用对象,使用对象的步骤创建对象类名 对象名 = new 类名();引用对象成员:使用“.”进行以下操作引用类的属性:对象名.属性引用类的方法:对象名.方法名(),School mySchool = new School();,mySchool.name = “西南交大; /给name属性赋值mySchool.showSchool(); /调用showCenter()方法,语法,语法,16/39,创建和使用对象示例,一个景区根据游人的年龄收取不同价格的门票。请编写游人类,根据年龄段决定能够购买的门票价格并输出,问题,分析,17/40,17/39,创建和使用对象示例,18/39,19/39,创建和使用对象示例,小结,类和对象的关系?如何创建和使用对象?,提问,经验,利用MyEclipse自动提示功能,20/39,面向对象(OO)的优点,21/39,总结,对象是用来描述客观事物的一个实体类定义了对象将会拥有的特征(属性)和行为(方法)类是对象的类型,对象是类的实例使用类的步骤,22/39,本章目标,会定义和使用类的方法理解变量作用域会添加JavaDoc注释,23/38,类的方法,写出狮子对象的“跑”方法、 “叫”方法,电动玩具狮子属性:颜色:黄色行为:跑叫,按此按钮,狮子开始叫,按此按钮,狮子开始跑,问题,24/38,类的方法示例,AutoLion类代码实现,public class AutoLion String color = 黄色; public void run() System.out.println(正在以0.1米/秒的速度向前奔跑); public String bark() String sound = 大声吼叫 ; return sound; ,方法体,返回值类型,方法名称,示例,25/38,如何定义类的方法,类的方法定义类的某种行为(或功能),定义类的方法,public 返回值类型 方法名() /这里编写方法的主体,步骤一:定义方法名以及返回值类型,步骤二:编写方法体,语法,26/38,方法的返回值,两种情况如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该返回值的类型如果方法没有返回值,返回值类型为void,public class Student String name = 张三; public String getName() return name; /,return 表达式;,作用: 跳出方法、返回结果,语法,27/38,public class Student String name = 张三; public void getName() /,方法调用,方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果方法调用:执行方法中包含的语句,对象名.方法名();,小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作,语法,问题,28/38,方法调用,public class AutoLion String color = 黄色; /颜色 /*跑*/ public void run() System.out.println(正在以0.1米/秒的速度向前奔跑。); /*叫*/ public String bark() String sound = 大声吼叫 ; return sound; /*获得颜色*/ public String getColor() return color; /*显示狮子特性*/ public String showLion() return 这是一个 + getColor() + 的玩具狮子!; ,public class TestLion public static void main(String args) AutoLion lion = new AutoLion(); System.out.println(lion.showLion(); lion.run(); System.out.println(lion.bark(); ,在类的方法中调用该类另一个方法,在main()方法中调用类的方法,29/38,方法调用小结,方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率,30/38,public class Student1 public void showInfo() return 我是一名学生; ,方法的返回值类型为void,方法中不能有return 返回值!,常见错误4-1,代码阅读,31/38,注意,public class Student2 public double getInfo() double weight = 95.5; double height = 1.69; return weight, height; ,方法不能返回多个值!,常见错误4-2,代码阅读,32/38,注意,public class Student3 public String showInfo() return 我是一名学生;public double getInfo() double weight = 95.5; double height = 1.69; return weight; ,多个方法不能相互嵌套定义!,常见错误4-3,public class Student3 public String showInfo() return 我是一名学生;public double getInfo() double weight = 95.5; double height = 1.69; return weight;,代码阅读,33/38,注意,public class Student4 int age = 20;if(age 20) System.out.println(年龄不符合入学要求!); public void showInfo() return 我是一名学生;,不能在方法外部直接写程序逻辑代码!,常见错误4-4,代码阅读,34/38,注意,本章目标,会定义和使用类的方法理解变量作用域会添加JavaDoc注释,35/38,成员变量和局部变量2-1,变量声明的位置决定变量作用域变量作用域确定可在程序中按变量名访问该变量的区域,/for(int a = 0; a 4; a+) System.out.println (hello );System.out.println ( a );/,代码错误,a的作用域仅在for循环中,36/38,成员变量和局部变量2-2,谁能使用这些变量?,37/38,变量1类型 变量1; 变量2类型 变量2;变量3类型 变量3;,public 返回类型 方法1() 变量4类型 变量4;public 返回类型 方法2() 变量5类型 变量5; ,public class AutoLion,AutoLion类的方法,其他类的方法,方法1,方法2,成员变量,局部变量,局部变量,问题,成员变量和局部变量的区别,作用域不同局部变量的作用域仅限于定义它的方法成员变量的作用域在整个类内部都是可见的初始值不同Java会给成员变量一个初始值Java不会给局部变量赋予初始值,在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级,在同一个方法中,不允许有同名局部变量在不同的方法中,可以有同名局部变量,注意,38/38,public class Test int score1 = 88; int score2 = 98; public void calcAvg() int avg = (score1 + score2)/2; public void showAvg() System.out.println(平均分是: + avg); ,常见错误,局部变量avg的作用域仅限于calcAvg()方法,代码阅读,39/38,注意,public static void main(String args) Scanner input = new Scanner(System.in); System.out.print(请输入Java成绩:); int java = input.nextInt(); / /*计算并显示输出*/ int total = java + c + db; double avg = total / 3; System.out.print(总成绩: + total); System.out.print(n平均分: + avg);,面向对象的编程(OOP),ScoreCalc类 和 Test类,40/38,如果还要再执行这个功能,难道还要重复再写一遍?,本章目标,会定义和使用类的方法理解变量作用域会添加JavaDoc注释,41/38,JavaDoc注释,回顾学过的注释方式单行注释:/这里是单行注释多行注释:/*这里是多行注释, 可以多行*/JavaDoc注释:使用“/*”开始和“*/”结束,用来注释类、属性和方法等,/* * mySchool类 *author John *version 1.0 2016/06/21 */,描述信息,author :描述作者信息,version :描述版本信息,42/38,添加JavaDoc注释,为ScoreCalc类添加JavaDoc注释,/* * ScoreCalc类 * author 张小明 * version 2.0 2013/06/01 */public class ScoreCalc /* Java成绩 */int java;/./* * 计算总成绩 * return total */public int calcTotalScore() int total = java + c + db;return total;/.,方法的JavaDoc注释,属性的JavaDoc注释,类的JavaDoc注释,问题,43/38,如何生成JavaDoc文档,JavaDoc能够从源代码中抽取类、属性、方法等的注释,形成一个配套的API帮助文档 生成JavaDoc文档使用命令行方式生成使用MyEclipse工具生成,44/38,总结,定义类的方法必须包括以下三个部分方法的名称方法返回值的类型方法的主体类的方法调用,使用如下两种形式同一个类中的方法,直接使用“方法名()”调用不同类的方法,首先创建对象,再使用“对象名.方法名()”来调用在Java中,有成员变量和局部变量,它们的作用域各不相同JavaDoc注释以“/*”开头,以“*/”结尾,45/38,本章目标,会定义带参方法会使用带参方法会创建包组织Java工程,46/40,为什么要用带参数的方法,工作原理,新鲜桃汁,新鲜苹果汁,新鲜梨汁,输出三种果汁,47/40,如何使用带参数的方法3-1,定义带参数的方法调用带参数的方法,public class ZhazhiJi public String zhazhi ( String fruit ) String juice = fruit + 汁; return juice; ,/*调用zhazhi方法*/ZhazhiJi myZhazhiji = new ZhazhiJi();String myFruit = 苹果;String myJuice = myZhazhi.zhazhi(myFruit);System.out.println(myJuice);,参数列表:(数据类型 参数1,数据类型 参数2),调用方法,传递的参数要与参数列表一一对应,48/40,如何使用带参数的方法3-2, 返回类型 () /方法的主体,该方法允许被访问调用的权限范围,方法返回值的类型,public class StudentsBiz String names = new String30; public void addName(String name) /增加学生姓名public void showNames() /显示全部学生姓名,传送给方法的形参列表,一个形式参数,没有返回值,语法,示例,定义带参数的方法,49/40,如何使用带参数的方法3-3,public static void main(String args) StudentsBiz st = new StudentsBiz(); Scanner input = new Scanner(System.in); for(int i=0;i5;i+) System.out.print(请输入学生姓名:); String newName = input.next(); st.addName(newName); st.showNames(); ,实参的类型、数量、顺序都要与形参一一对应,先实例化对象,再使用方法,调用带参数的方法,对象名.方法名(参数1, 参数2,,参数n),实参列表,语法,示例,50/40,带多个参数的方法2-1,设计方法,通过传递三个参数(开始位置、结束位置、查找的姓名)来实现,在保存了多个学生姓名的数组中,指定查找区间,查找某个学生姓名并显示是否查找成功,问题,分析,51/40,public boolean searchName (int start,int end,String name) boolean find = false; / 是否找到标识/ 指定区间数组中,查找姓名for(int i=start-1;iend;i+) if(namesi.equals(name) find=true; break; return find;,返回值类型,带有三个形参,返回结果:boolean类型,带多个参数的方法2-2,if(st.searchName(s,e,name) System.out.println(找到了!);elseSystem.out.println(没找到该学生!);,传递三个实参,示例,52/40,/方法定义public void addName(String name) /方法体/方法调用对象名.addName(String 张三);,调用方法时不能指定实参类型!,常见错误4-1,对象名.addName(张三);,代码阅读,注意,53/40,/方法定义public boolean searchName(int start ,int end ,String name)/方法体/方法调用String s=开始;int e=3;String name=张三;boolean flag=对象名. searchName(s ,e ,name);,形参和实参数据类型不一致!,常见错误4-2,代码阅读,注意,54/40,/方法定义public boolean searchName(int start,int end,String name)/方法体/方法调用int s=1;int e=3;boolean flag= 对象名.searchName(s,e);,形参和实参数量不一致!,常见错误4-3,代码阅读,注意,55/40,/方法定义public boolean searchName(int start,int end,String name)/方法体/方法调用int s=1;int e=3;String name=张三;对象名.searchName(s,e,name);,调用方法后没有对返回值作任何处理!,常见错误4-4,代码阅读,注意,56/40,数组作为参数的方法2-1,将5位学员的决赛成绩保存在数组中设计求平均成绩、最高成绩的方法,并把数组作为参数,有5位学员参加了Java知识竞赛的决赛,输出决赛的平均成绩和最高成绩,问题,分析,57/40,public double calAvg( int scores ) int sum=0; double avg=0.0; for(int i =0;iscores.length;i+) sum+=scoresi; avg=(double)sum/scores.length; return avg;,返回值类型,数组作为参数的方法2-2,示例,public int calMax( int scores ) int max=scores0; for(int i =1;iscores.length;i+) if(maxscoresi) max=scoresi; return max; ,int scores=new int5;/保存比赛成绩 /double avgScore=st.calAvg(scores);int maxScore=st.calMax(scores);,数组参数,调用方法,58/40,对象作为参数的方法2-1,方式一:设计带四个参数(学号、姓名、年龄、成绩)的方法方式二:将学生学号、姓名、年龄、成绩封装在学生对象中,设计方法,以学生对象作为参数,在实现了增加一个学生姓名的基础上,增加学生的学号、年龄和成绩,并显示这些信息,如何实现?,问题,分析,可以将多个相关的信息封装成对象,作为参数传递,避免方法有太多的参数!,经验,59/40,class Student public int id; public String name; public int age; public int score; public void showInfo() System.out.println(id+t+name+t+age+t+score); ,学生类,对象作为参数的方法2-2,示例,public void addStudent( Student stu ) for(int i =0;istudents.length;i+) if(studentsi=null) studentsi=stu; break; ,/studentsBiz.addStudent(student1);studentsBiz.addStudent(student2);,对象参数,调用方法,60/40,本章目标,会定义带参方法会使用带参方法会创建包组织Java工程,61/40,为什么需要包,Windows树形文件系统文档分门别类,易于查找和管理使用目录解决文件同名冲突问题如何存放两个同名的类而不冲突?,问题,62/40,包,解决类的同名问题,允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件,防止命名冲突,更好的保护类、属性和方法,63/40,如何创建包,package edu.swjtu.javaclass; /声明包public class MySchool / public String toString() / ,包名,用package声明包,以分号结尾,作为Java源代码第一条语句,示例,64/40,包命名规范,包名由小写字母组成,不能以圆点开头或结尾包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名 包名后续部分依不同机构内部的规范不同而不同,package mypackage;,package net.javagroup.mypackage;,package net.javagroup.research.powerproject;,部门名,项目名,package .mypackage; ,65/40,用MyEclipse 创建包,使用MyEclipse创建包的两种方法分别创建包和类创建类的过程中创建类所在的包,66/40,包与目录的关系,创建好的包和Java源文件是如何存储的?创建包edu.swjtu.javaclass , 即创建了目录结构:eduswjtujavaclass,edu,swjtu,javaclass,MySchool.java,HelloAccp.java,问题,67/40,如何导入包,为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类,import java.util.*; /导入java.util包中所有类,关键字import并不陌生,import 包名. 类名;,1. 系统包:java.util2. 自定义包: edu.swjtu.javaclass,*: 指包中的所有类MySchool :指包中的AccpSchool类,语法,68/40,总结,带参方法定义的一般形式形参是在定义方法时对参数的称呼实参是在调用方法时传递给方法的实际的值调用带参方法时要求实参与形参要匹配创建包使用关键字package导入包使用关键字import, 返回类型 () /方法的主体,69/40,70,目录,2.1 方法重载2.2 类的访问控制2.3 构造方法2.4 类变量 2.5 应用举例,71,方法重载,方法重载一个类中名字相同的多个方法这些方法的参数必须不同,Java可通过参数列表的不同来辨别重载的方法或者参数个数不同或者参数类型不同返回值可以相同,也可以不同重载的价值在于它允许通过使用一个方法名来访问多个方法,1 方法重载,72,通过方法重载分别接收一个或几个不同数据类型的数据class MethodOverloading public void receive(int i)System.out.println(Receive one int parameter. );System.out.println(i=+i);public void receive(double d)System.out.println(Receive one double parameter. );System.out.println(d=+d);public void receive(String s)System.out.println(Receive one String parameter. );System.out.println(s=+s);,1 方法重载,方法重载 (续)例,73,public void receive(int i,int j)System.out.println(Receive two int parameters. );System.out.println(i= + i + j= + j);public void receive(int i,double d)System.out.println(Receive one int parameter and one double parameter. );System.out.println(i= + i + d= + d);public class Examp3_17 public static void main(String args)MethodOverloading m = new MethodOverloading();m.receive(2);m.receive(5.6);m.receive(3,4);m.receive(7,8.2);m.receive(Is it fun?);,1 方法重载,方法重载 (续)例,74,运行结果Receive one int parameter.i=2Receive one double parameter.d=5.6Receive two int parameters.i=3 j=4Receive one int parameter and one double parameter.i=7 d=8.2Receive one String parameter.s=Is it fun?,1 方法重载,1方法重载 (续)例 运行结果,75,目录,2.1 方法重载2.2 类的访问控制2.3 构造方法2.4 类变量 2.5 应用举例,什么是封装,面向对象三大特征之一 封装封装的概念封装的好处,封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,隐藏类的实现细节,只能通过规定方法访问数据,方便加入控制语句,方便修改实现,76/39,如何使用封装,封装的步骤,设为private,用于属性的读写,对属性值的合法性进行判断,77/39,78,类的访问控制类的访问控制只有public(公共类)及无修饰符(缺省类)两种访问权限符与访问能力之间的关系如表,2 类的访问控制,类的访问控制,79,类成员的访问控制公有(public)可以被其他任何对象访问(前提是对类成员所在的类有访问权限) 保护(protected)只可被同一类及其子类的实例对象访问私有(private)只能被这个类本身访问,在类外不可见默认(default)仅允许同一个包内的访问;又被称为“包(package)访问权限”,2 类的访问控制,类的访问控制,80,2 类的访问控制,类的访问控制(续),81,Circle类,给实例变量加上private修饰符public class Circle static double PI = 3.14159265; private int radius; public double circumference() return 2 * PI * radius; ,2 类的访问控制,类的访问控制(续)例,82,编译CircumferenceTester.javapublic class CircumferenceTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; double circum1 = c1.circumference(); double circum2 = c2.circumference(); System.out.println(Circle 1 has circumference + circum1); System.out.println(Circle 2 has circumference + circum2); ,2 类的访问控制,2.2.6 类的访问控制(续)例,83,编译时会提示出错在编译语句“c1.radius = 50;”及“c2.radius =10;”时会提示存在语法错误“radius has private access in Circle”说明由于在Circle类声明中变量radius被声明为private,因此在其它类中不能直接对radius进行存取如果要允许其它类访问radius的值,就需要在Circle类中声明相应的公有方法。通常有两类典型的方法用于访问属性值,get方法及set方法,2 类的访问控制,类的访问控制(续)例编译,84,get方法功能是取得属性变量的值get方法名以“get”开头,后面是实例变量的名字一般具有以下格式:public get() return ; 对于实例变量radius,声明其get方法如下:public int getRadius() return radius;,2 类的访问控制,类的访问控制(续)get方法,85,set方法功能是修改属性变量的值set方法名以“set”开头,后面是实例变量的名字一般具有以下格式public void set( ) = ; 声明实例变量radius的set方法如下:public void setRadius(int r) radius = r;,2 类的访问控制,类的访问控制(续)set方法,86,关键字this的使用如果形式参数名与实例变量名相同,则需要在实例变量名之前加this关键字,否则系统会将实例变量当成形式参数。在上面的set方法中,如果形式参数为radius,则需要在成员变量radius之前加上关键字this。代码如下:public void setRadius(int radius) this.radius = radius; ,2 类的访问控制,类的访问控制(续)set方法,87,目录,2.1 方法重载2.2 类的访问控制2.3 构造方法2.4 类变量 2.5 应用举例,88,构造方法,构造方法一种和类同名的特殊方法用来初始化对象Java中的每个类都有构造方法,用来初始化该类的一个新的对象没有定义构造方法的类,系统自动提供默认的构造方法,3 构造方法,89,构造方法的特点方法名与类名相同没有返回类型,修饰符void也不能有通常被声明为公有的(public)可以有任意多个参数主要作用是完成对象的初始化工作不能在程序中显式的调用在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化,构造方法(续),3 构造方法,90,系统提供的默认构造方法如果在类的声明中没有声明构造方法,则Java编译器会提供一个默认的构造方法默认的构造方法没有参数,其方法体为空使用默认的构造方法初始化对象时,如果在类声明中没有给实例变量赋初值,则对象的属性值为零或空,3 构造方法,构造方法(续)默认构造方法,91,声明一个银行帐号类及测试代码public class BankAccountString ownerName; int accountNumber; 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= + myAccount.accountNumber); System.out.println(balance= + myAccount.balance);,3 构造方法,构造方法(续)例(默认构造方法),92,运行结果ownerName=nullaccountNumber=0balance=0.0,3 构造方法,构造方法(续)例 运行结果,93,自定义构造方法与方法重载可在生成对象时给构造方法传送初始值,使用希望的值给对象初始化构造方法可以被重载,构造方法的重载和方法的重载一致一个类中有两个及以上同名的方法,但参数表不同,这种情况就被称为方法重载。在方法调用时,Java可以通过参数列表的不同来辨别应调用哪一个方法,3 构造方法,构造方法(续)自定义构造方法,94,为BankAccount声明一个有三个参数的构造方法public BankAccount(String initName, int initAccountNumber, float initBalance) ownerName = initName; accountNumber = initAccountNumber; balance = initBalance; 假设一个新帐号的初始余额可以为0,则可增加一个带有两个参数的构造方法public BankAccount(String initName, int initAccountNumber) ownerName = initName; accountNumber = initAccountNumber; balance = 0.0f; ,3 构造方法,构造方法(续)例,95,自定义无参的构造方法无参的构造方法对其子类的声明很重要。如果在一个类中不存在无参的构造方法,则要求其子类声明时必须声明构造方法,否则在子类对象的初始化时会出错,3 构造方法,构造方法(续)自定义无参构造方法,96,构建一个Bush类,有两个有参数的构造方法class Bush Bush(int i) Bush(double d) 如果写:new Bush(); 编译器将要告诉你找不到对应的构造方法说明用户在进行类声明时,如果没有声明任何构造方法,系统会赋给此类一个默认(无参)的构造方法。但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不再赋默认的构造方法,3 构造方法,构造方法(续)Bush.java,97,在例 基础上再声明一个无参的构造方法public BankAccount() ownerName = ; accountNumber = 999999; balance = 0.0f; ,3 构造方法,构造方法(续)例,98,目录,2.1 方法重载2.2 类的访问控制2.3 构造方法2.4 类变量 2.5 应用举例,99,类变量也称为静态变量,声明时需加static修饰符不管类的对象有多少,类变量只存在一份,在整个类中只有一个值类初始化的同时就被赋值适用情况类中所有对象都相同的属性经常需要共享的数据系统中用到的一些常量值引用格式.,4 类变量,100,4 类变量,101,对于一个圆类的所有对象,计算圆的面积时,都需用到的值,可在Circle类的声明中增加一个类属性PIpublic class Circle static double PI = 3.14159265; int radius; 当我们生成Circle类的实例时,在每一个实例中并没有存储PI的值,PI的值存储在类中,4 类变量,例,102,对类变量进行测试public class ClassVariableTester public static void main(String args) Circle x = new Circle(); System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); 测试结果3.141592653.141592653.143.14,例运行结果,4 类变量,103,声明一个Point类,有两个私有变量保存点坐标,一个类变量保存已有点的个数public class Point private int x; private int y; public static int pointCount=0; public Point(int x, int y) this.x = x; this.y = y; pointCount+;,4 类变量,Point.java,104,测试类class ex2_4 public static void main(String args) Point p = new Point(1,1); System.out.println(p.pointCount); Point q = new Point(2,2); System.out.println(q.pointCount); System.out.println(q.pointCount = Point.pointCount); System.out.println(Point.pointCount);,4 类变量,Point类测试,105,测试结果12true2,4 类变量,Point类测试结果,106,目录,2.1 方法重载2.2 类的访问控制2.3 构造方法2.4 类变量 2.5 应用举例,107,对银行帐户类BankAccount进行一系列修改和测试声明BankAccount类声明toString()方法声明存取款方法使用DecimalFormat类声明类方法生成特殊的实例声明类变量,应用举例,5 应用举例,108,包括状态、构造方法、get方法及set方法public class BankAccountprivate String ownerName; private int accountNumber; private float balance; public BankAccount() this(, 0, 0); public BankAccount(String initName, int initAccNum, float initBal) ownerName = initName; accountNumber = initAccNum; balance = initBal; ,5.1 声明BankAccount类,5 应用举例,109,public String getOwnerName() return ownerName; public int getAccountNumber() return accountNumber; public float getBalance() return balance; public void setOwnerName(String newName) ownerName = newName; public void setAccountNumber(int newNum) accountNumber = newNum; public void setBalance(float newBalance) balance = newBalance; ,5 应用举例,5.1 声明BankAccount类(续)BankAccount.java,110,声明测试类AccountTesterpublic class AccountTester public static void main(String args) BankAccount anAccount; anAccount = new BankAccount(ZhangLi, 100023,0); anAccount.setBalance(anAccount.getBalance() + 100); System.out.println(Here is the account: + anAccount); System.out.println(Account name: + anAccount.getOwnerName(); System.out.println(Account number: + anAccount.getAccountNumber(); System.out.println(Balance: $ + anAccount.getBalance(); ,
展开阅读全文