现在的位置: 首页 > 综合 > 正文

Java面向对象学习

2014年03月13日 ⁄ 综合 ⁄ 共 3396字 ⁄ 字号 评论关闭

在一个文件中可以定义数个类,但只能有一个类被设置为public,文件名称主文件名必须与这个public的类同名。

在定义类时,有一个基本原则是:信最小化公开。就是尽量通过方法来操作对象,而不直接存取对象内部的域成员。

静态方法中没有this参考名称。

Java在使用到类时才会加载类至程序中。如果在加载类时,希望先执行一些类的初始化动作,可以使用static定义一个静态区块,并在当中编写载入时的初始化动作。

返回值类型不可用做方法重载的区别根据。

编译器在处理重载方法、装箱问题和不定长度参数时,会一句下面的顺序寻找符合的方法:

    1. 寻找在还没有装箱动作前可以符合参数个数与类型的方法

    2. 尝试装箱动作后可以符合参数个数与类型的方法

    3. 尝试设有不定长度参数并可以符合的方法

    4. 编译器找不到合适的方法,报告编译器错误

不定长度参数: 

    publc class mathtool

    {

        public static int sum(int ...  nums)

        {

            int  sum=0;

            for(int num :nums)

            {

                sum += sum;

            }

            return sum;

        }

    }

    实际上nums是一个数组。(即int[] nums)

    在方法上使用不定长度参数时,记得必须声明参数必须设置在参数行的最后一个。

    例如:

             public  void someMethod(int arg1 , int  arg2 , int...  vargs);

            public  void someMethod(int...  vargs,int arg1,int arg2);        //不合法

    无法使用两个以上不定长度参数。

 

垃圾收集: 

    在Java中并没有析构函数,但有finalize()方法,它被声明为protected,finalize()会在对象被回收时执行,但不可以将它当做析构函数使用,因为不知道对象资源何时被回收。

    如果确定不再使用某个对象,可以在参考至对象的名称上指定null,表示这个名称不再参考至任何对象。不被任何名称参考的对象会被回收资源。

    可以使用System.gc()建议程序进行垃圾收集,如果建议被采纳,则对象资源会被回收,回收前会执行finalize()方法。

 

继承 

    在Java中,所有的类都直接或间接地继承了java.lang.Object类。 

    在扩展某个类之后,可以一并初始化父类的构造函数,已完成响应的初始化动作,这可以使用super()方法来达到,它表示调用基底类的构造函数。super()必须再构造函数一开始就调用,在子类的构造函数中,如果不用super()指定使用父类中的哪个构造函数来初始,则默认会调用父类中无参数的构造函数。 

 

重写方法 

     可以使用super()方法在派生类中调用基类的构造函数,使用super.methodName()调用父类的方法。

      重写方法时需要注意的是,可以增大父类中的方法权限,但不可以缩写父类中的方法权限。也就是若原来成员时public,不可以在父类中重写它为private或protected。

 

Object类 

        在Java中,每个类都直接或间接继承自Object类。

        Object类定义了几个方法,包括protected权限的clone()、finalize()以及public权限的equals()、toString()、hashCode()、notify()、notifyAll()、wait()、getClass()等。除了getClass()、notify()、notifyAll()、wait()等方法之外其他都可以在继承后加以重写,因为这些方法都被声明为final,无法重写。

    

 

方法

说明

toString()

对对象的文字描述

getClass()

返回对象于执行期间的Class实例

getName()

取得类名称

hashCode()

返回改物件的哈希码(Hash  Code)

equals()

比较对象的内存地址是否相同

Clone()

复制对象本身

        要支持复制自身的对象,定义类时必须实现Cloneable接口。如果不实现这个接口的类,其实例的clone()方法被调用时,会出现CloneNotSupportedException异常。Java中的Clone()方法是继承自Object,为了方便直接调用,将其存取权限从protected改为public。

        如:

                public  class  Table  implements  Cloneable       //要实现Cloneable

                {

                    ...

                    public  Object  clone()  throws  CloneNotSupportedException

                    {

                        Table  table = (Table) super.clone();            //调用父类的clone()来复制

                    }

                    ...

                }

        改变复制对象的内容,对原来内容不会有影响。

 

final关键词 

        final关键词可以使用在变量声明时,表示改变量一旦设置之后,就不可以再改变改变量的值。

        如:

            final  double  PI = 3.14159;

            public  final  double  getRadius() {....}

        如果在定义方法成员时使用final,则表示该方法成员无法再被子类重写。

 

多态

        多态实现指的是使用同一个实现接口,以实现不同的对象实例。多态实现在面向对象上是为了降低对实现接口的依赖程度,进而增加程序架构的弹性与可维护性。

        要实现对象上的方法必须使用对应类型的实现接口,而如果使用不正确的类型来转换对象的实现接口,则会发生java.lang.ClassCastException异常。

 

    抽象类:

            在Java中定义类时,可以仅声明方法名称而不操作其中的逻辑,这样的方法称为抽象方法。如果一个类中包括了抽象方法,则该类称为抽象类。抽象类是拥有未实现方法的类,所以它不能被用来生成对象,它只能被继承扩展,并于继承后实现未完成的抽象方法。在Java中声明抽象方法与抽象类,要使用abstract关键词。

 

    接口:

            实现某接口的类并不属于某一个类,一个对象上可以实现多个接口。

            接口的目的在于定义一组可实现的方法,实现接口的类必须实现该接口所定义的所有方法。只要对象有实现某个接口,就可以通过该接口来实现对象上对应的方法。

            接口的声明时使用interface关键词,生命方式如下:

                [public]  interface  接口名称

                {

                    权限设置  返回类型  方法(参数列);

                    。。。

                }

                在声明接口时方法上的权限设置如果省略的话,默认的是public。

                在定义类时,可以使用implements关键词来指定要实现哪个接口,接口中所有定义的方法都要实现。

抱歉!评论已关闭.