资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,四,章,类、对象和方法,回顾,循环语句,while,、,do-while,、,for,的区别是什么?,int i = 0, j = 0;,while(i4),System.out.println(*);,i+;,continue;,System.out.println(*);,j+;,i+;,*,*,*,*,*,*,*,写出运行结果,输出,本章任务,以,OO,方式实现:,YunTu,学校类,描述,YunTuSchool,中心基本信息,学生类,输出学生信息,教员类,输出教员信息,计算并显示总成绩,计算并显示平均成绩,本章任务,实现客户信息的添加和查询,实现图形生成器,实现模拟账户存取款功能,本章目标,掌握类和对象的特征,理解封装,会创建和使用对象,会定义和使用类无参和带参方法,理解变量作用域,会创建包组织,Java,工程,会添加类方法的,JavaDoc,注释,会阅读,JavaSE6,文档,使用,String,类提供的方法处理字符串,万物皆对象,世界是由什么组成的?,名胜,人,物品,动物 ,植物,身边的对象,布兰尼,朱丽叶,顾客,姓名:朱丽叶,年龄:,28,体重:,52,千克,操作:,购买商品,姓名:布兰尼,职衔:收银员,年龄:,35,体重:,60,千克,操作:,收款,打印账单,对象的特征,属性,属性,对象具有的各种特征,每个对象的每个属性都拥有特定值,例如:布兰尼和朱丽叶的体重不一样,60kg,布兰尼,属性,35,岁,收银员布兰尼,对象的特征,方法,方法,对象执行的操作,打单,收银,方法,刷卡,收银员布兰尼,对象的属性和方法,列出尼古拉斯,凯奇驾驶的这辆法拉利,F360 Spider,的属性和方法,列出小狗对象的属性和方法,属性:,品牌:法拉利,型号:,F360 Spider,颜色:黄色,价格:,380,万元,方法:,发动,停止,加速,属性:,颜色:白色,方法:,叫,跑,吃,小结,说一说教室里的对象,描述他们的属性和方法,颜色:黑色,品牌:,BENQ,投影,姓名:张三,年龄:,20,学习,类型:白炽灯,开,关,变亮,变暗,材制,:,木质,支撑物品,封装,对象同时具有属性和方法两项特性,对象的属性和方法通常被,封装,在一起,共同体现事物的特性, 二者相辅相承,不能分割,谁看见过只有“完好的零件和颜色”而不能开动的汽车?,从对象抽象出“类”,抽取出下列对象的属性和方法的共同特征,轿车,顾客,类,顾客类,轿车类,类是模子,确定对象将会拥有的特征(属性)和行为(方法),类是对象的类型,不同于,int,类型:具有方法,各种口味的球状冰淇淋,球状冰淇淋模子,小结,类和对象有什么区别呢?,类是抽象的概念,仅仅是模板,比如说:,“,人,”,对象是一个你能够看得到、摸得着的具体实体,比如:,“,小布什,”,小布什,普京,克林顿,“人”类,特征(属性),年龄,体重,行为(方法),衣,食,住,行,Java,是面向对象的语言,所有,Java,程序都以类,class,为组织单元,关键字,class,定义自定义的数据类型,public,class,HelloYuntu ,public static void,main(String args) ,System.out.println(使用Java语言理解程序逻辑);,Java,类模板,类将现实世界中的概念模拟到计算机程序中,public class,类名,/,定义属性部分,属性,1,的类型 属性,1;,属性,2,的类型 属性,2;,属性,n,的类型 属性,n;,/,定义方法部分,方法,1;,方法,2;,方法,m;,定义类,定义一个类的步骤,1,、定义类名,2,、编写类的属性,3,、编写类的方法,类示例,2-1,云图智联在不同培训中心(北京中心,九江中心等),你会感受到相同的环境和教学氛围,用类的思想输出Yuntu中心信息,YuntuSchool类,属性:,全称,教室数目,机房数目,方法:,展示中心信息,演示示例1:使用Eclipse创建YuntuSchool类框架,类示例,2-2,public class YuntuSchool ,/,定义,云图智联,中心的属性,String schoolName;,/,中心的全称,int classNum;,/,教室的数目,int labNum;,/,机房的数目,/,定义,云图智联,中心的方法,public void showCenter() ,return schoolName + ,培训,Yuntu,学员,+ n + ,配备:,+ classNum + ,教, + labNum + ,机,;,定义类的,showCenter(),方法,,用于输出类相关的信息,成员变量,常见错误,public class .Book ,String bookName;,String authorName;,int pageNum;,boolean isAvailable;,类命名规则:,1,、不能使用,Java,关键字,2,、首字母可以为字母,也可以是“,_”,或,“,$,”,(,建议不要这样,),3,、不能包含空格或“,.”,号,代码错误,如何创建和使用对象,使用对象的步骤:,使用,new,创建类的一个对象,使用对象:使用,“,.,”,进行以下操作,给类的属性赋值:对象名,.,属性,调用类的方法:对象名,.,方法名,(),YuntuSchool,center,=,new,YuntuSchool();,center,.schoolName = ,北京中心,; /,给属性赋值,center,.showCenter(); /,调用类的方法,该方法中的操作将被执行,public class InitialYuntuSchool ,public static void main(String args),YuntuSchool center =,new,YuntuSchool();,System.out.println(center,.showCenter(),);,center.schoolName = 北京中心;,center.classNum = 10;,center.labNum = 10;,System.out.println(center,.showCenter(),);,创建和使用对象示例,创建“北京中心”对象,演示示例,2,:创建和使用对象,说一说看到什么效果?,综合案例,编写学生类,输出学生相关信息,编写教员类,输出教员相关信息,学生类,属性:,姓名,年龄,参加的课程,兴趣,方法:,显示学员个人信息,教员类,属性:,姓名,专业方向,教授的课程,教龄,方法:,显示教员个人信息,演示示例,3,:创建和使用类和对象,面向对象(,OO,)的优点,便于程序模拟现实世界中的实体,用,“,类,”,表示实体的特征和行为,隐藏细节,对象的行为和属性被封装在类中,外界通过调用类的方法来获得,不需关注内部细节如何实现,可重用,可以通过类的模板,创建多个类的对象,数据类型总结,int,double,char,String,使用class定义的类型,Student,Teacher,YuntuSchool,数组,基本数据类型,引用数据类型,类的方法,写出狮子对象的,“,跑,”,方法,写出狮子对象的,“,叫,”,方法,电动玩具狮子,属性:,颜色:黄色,行为:,跑,叫,按此按钮,,狮子开始跑,类的方法示例,public class,AutoLion ,String color = ,黄色,;,public,void,run(),System.out.println(,正在以,0.1,米,/,秒的速度向前奔跑,);,public,String,bark(),String sound = ,吼, ;,return,sound;,AutoLion,类代码实现,方法名称,方法体,返回类型,如何定义类的方法,类的方法定义类的某种行为(或功能),方法的定义,方法的名称,方法的主体,方法返回的数据类型,定义类的方法,public,返回值类型 方法名,() ,/,这里编写方法的主体,步骤一:定义方法名以及返回值,步骤二:编写方法体,方法的命名,如何给方法起名字?,必须以字母、,_,或,开头,可以包括数字,但不能以它开头,遵循的命名规范,通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写,其后单词首字母大写,方法的返回值,两种情况,如果方法具有返回值,方法中必须使用关键字,return,返回该值,返回类型为该返回值的类型,如果方法没有返回值,返回类型为,void,public class Student,String name =,张三,;,public,void,getName(),return,name;,返回类型要匹配,return,表达式;,编译错误,常见错误,2-1,public class YuntuSchool,public static,void,main(String args),return,云图智联北京中心! ;,返回类型是,void,方法中不能有返回值,常见错误,2-2,public class Student,public,double,getInfo(),double,weight = 95.5;,double,height = 1.69;,return,weight, height;,方法至多可以返回一个值,不能返回多个值,方法调用,方法是个,“,黑匣子,”,,完成某个特定的应用程序功能,并返回结果,方法调用:执行方法中包含的语句,对象名,.,方法名(),;,小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作,演示示例,1,:演示运行效果,方法调用,public class,AutoLion ,String color = 黄色;,public void,run() /方法1:跑,System.out.println(,正在以0.1米/秒的速度向前奔跑。);,public,String bark() /方法2:叫,String sound = 吼 ;,return,sound;,public,String getColor() /方法3:获得颜色属性,return,color;,public,String,showLion(), /方法4:描述狮子特性,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(),方法中,调用类的方法,演示示例,2,:设置断点演示方法调用执行过程,方法调用小结,方法之间允许相互调用,不需要知道方法的具体实现,提高了效率,情况,举例,1,、类,Student,的方法,a(),调用,Student,类的方法,b(),,直接调用,public void,a(),b(); /,调用,b(),2,、类,Student,的方法,a(),调用类,Teacher,的方法,b(),,先创建类对象,然后使用“,.”,调用,public void,a(),Teacher t =,new,Teacher();,t.b(); /,调用,Teacher,类的,b(),变量作用域,3-1,public class AutoLion ,String color = 黄色;,public void run() /方法1:跑,System.out.println(,正在以0.1米/秒的速度向前奔跑。);,public String bark() /方法2:叫,String sound = 吼 ;,return sound;,public String getColor() /方法3:获得颜色属性,return color ;,public String,showLion(), /方法4:输出类的描述信息,return 这是一个 + getColor() + 的玩具狮子!叫声是 + sound ;,可以调用吗?,演示示例,3,:变量作用域,变量作用域,3-2,变量声明的位置决定变量作用域,变量作用域确定可在程序中按变量名访问该变量的区域,for,(int i = 0, a = 0; i 4; i+),a+;,System.out.println(a);,a,的作用域仅在,for,循环中,代码错误,变量作用域,3-3,变量,1,类型 变量,1,;,变量,2,类型 变量,2,;,变量,3,类型 变量,3,;,public,返回类型 方法,1(),变量,4,类型 变量,4;,public,返回类型 方法,2(),变量,5,类型 变量,5,;,public class AutoLion,AutoLion,类的方法,别的类的方法,谁能使用这些变量?,方法,1,方法,2,成员变量,局部变量,局部变量,方法调用案例,编写成绩计算类(,ScoreCalc,),编写测试类,成绩计算类,属性:,3,门成绩,(,Java,、,C#,、,DB,),方法:,计算平均成绩,显示平均成绩,计算总成绩,显示总成绩,演示示例,4,:方法调用,小结,编写手机类(,Phone,):它可以下载音乐,可以播放这些音乐,可以进行充电,编写电池类(,Cell,):自动续电,编写测试类(,Test,),手机类,行为:,播放下载的音乐,下载,充电,电池类,属性:,品牌,行为:,续电,演示示例,5,:演示效果,为什么要用带参数的方法,ScoreCalc,类 和,Test,类,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);,一次还可以接受,如果,还要再执行这个功能,,难道还要重复再写?,calcDiffTime,calcTotalScore(),ScoreCalc,showTotalScore(),calcAvg(),showAvg(),main() /,程序入口,/,计算并输出总成绩,/,计算并输出平均分,Test,调用,调用,类的方法实现某个特定的功能,,别的类不需要知道它如何实现!,知道了实现此功能的类和它的方法名,,就可以直接调用了,不用重复写代码!,面向对象(,OO,)思想,工作原理,新鲜桃汁,新鲜苹果汁,新鲜梨汁,输出三种果汁,如何使用带参数的方法,3-1,、,定义带参数的方法,调用,带参数的方法,public class Zhazhi,public String zhazhi (,String fruit,) ,String juice = fruit + ,汁,;,return juice;,/*,调用,zhazhi,方法*,/,Zhazhi myZhazhi = new Zhazhi();,String myFruit = ,苹果,;,String myJuice =,myZhazhi.zhazhi(myFruit);,System.out.println(myJuice);,参数列表:,(,数据类型 参数,1,,数据类型 参数,2),调用方法,传递的参数要与参数列表一一对应,如何使用带参数的方法,3-1,如何使用带参数的方法,3-2,返回类型,(),/,方法的主体,该方法允许被访问调用的权限范围,方法返回值的类型,public class StudentsBiz ,String names = new String30;,public void addName(String name),/,增加学生姓名,public void showNames (),/,显示全部学生姓名,传送给方法的形参列表,一个形式参数,没有返回值,如何使用带参数的方法,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,),实参列表,演示示例,1,:带一个参数的方法,设计方法,通过传递三个参数(开始位置、结束位置,查找的姓名)来实现,带,多,个参数的方法,2-1,2,、指定查找区间,查找学生姓名并显示,public boolean searchName,(int start,int end,String name),boolean find = false; / 是否找到标识,/ 指定区间数组中,查找姓名,for(int i=start;i=end;i+),if(namesi.equals(name),find=true;,break;,return find;,返回值类型,带有三个形参,返回结果:,boolean,类型,带,多,个参数的方法,2,-2,if(st.searchName(,s,e,name,),System.out.println(找到了!);,else,System.out.println(没找到该学生!);,传递三个实参,演示示例,3,:带多个参数的方法,/,方法定义,public void addName(String name),/,方法体,/,方法调用,对象名,.addName(String,张三,),;,调用方法时不能指定实参类型!,常见错误,4-1,对象名,.addName(,张三,),;,/,方法定义,public boolean searchName(int start ,int end ,String name),/,方法体,/,方法调用,String s=,开始,;,int e=3;,String name=,张三,;,boolean flag=,对象名,. searchName(s ,e ,name);,形参和实参数据类型不一致,!,常见错误,4-2,/,方法定义,public boolean searchName(int start,int end,String name),/,方法体,/,方法调用,int s=1;,int e=3;,boolean flag=,对象名,.searchName(s,e);,形参和实参数量不一致,!,常见错误,4-3,/,方法定义,public boolean searchName(int start,int end,String name),/,方法体,/,方法调用,int s=1;,int e=3;,String name=,张三,;,对象名,.searchName(s,e,name);,调用方法后没有对返回值作任何处理,!,常见错误,4-4,使用,Arrays,类提供的,sort(),方法实现,定义一个独立的方法来实现姓名排序,该方法的返回值为数组类型,数组类型的方法返回值,2,-1,1,、编写方法,实现学生的姓名排序,public class StudentsBiz ,String, names = new String5; / 学生姓名数组,public void inputNames(),/接收用户输入的5个学生姓名,存放于names中,/字符串数组作为返回值,public,String,getNames(),Arrays.sort(names);,return names;,返回字符串数组,public class TestSort ,public static void main(String, args) ,StudentsBiz st = new StudentsBiz();,st.inputNames();,String, namesbysort =st.getNames();,System.out.println(*排序后*);,for(int i =0;i namesbysort.length;i+),if(namesbysort i!=null),System.out.print(namesbysort i+t);,数组类型的方法返回值,2-2,调用方法,返回结果,处理返回结果,演示示例,4,:数组类型的方法返回值,定义学生类,添加属性:三门课的成绩,定义学生成绩计算类,添加方法,传递对象参数,定义测试类,对象类型的参数,3,-1,2,、编写学生成绩计算类,计算学生平均分,public class Students ,/定义三门课成绩属性,float,java,=0;,float,database,=0;,float,html,=0;,三门课成绩,public class Score ,/计算平均分,对象作为参数,public float getAvg(,Students,stu,),float avg=0;,avg=(stu.java +stu.database +stu.html )/3;,return avg;,对象类型的参数,3-2,返回结果,对象类型的参数,public class TestScore ,public static void main(String args) ,Students stu=new Students();,Score sc=new Score();,float avg=0;,stu.java=80;,stu.database=95;,stu.html=77;,avg=sc.getAvg(stu);,System.out.println(该学生的平均分为:+avg);,调用方法,传递参数,返回结果,演示示例,5,:对象类型的参数,对象类型的参数,3-3,public class TestScore ,public static void main(String args) ,Students stu=new Students();,Score sc=new Score();,float avg=0;,stu.java=80;,stu.database=95;,stu.html=77;,avg=sc.getAvg(stu);,System.out.println(该学生的平均分为:+avg);,public class Score ,/计算平均分,对象作为参数,public float getAvg(,Students,stu,)float avg=0;,avg=(stu.java +stu.database,+stu.html )/3;,return avg;,main:stu,0x2a486c,0.0,0.0,0.0,0,main:avg,80,95,77,84.0,getAvg:stu,0x2a486c,0,getAvg:avg,84.0,省略内存分配,内存分配图,Students,类中定义身高属性,Height,类中定义方法,传递学生对象数组,求平均身高,测试类调用,Height,类的方法,对象数组类型的参数,2,-1,3,、计算学生的平均身高,public class Height ,public float getAvgHeight(,Students, stu,),float avgHeight=0;,float all=0;/所有学生的总身高,int count=0;/学生计数,for(int i=0;,istu.length;,i+),if(stui.height,!=,0),all=all+stui.height;,count+;,avgHeight=all/count;,return avgHeight,;,对象数组作为参数,public class TestHeight,public static void main(String, args) ,Students, stu = new Students5;,Height h=new Height();,float avgheight=h.getAvgHeight(stu);,System.out.println(平均身高,:,+avgheight+cm);,调用方法,传递对象数组,对象数组类型的参数,2-2,演示示例,6,:对象数组类型的参数,什么是类?,什么是对象?,类和对象的区别是什么?,如何定义一个类、类的属性和方法?,如何创建类的对象?,定义类的方法的步骤是什么?,类中的一个方法如何调用类的另一个方法?,类中的一个方法如何调用另一个类的方法?,先把其中一个类的对象,new,出来,然后通过对象名,.,方法名(),总结,总结,形式参数和实际参数有什么区别?,调用带参方法是有哪些注意事项?,基本数据类型和引用数据类型作为方法参数,在传递时有什么不同之处?,public class TestScore ,public static void main(String args) ,Students stu=new Students();,Score sc=new Score();,float avg=0;,stu.java=80;,stu.database=95;,stu.html=77;,avg=sc.getAvg(stu);,System.out.println(该学生的平均分为:+avg);,public class Score ,/计算平均分,对象作为参数,public float getAvg(,Students,stu,)float avg=0;,avg=(stu.java +stu.database,+stu.html )/3;,return avg;,main:stu,0x2a486c,0.0,0.0,0.0,0,main:avg,80,95,77,84.0,getAvg:stu,0x2a486c,0,getAvg:avg,84.0,省略内存分配,
展开阅读全文