所有的Java程序都是基于类的。类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。classclassname{(变量定义)(方法定义)}创建了一个新类也就意味着创建了一种新的数据类型。实例化一个类,就得到该类的一个对象。类是对象的模板,而对象是类的一个实例。将活动和属性与每一实体相关联属性员工详细资料工资结算表票据凭证收据活动计算工资支付工资支付帐单记帐银行交易会计每个部门的员工可对该部门的数据进行控制和操作对象车型:法拉利颜色:红色年份:1995活动发动停车加速类的基本形式classclassname{TypeVar1;//声明成员变量1TypeVar2;//声明成员变量2TypeVar3;//声明成员变量3TypeMethod1(Parameters){//声明方法1//方法的主体1}TypeMethod2(Parameters){//声明方法2//方法的主体2}TypeMethod3(Parameters){//声明方法3//方法的主体3}TypeMethod4(Parameters){//声明方法4//方法的主体4}}类的变量classclassname{TypeVar1;实例变量staticTypeVar2;类变量TypeMethod1(Parameters){//声明方法1//方法的主体1}TypeMethod2(Parameters){//声明方法2//方法的主体2}}类的方法classclassname{TypeVar1;//声明成员变量1TypeVar2;//声明成员变量2TypeMethod1(Parameters){//实例方法//方法的主体1}staticTypeMethod2(Parameters){//类方法//方法的主体2(只能对类变量进行操作)}}方法的重载classclassname{TypeVar1;//声明成员变量1TypeVar2;//声明成员变量2TypeVar3;//声明成员变量3TypeMethod1(Type1var4,Type1var5){//声明方法1//方法的主体1}TypeMethod1(Type2var6,Type2var7){//声明方法2//方法的主体2}TypeMethod1(Type3var8){//声明方法3//方法的主体3}}构造方法classclassname{TypeVar1;//声明成员变量1TypeVar2;//声明成员变量2classname(Parameters){//构造方法//方法的主体1}TypeMethod2(Parameters){//声明方法2//方法的主体2}}构造方法的重载classclassname{TypeVar1;//声明成员变量1TypeVar2;//声明成员变量2classname(Type1var3,Type1var4){//构造方法1//方法的主体1}classname(Type2var3){//构造方法2//方法的主体2}TypeMethod3(Parameters){//声明方法3//方法的主体3}}classA{publicstaticvoidmain(Stringargs[]){aaa=newaa(2f,4f);System.out.println(自动调用构造函数后,a=+a.a+c=+a.c);floats=a.add_ab(1f,2f);System.out.println(调用加法运算后a=+a.a+c=+a.c);}}classaa{floata,c;staticintb;aa(){a=0;c=0;}aa(floatx,floaty){a=x;c=y;}floatadd_ab(intx,inty){a=x;c=y;return(a+b);}floatadd_ab(floatx,floaty){a=x;c=y;return(a+b);}staticvoidabc(intx){b=x;}}3.5对象类是创建对象的模板,当使用一个类创建了一个对象时,可说给出了这个类的一个实例,即类的实例化。3.对象•创建对象•对象的内存模型•使用对象•引用•静态变量和静态方法的内存模型创建对象当创建一个类时,只是创建了一种新的数据类型。对象是类的一个实例。创建对象包括对象声明和分配内存两步(也可合二为一)对象声明:类名对象名表;如Studenta;分配内存空间:a=newStudent(可带参数);可合二为一:Studenta=newStudent(可带参数);•关键字new通常称为创建运算符,用于分配对象内存,并将该内存初始化为缺省值。•一旦new完成分配和初始化内存,它就将调用构造函数来执行对象初始化。classfruit(){变量的定义;方法的定义;}classFruitDemo{publicstaticvoidmain(Stringargs[]){Fruitf=newFruit(big,red);}}例3.7-使用new和默认构造方法classPeople{floatheight,weight;}classA{publicstaticvoidmain(Stringargs[]){Peoplelily;//声明lily=newPeople();//为对象分配内存,使用new和默认构造方法}}例3.8-使用new和构造方法classPoint{intx,y;Point(){x=2;y=6;System.out.println(“x=”+x+“,y=”+y);}Point(inta,intb){x=a;y=b;System.out.println(“x=”+x+“,y=”+y);}}publicclassA{publicstaticvoidmain(Stringargs[]){Pointp1,p2;p1=newPoint();p2=newpoint(3,5);}}对象的内存模型•创建对象时系统会做以下事情:•在堆区为对象的各个变量分配内存单元,并将对象的引用返回•根据构造函数完成各个变量的初始化•若使用自定义构造函数,则按该构造函数初始化各变量•若没有自定义构造函数,则初始化如下。缺省初始值•Java保证了在任何代码使用该内存之前,已至少将内存初始化为可预知的缺省值类型缺省值类型缺省值byte(byte)0char'\u0000'short(short)0float0.0Fint0double0.0Dlong0L对象引用nullbooleanfalse•举例:a.java对象的内存模型student1student1heightweightidsexClassgrade0f000false0ox23ab6声明时创建时20002x6yp130003x5yp2图3.4p1和p2的内存模型Pointp1;p1=newPoint();Pointp1=newPoint();注意:一个类可以用new运算符创建多个不同的对象,这些对象被分配不同的内存空间。以例3.8说明:Pointp1;//系统会令p1指向null。p1=newPoint();3.5.3使用对象使用运算符“.”,可以访问对象的属性和方法1.对变量的引用对象名.变量名2.对方法的引用对象名.方法名对象是引用型变量•引用:对象的别名,其工作原理类似于指针。•不要将引用看成是对象的指针。引用即是对象它既不是对象的指针,也不是对象的副本。它就是对象。•当=右边是对象时,它把其引用赋给左边,而不是建副本。•举例:pointp1=newpoint();pointp2=newpoint(6,18);p1=p2;其内存模型表示:对象是引用型变量p1ox125xyoop2oxa75618xyoxa75618yxp1p2静态变量和静态方法的内存模型静态变量和静态方法在内存中只有一个副本3.6访问权限•访问修饰符:•public(公有变量和公有方法)•友好变量和友好方法•protected(保护的变量和方法)•private(私有变量和私有方法)public访问修饰符•只有在使用public访问修饰符时,类的成员才可被同一包或不同包中的所有类访问。•也就是说,public访问修饰符可以使类的特性公用于任何类。缺省访问权限/protected访问修饰符•缺省的成员可以被同一包中的其他类访问。•protected访问修饰符允许类本身、同一包中的所有类和不同包中的子类访问。•如果希望一个成员在当前包外可见,但仅仅是成员所在类的子类直接可见,就要使用protected修饰该成员。private访问修饰符•private访问修饰符是限制性最大的一种访问修饰符。•被声明为private的成员只能被此类中的其他成员访问,不能被类外看到。•继承体系结构中最高级别的类决不会被声明为private类。高级访问控制总结1访问控制private成员缺省的成员protected成员public成员同一类中成员同一包中其他类×不同包中子类××不同包中非子类×××高级访问控制总结2publicA:所有类B:包中的类E:包中的子类C:所有子类D:类本身缺省同一类中classB1{publicinta=1;//友好性、private、protectedpublicvoidf(){System.out.println(“f”);}publicstaticvoidmain(Stringargs[]){Bb=newB();System.out.println(b.a);b.f();}}同一包中packageone;classB1{privateinta=1;//友好性、protected、publicprivatevoidf(){System.out.println(“f”);}publicstaticvoidmain(Stringargs[]){}}packageone;publicclassB2{publicstaticvoidmain(String[]args){B1b=newB1();System.out.println(b.a);b.f();}}不同包packageone;publicclassB1{privatefloatweight=10f;privatevoidf(){System.out.println(f);}}packagetwo;importone.B1;publicclassB3{publicstaticvoidmain(String[]args){B1b=newB1();System.out.println(b.a);b.f();}}不同包的继承关系中packageone;publicclassB1{privatefloatweight=10f;privatevoidf(){System.out.println(f);}}packagetwo;importone.B1;publicclassB4extendsB1{publicstaticvoidmain(String[]args){B1b=newB1();System.out.println(b.a);b.f();}}3.7继承继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个公有属性的一般类,根据该一般类再创建具有特殊性质的新类。新类继承一般类的属性和方法,并根据需要增加自己的新的属性和方法。由继承而得到的类称为子类,被继承的类称为父类(超类)。Java不支持多重继承(子类只能有一个父类)。3.7.1创建子类格式:classStuextendsPeople{……}Stu为子类,People为父类(1)在同一包中,子类自然的继承了其父类中不用private修饰的成员变量和方法。(2)在不同的包中,子类只能继承其父类中public、protected修饰的成员变