《java第4章 类与对象.ppt》由会员分享,可在线阅读,更多相关《java第4章 类与对象.ppt(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、java第4章类与对象4.1 类和对象类和对象类名类名学生学生属性属性/成员成员变量变量姓名姓名学号学号数学成绩数学成绩英语成绩英语成绩语文成绩语文成绩方法方法/成员成员方法方法设置成绩设置成绩求平均分求平均分显示成绩显示成绩:张同学张同学张三张三100988070setScore()average()display()类是对具有相同属性和方法的一组对象的抽象类是对具有相同属性和方法的一组对象的抽象对象是类的示例对象是类的示例3.创建对象创建对象(1)声明对象:系统只为该变量建立了一个)声明对象:系统只为该变量建立了一个引用,并未给对象分配内存空间引用,并未给对象分配内存空间类名类名 对象名;
2、对象名;Student s1,s2,s3;(2)建立对象:)建立对象:对象名对象名=new 类名类名(实参表实参表)s2=new Student(zhang,102);初始化对象初始化对象(3)初始化对象)初始化对象法法1:未显式初始化时,:未显式初始化时,java提供默认值提供默认值 见表见表4.1法法2:显式初始化,在类体内定义数据成员时:显式初始化,在类体内定义数据成员时 与与C+不同不同class StudentString name;/缺省为缺省为nullString stuNum=101;/显式赋值显式赋值Double math,english,chinese;/缺省为缺省为0法法
3、3:用构造方法初始化:用构造方法初始化4.使用对象使用对象当一个对象被创建后,就拥有了自己的数据成员和成员方法,当一个对象被创建后,就拥有了自己的数据成员和成员方法,用用.来使用对象的数据、方法来使用对象的数据、方法对象名对象名.数据成员数据成员对象名对象名.成员方法名成员方法名 Student s1,s2;s1=new Student();s2=new Student(zhang,102);s1.name=“wang”;s1.math=90;s1.setScore(90,80,70);s1.average();s1.display();例例c4_2.java 显示小狗的信息显示小狗的信息定义
4、定义dogs类类 Name、Weight和和Height三个数三个数据成员和一个名为据成员和一个名为ShowDog的成员方法。为的成员方法。为dogs类创建类创建Dane和和Setter两个对象,确定两两个对象,确定两个对象的属性后引用个对象的属性后引用ShowDog方法显示这两方法显示这两个对象。个对象。import java.awt.*;import java.applet.*;class Dogs /定义定义dogs类类 public String Name;public int Weight;public int Height;public void ShowDog(Graphics
5、g,int x,int y)g.drawString(Name:+Name,x,y);g.drawString(Weight:+Weight,x,y+20);g.drawString(Height:+Height,x,y+40);/dogs类定义毕类定义毕 public class c4_2 extends Applet public void paint(Graphics g)/创建对象创建对象 Dogs Dane;/声明声明Dane的对象的对象 Dane=new Dogs();/建建Dane对象,分配存储空间对象,分配存储空间 dogs Setter=new dogs();/声明同时建声明
6、同时建Setter对象对象 /引用对象的数据成员,引用对象的数据成员,赋值赋值 Dane.Name=Gread Dane;Dane.Weight=100;Dane.Height=23;Setter.Name=Irish Setter;Setter.Weight=20;Setter.Height=30;/引用对象的成员方法引用对象的成员方法 Dane.ShowDog(g,25,25);Setter.ShowDog(g,25,120);DogsNameWeightheightShowDog()4.2 成员方法成员方法描述对象所具有的功能和操作描述对象所具有的功能和操作 函数和方函数和方法法一个类可
7、以有多个一个类可以有多个 方法方法例:方法例:方法import java.lang.*;import java.io.*;class MyAddint add(int x,int y)int z;z=x+y;return z;public boolean cmp(double x,double y)return(xy)?true:false;public class MethodTestpublic static void main(String args)int a=3,b=4;MyAdd ma=new MyAdd();int r1=ma.add(a,b);System.out.printl
8、n(r1);boolean r2=ma.cmp(a,b);/运行结果:运行结果:7例例:类库成员方法类库成员方法absimport java.lang.Math;class MethodTest public static void main(String args)int a=-3;int b=Math.abs(a);System.out.println(b);/结果为结果为3(3)方法体中的局部变量方法体中的局部变量局部变量的可见局部变量的可见性和作用域限于性和作用域限于本方法本方法局部变量声明前局部变量声明前不应加修饰符不应加修饰符局部变量使用前局部变量使用前必须赋值必须赋值/c4_10
9、.java 局部变量及其用法。局部变量及其用法。public class c4_10 public static void main(String args)int a=2,b=3;int f=add(a,b);/调用调用add方法方法 System.out.println(f=+f);/System.out.println(z=+z);错,错,z在在add方法内,离开则被清除方法内,离开则被清除 static int add(int x,int y)/public int zz;错错,局部变量局部变量zz前不应加修饰符前不应加修饰符 int z,d;/本方法中定义的变量本方法中定义的变量z,
10、d z=x+y;/z=x+d;错,因为错,因为d还没有赋值就使用还没有赋值就使用 return z;(4)形式参数和实际参数形式参数和实际参数 c4_12_13.javapublic class c4_12_13 static void add(double x,double y)double z;z=x+y;System.out.println(z=+z);static double add1(double y1,double y2)double z;z=y1+y2+2.9;return z;public static void main(String args)int a=2,b=7;do
11、uble f1=2,f2=4,f3;add(a,b);/按按Java的类型转换规则达到形参类型的类型转换规则达到形参类型 /f3=add1(f1,f2,3.5);/错,实参与形参参数个数不一致错,实参与形参参数个数不一致 System.out.println(“a=”+a+“tb=”+b);/输出结果输出结果a2,b7值传递值传递 f3=2+add1(f1,f2);add(a,add1(f1,f2);z=9.0a=2 b=7 z=10.9引用成员方法的注意事项引用成员方法的注意事项被引用的方法与调用者是在同一类内被引用的方法与调用者是在同一类内 可直接调用可直接调用被引用的方法同调用者不同属于
12、一个类,但属于一个文件被引用的方法同调用者不同属于一个类,但属于一个文件由类的修饰符和方法的修饰符共同决定由类的修饰符和方法的修饰符共同决定被调用的是被调用的是java类库的方法类库的方法importimport java.awt.*;import java.applet.*;class Studentdouble math;double english;double chinese;private double avg()return(math+english+chinese)/3;public void disp(Graphics g,int x,int y)g.drawString(显示
13、平均成绩:显示平均成绩:+avg(),x,y);public class c4_3 extends Applet public void paint(Graphics g)Student s1=new Student();s1.math=80;s1.english=90;s1.chinese=80.5;/s1.avg();s1.disp(g,20,40);引用成员方法的注意事项引用成员方法的注意事项私有方法私有方法虽是私有方法,虽是私有方法,但本类内可以直接调用但本类内可以直接调用私有方法,类外不可以调用私有方法,类外不可以调用公有方法公有方法类外可以类外可以调用调用4.3 构造方法构造方法一
14、种特殊的方法一种特殊的方法回顾:初始化对象时回顾:初始化对象时(即初始化对象的数据成员)即初始化对象的数据成员)1.在类体内声明数据成员时在类体内声明数据成员时2.直接使用缺省值直接使用缺省值 (见(见初始化对象初始化对象)3.使用构造方法使用构造方法class StudentString name;/系统默认值为系统默认值为nullString stuNumber;double math,english,chinese;/系统默认值为系统默认值为0public Student();public Student(String mname,String mstuNumber)name=mname
15、;/构造方法内初始化构造方法内初始化stuNumber=mstuNumber;特点:特点:构造方法同类名同名构造方法同类名同名无返回值无返回值 class Dogs public int Dogs();/错 不是由程序员显式调用的,而是在创建对象的时候由系统自不是由程序员显式调用的,而是在创建对象的时候由系统自动调用的动调用的默认构造:若用户未定义构造方法,默认构造:若用户未定义构造方法,见见c4_2系统为该类定义了一个空构造系统为该类定义了一个空构造 注意:若已经定义了一个构造,则该默认构造被覆盖,如果注意:若已经定义了一个构造,则该默认构造被覆盖,如果想还适应无参的构造,自己应再写一个。想
16、还适应无参的构造,自己应再写一个。构造方法可以重载构造方法可以重载构造方法还可继承构造方法还可继承例例c4_2.java 显示小狗的信息显示小狗的信息定义定义dogs类类 Name、Weight和和Height三个数三个数据成员和一个名为据成员和一个名为ShowDog的成员方法。为的成员方法。为dogs类创建类创建Dane和和Setter两个对象,确定两两个对象,确定两个对象的属性后引用个对象的属性后引用ShowDog方法显示这两方法显示这两个对象。个对象。import java.awt.*;import java.applet.*;class Dogs public String Name;
17、public int Weight;public int Height;public void ShowDog(Graphics g,int x,int y)g.drawString(Name:+Name,x,y);g.drawString(Weight:+Weight,x,y+20);g.drawString(Height:+Height,x,y+40);public class c4_2 extends Applet public void paint(Graphics g)/创建对象创建对象 Dogs Dane;/声明声明Dane的对象的对象 Dane=new Dogs();/建建Dan
18、e对象,分配存储空间对象,分配存储空间 dogs Setter=new dogs();/声明同时建声明同时建Setter对象对象 /引用对象的数据成员,引用对象的数据成员,赋值赋值 Dane.Name=Gread Dane;Dane.Weight=100;Dane.Height=23;Setter.Name=Irish Setter;Setter.Weight=20;Setter.Height=30;/引用对象的成员方法引用对象的成员方法 Dane.ShowDog(g,25,25);Setter.ShowDog(g,25,120);DogsNameWeightheightShowDog()程序
19、中出现了构造函数么?程序中出现了构造函数么?没有!没有!但是编译也没有问题但是编译也没有问题因为系统提供了默认构造函数因为系统提供了默认构造函数返回返回class dogs /定义定义 dogs类类 public String Name;public int Weight;public int Height;public dogs(String CName,int CWeight,int CHeight)/构造方法构造方法 Name=CName;Weight=CWeight;Height=CHeight;public void ShowDog(Graphics g,int x,int y)g.
20、drawString(Name:+Name,x,y);g.drawString(Weight:+Weight,x,y+20);g.drawString(Height:+Height,x,y+40);/dogs类定义毕类定义毕 public class c4_3 extends Applet public void paint(Graphics g)dogs Dane=new dogs(Gread Dane,100,23);dogs Setter=new dogs(Irish Setter,20,30);Dane.ShowDog(g,25,25);Setter.ShowDog(g,25,120)
21、;(7)构造方法重载构造方法重载_改写改写c4_2为为c4_3public dogs(String CName)/构造重载构造重载 Name=CName;dogs Dane=new dogs(“Jack”);/使用重载构造使用重载构造public dogs()dogs Dane=new dogs();4.4 静态变量和静态方法静态变量和静态方法当一个类的多个对象需要共享一个数据时?当一个类的多个对象需要共享一个数据时?例:新生入学,创建一个学生对象,学生的总数累加1例:学生的各门成绩的总分不同,但是要标准化到100分这个总分是所有学生对象共享的1)静态变量的声明)静态变量的声明 static
22、类型类型 变量名变量名class StudentString name;int age;double score;static long totalNum;static double normalScore;.说明说明Static数据成员不属于类的任何一个具体的对象,数据成员不属于类的任何一个具体的对象,而是属于这个类的而是属于这个类的它被保存在类内存的公共存储区内(而不是某个对它被保存在类内存的公共存储区内(而不是某个对象的内存中)象的内存中)一个类的任何对象访问它,值都相同一个类的任何对象访问它,值都相同 如学生总数 新报道3个同学Student s1,s2,s3;System.out.p
23、rintln(s1.totalNum);/3System.out.println(s2.totalNum);/3System.out.println(s3.totalNum);/3引用:类名引用:类名.成员名成员名 System.out.println(Student.totalNum);该该staic数据成员的作用域仍属于该类域数据成员的作用域仍属于该类域静态数据成员的初始化静态数据成员的初始化用静态初始化器用静态初始化器class StudentString name;int age;double score;static long totalNum;static double norma
24、lScore;/静态变量初始化器静态变量初始化器 static totalNum=0;/学生总数学生总数normalScore=120;/标准化总分标准化总分 import java.lang.*;class StudentString name;int age;double score;static long totalNum;static double normalScore;static /静态变量初始化器静态变量初始化器totalNum=0;normalScore=120;public Student(String Cname)name=Cname;totalNum+;public v
25、oid setNormalScore(double ns)normalScore=ns;public void setScore(double s)score=s/normalScore;public double getScore()return score;public class StaticVarTest public static void main(String args)Student s1=new Student(chen);Student s2=new Student(zhao);s1.setScore(116);s2.setScore(120);System.out.pri
26、ntln(Stu.totalNum=+Student.totalNum);System.out.println(S1.totalNum=+s1.totalNum);System.out.println(S2.totalNum=+s2.totalNum);System.out.println(s1.name+t score=+s1.getScore();System.out.println(s2.name+t score=+s2.getScore();运行结果运行结果Student.totalNum=2S1.totalNum=2S2.totalNum=2 chen score=0.9666666
27、666666667 zhao score=1.0static /静态变量初始化器静态变量初始化器totalNum=0;normalScore=120;静态变量静态变量2)静态方法)静态方法属于整个类的类方法属于整个类的类方法用用static修饰的方法,例如:修饰的方法,例如:public static void main(args)调用方式调用方式:对象名对象名.方法名方法名 或或 类名类名.方法名方法名Student s1;s1.setNormalScore();Student.setNormalScore()适于:无需建立对象就可以直接调用的方法适于:无需建立对象就可以直接调用的方法例:M
28、ath.abs()例:Student.setNormalScore()static静态方法的使用要求静态方法的使用要求Static方法只能访问方法只能访问static数据,不能访问非数据,不能访问非static数据数据但是一般方法可以访问但是一般方法可以访问static数据数据class Student static double normalScore;int age;public static void setNormalScore(double ns)normalScore=ns;/对age=3;/age是非静态变量Static方法只能调用方法只能调用static方法方法P82 c4_3
29、.java中全是中全是static的解释的解释 而而static方法可以被非方法可以被非static方法调用方法调用Static方法不能被覆盖方法不能被覆盖即该类的子类中不能对即该类的子类中不能对static方法方法重新定义重新定义对对static静态方法的使用要求小结静态方法的使用要求小结成员变量成员变量方法方法静态变量静态变量非非static变量变量静态方法静态方法非非satic方法方法Static静态方法静态方法非非static方法方法class fint d1;static int d2;void me()static void me1()static void me2()me1();
30、/d1=34;/X static方法不能访问非static变量me();/X static方法不能访问非static方法d2=45;/class f1 extends f void me1()/X 子类不能覆盖父类的static方法4.5 用用final修饰的最终数据成员修饰的最终数据成员final修饰的数据成员修饰的数据成员自定义常量自定义常量final数据成员初始化的方法数据成员初始化的方法1.声明时初始化2.在构造方法中初始化除此外,其它地方不能再给除此外,其它地方不能再给final常量赋值和更改值常量赋值和更改值格式:final 数据类型 数据成员=初值 Class StudentString name;final double pass1=60;/及格分定为及格分定为60,这个不会变的,声明时初始化,这个不会变的,声明时初始化final double full;/满分满分public Student(Stinf mname)name=mName;full=100;/在构造方法中初始化在构造方法中初始化例:例:C4_9.java作业作业见提供的附件见提供的附件课程公共邮箱课程公共邮箱密码密码20102010此此课件下件下载可自行可自行编辑修改,修改,仅供参考!供参考!感感谢您的支持,我您的支持,我们努力做得更好!努力做得更好!谢谢!