服务高校、专业改革NIT-PRO第二部分类和对象主讲人:袁建桥类:我们可以把实现世界中同类事物抽象成对象即取出这类事物中的共有属性。(把相似的对象划归一个类)对象:该类中的一个具体实例。对象一般都有两种特征:状态(state)和行为(behavior)。软件的对象概念是由现实世界对象抽象而来。把现实世界对的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法来实现。在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。类是创建对象的模板,对象是类的实例。面象对象程序设计从程序的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种类据类型,这种数据类型就是对象类型。所以我们可以使用类名称来声明对象变量。声明对象变量之后,还不能使用对象。必须用运算符new创建对象实体之后,才能使用对象。例:将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来设计一个类Car,类中有一个方法voiddrive()。用Car这个类实例化一个具体的对象Car,调用:Car.drive()。publicclassCar{publicvoiddrive(Stringname){System.out.println(name+”汽车已经驾驶了!”);}publicstaticvoidmain(String[]args){Carc=newCar();c.drive(“奔驰”);}}类的构造方法构造方法的名字和类名相同,并且没有返回值。构造方法主要用于为类的对象定义初始化状态。不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会提供一个缺省的构造方法,也就是不带参数的构造方法。类的构造方法类中可以有一个或多个构造方法。构造方法主要是完成对象的初使化。缺省构造函数各种数据类型默认值:数值型0booleanfalsechar‘\0’对象null构造方法的重载和非构造方法的重载。关键字的作用为对象分配内存空间。引起构造方法的调用。为对象返回一个引用。变量代表对象本身。当类中有两个同名变量,一个属于类(类的成员变量)而别一个属于某个特定方法(方法中的局部变量),使用this区分成员变量和局部变量。使用this简化构造函数的调用。特殊变量this的用法关于实例方法和实例数据成员的进一步说明一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在的内存中都存在着一份拷贝。This变量允许相同的实例方法为不同的对象工作。每当调用一个实例方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据建立关联。的用法静态方法和静态变量是属于某一个类,而不是履属于类的对象。静态方法和静态变量的引用直接通过类名引用。在静态方法中不能调用非静态的方法和引用非静态的成员变量,反之则可以。可以用类的对象去调用静态的方法。定义常量,例如finaldoublePI=3.1415926;作为一种约定,在定义常量时,通常采用大写形式。final常量可以在声明的同时赋初值,也可以在构造方法中赋初值。为了节省内存,我们通常将常量声明为静态的(static)。类的继承理解继承是理解面向对象程序设计的关键。在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。在Java中,不允许多继承。方法的覆盖(override)在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖。覆病盖发生在子类与父亲之间。,提供了对父类的访问。可以使用super访问父类被子类隐藏的变量或覆盖的方法。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造方法,那么在编译的时候就会报错。多态性通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。包类的说明符方法的说明符对象的销毁(垃圾内存回收的演示)接口异常处理包为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。Java中的类库就是采用包的形式,供我们使用的。如:java.langjava.utiljava.iojava.math等等。语句必须是文件中的第一条语句。也就是说,在package语句之前,除了空白和注释之外不能有任何的语句。如果不加package语句,则指定为缺省包或无名包。包对应着文件系统的目录层次结构。在package语句中,用“.”来指明包(目录)的层次。包(package)编译并生成包语句引入包中的类。Importjava.io.File;引入整个包。Importjava.io.*;在同一包中的类可以互相引用,无需import语句。、public2、default(不加访问说明符时)类的其它修饰符1、final2、abstract、public2、protected3、default(不加访问说明符时)4、private方法的其它修饰符1、static2、final3、abstract4、native5、synchronized√√√√√√√√√√方法为了确保某个方法的行为在继承过程中保持不变,并且不能被覆盖(voerridden),可以使用final方法。为了效率上的考虑,将方法声明为final,让编译器对方法的调用进行优化。要注意的是:编译器自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确定不希望它被覆盖时,才将它声明为final。class中的private和static方法自然就是final。抽象方法和抽象类在类中没有方法体的方法,就是抽象方法。含有抽象方法的类,即为抽象类。如果一个子类没有实现抽象基类中的所有的抽象方法,则子类也成为一个抽象类。我们可以将一个没有任何抽象方法的类声为abstract,避免由这个类产生任何的对象。中的垃圾回收是自动运行的,作为Java虚拟机中的第一个优先级线程在运行,在某一个不确定的时间(内存不足)回收垃圾信息。例:classBarbge{intindex;staticintcount;Barbeg(){count++;System.out.println(count+createobject);}protectedvoidfinalize{System.out.println(index+objectcalled);}}publicstaticvoidmain(String[]args){newBarbge();newBarbge();newBarbge();newBarbge();//System.gc();}接口中只有方法的声明,没有方法的实现,接口中的方法默认为publicabstract.如果一个类要实现接口,那么这个类就需要实现接口中的所有方法。接口中定义的数据成员必须被初使化,且永久不变。类在实现接口方法时,访问权限不能低于接口方法所定义的权限。在接口中声明方法时,不能使用native、static、final、Protected、Private、synchronized等修饰符。接口一个接口可以继承另一个接口。Java中不允许类的多继承,但允许接口的多继承。内部类在一个类中定义另外一个类,这类就叫做内部类或内置类。内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类来控制内部类的可见性。当我们建立一个内部类时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的thisreference形成的,使得内部类对象可以随意的访问外部类中的所有的成员。内部类在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必必须被声明final。内部类可以声为private、protected还可以声明为abstract或final内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法。非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可以声明static成员。、在内部类中,可以随意的访问外部类的成员,这可以让我们更好的组织管理我们的代码,增强代码的可读性。2、由内部类可以用于创建适配器类,适配器类是用于实现接口的类。使用内部类来实现接口,可以更好地定位与接口关联的方法在代码中的位置。3、内部类的更多用法。结束服务高校、专业改革