1、面向对象编程 (成员变量、成员方法、构造方法、重载方法),本章学习指引:,成员变量(成员方法) 构造方法 方法重载,Java中的成员变量,实例变量(对象变量),类变量(静态变量),一、成员变量,成员变量存放位置:在类的内部并位于方法体之外 作用域:整个类 class VariableOfFamilyint i;boolean flag;int aa()float j;return 5; ,如何区分成员变量的两种形式-通过static关键字来区分static 类型 变量名,class Aint i;static float j; ,注意:成员方法类似于成员变量的两种形式区分 static返回值类
2、型 方法名(参数表) 语句体 返回值类型:有参返回(int、float、double等等) 无参返回(void),实例变量与类变量的访问,举例 class VerifyConstantint i;static float j; public static void main(Stringargs)/System.out.print(i);VerifyConstant vc=new VerifyConstant();System.out.println(vc.i+“n“+vc.j); System.out.println(“j=“+j);System.out.println(“j=“+ Veri
3、fyConstant .j); ,结论,实例变量是属于对象的,在类方法中,必须通过对象访问。类变量是属于类的。在同一个类中可以直接访问,在其他类中,可以通过对象访问或通过类名访问。,注意:成员方法的访问类似于成员变量,在实例方法中可以直接访问实例变量,class VerifyConstantint i;static float j; void aa()i=i+1;j=j+1; static void bb()VerifyConstant vc=new VerifyConstant();vc.aa();vc.i=vc.i+1;j=j+1; System.out.print(vc.i); publ
4、ic static void main(Stringargs)bb(); ,例:读出下列程序的运行结果,class Companystatic String name,city; public class OurCompanypublic static void main(Stringargs)Company c1=new Company();c1.name=“交通公司“;c1.city=“上海“;Company c2=new Company();c2.name=“电力公司“;c2.city=“北京“;System.out.println(c1.name+“:“+c1.city); ,注意:
5、类变量是属于类的,属于类中所有对象,类变量被保存在该类内存区的公共存储单元中。类变量不会因为对象的存在而存在。 实例变量是属于对象的,与具体对象相关联,只有对象被创建了,该对象访问的变量才会存在于存储单元中。 类变量的值会随着最后一个对象的改变而改变,而对象变量的值的改变只与具体的对象有关,问题:指出下列类中成员变量和成员方法的具体形式,class Judgeint i;static float j;final static double k=26.7789;void aa()System.out.print(“Welcome!”);static int bb(int p)return 6;p
6、ublic static void main(Stringargs) ,课堂练习,编写一个Java Application程序,该程序能计算出清华大学出版社某本书自从发行以来的销售总额。,要求输出的结果如下:,出版社:清华大学出版社 书名:Java程序设计 单价:23.5元 发行日期:2005年7月 已售数量:3000本 销售总额: 元 出版社:清华大学出版社 书名:.NET程序设计 单价:21.6元 发行日期:2007年12月 已售数量:3500本 销售总额: 元,class Book static String bookconcern =“清华大学出版社“;String bookname,
7、publishtime;float bookprice; long booknumber;double saleAmount()return booknumber*bookprice; class MyBook public static void main(Stringargs)Book book1=new Book (); book1.bookname=“Java程序设计“;book1.publishtime=“2005年7月“; book1.bookprice=23.5f; book1.booknumber=3000L; System.out.println(“出版社:“+Book.bo
8、okconcern+“n书名:“+book1.bookname+“n单价:“+book1.bookprice+“元n发行日期:“+book1.publishtime+“n已售数量:“+book1.booknumber+“本n销售总额:“+book1.saleAmount(); /请试着从命令行输入bookprice、bookname等的值,二、构造方法,1.概念及特点 又称构造函数、构造器 构造函数是类的一种特殊方法,它的特殊性主要体现在如下的几个方面: (1)构造函数的方法名与类名相同。 (2)构造函数没有返回类型。 (3)构造函数的主要作用是完成对类的对象的初始化工作。 (4)构造函数不能
9、由编程人员显式地直接调用。 (5)在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。,例:为Book类创建构造函数(要求通过构造函数完成书名和书价的初始化),class Book static String bookconcern =“清华大学出版社“;String bookname,publishtime;float bookprice; long booknumber;double saleAmount()return booknumber*bookprice; ,Book(String bn,float bp)bookname=bn;bookprice=bp; ,如
10、何调用构造函数?,class MyBook public static void main(Stringargs)Book book1=new Book (“Java程序设计“, 23.5f); book1.publishtime=“2005年7月“;book1.booknumber=3000L; System.out.println(“出版社:“+Book.bookconcern+“n书名:“+book1.bookname+“n单价:“+book1.bookprice+“元n发行日期:“+book1.publishtime+“n已售数量:“+book1.booknumber+“本n销售总额:
11、“+book1.saleAmount();,这条语句自动调用Book类中带两个参数的构造函数,2.构造函方法的特点 (1)构造函数和类具有相同的名字。 (2)一个类可以有多个构造函数。 (3)构造函数可以有0个、1个或多个参数。 (4)构造函数没有返回值。 (5)构造函数总是和new运算符一起被调用。,3.构造方法的作用 (1)对象初始化 (2)引入更多的灵活度(变量赋值或更复杂的操作) (3)Java中可以不定义构造函数 - Java中可以不定义构造函数,此时系统会自动为该系统生成一个默认的构造函数。这个构造函数的名字与类名相同,它没有任何形式参数,也不完成任何操作。,课堂练习一:,请为Sq
12、uare类创建一个构造函数,该函数能够在对象创建时,自动完成边长的初始化工作。并设计一个Java Application程序,能输出边长为5.5的正方形的周长。 class Square double length;double area()return length*length;double circum()return 4*length; ,程序如下:,class Square double length;Square(double len)length=len;double area()return length*length;double circum()return 4*lengt
13、h; ,或: Square(double length) this.length=length; ,class ComputeArea public static void main(Stringargs)Square s=new Square(5.5);System.out.print(“周长为”+s.circum(); ,课堂练习二:,完成第二次实验报告,三、方法重载,1、概念 类对自身已有的同名方法的重新定义,一般同名方法通过形参来区分,重载方法必须满足以下条件:-方法名相同-方法的参数类型、个数、顺序至少有一项不同 -方法的返回类型可以不相同 -方法的修饰符可以不相同,例:以下sum方
14、法为重载的方法,class Calculateint sum(int i,int j)return i+j;float sum(float i,float j,float k)return i+j+k;double sum(double i,double j,double k,double t)return i+j+k+t; ,2、构造函数的重载 重载条件 (1)满足构造函数的定义 (2)方法名相同 (3)方法的参数类型、个数、顺序至少有一项不同,例:以下Calculate方法为重载的构造方法,class CalculateCalculate(int i,int j)Calculate(float i,float j,float k)Calculate (double i,double j,double k,double t) ,