zoukankan      html  css  js  c++  java
  • Java面向对象学习

    在一个文件中可以定义数个类,但只能有一个类被设置为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关键词来指定要实现哪个接口,接口中所有定义的方法都要实现。

  • 相关阅读:
    Linux 修改最大线程数
    Openresty+Nginx+Lua+Nginx_http_upstream_check_module 搭建
    SSDB 性能测试
    面向对象:类的成员
    封装,多态,类的约束,super()深入了解
    面向对象:继承
    面向对象:类的空间问题,类之间关系
    面向对象初识
    软件开发规范
    模块(四)包和logging日志
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/2592243.html
Copyright © 2011-2022 走看看