• Java中构造方法、实例方法、类方法的区别


    1. 构造方法

           构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:

    • 方法名与类名相同;
    • 不要返回类型(例如return、void等);
    • 不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

            例如以下例子:

    [java] view plain copy
     
    1. <span style="font-family:'Microsoft YaHei'; font-size:10px">public class Sample{  
    2.    private in x;  
    3.    public Sample(){              //不带参数的构造方法  
    4.       this(1);  
    5.    }  
    6.    public Sample(int x){         //带参数的构造方法  
    7.       this.x=x;  
    8.    }  
    9.    public int Sample(int x){     //不是构造方法,return  
    10.       return x++;  
    11.    }  
    12. }</span>  

            

           1.1. 默认构造方法

                    默认构造方法时没有参数的构造方法,分为

                        a.隐含的默认构造方法:public ClassName(){}

                        b.程序显示定义默认构造方法:public Employee(){this("无名氏");}

                    可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:

                       

    [java] view plain copy
     
    1. <span style="font-family:'Microsoft YaHei'; font-size:10px">ClassName c=new ClassName();   //此语句合法</span>  

           1.2. 重载构造方法

                    通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。

            1.3. 子类调用父类的构造方法

                    父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:

    [java] view plain copy
     
    1. <span style="font-family:'Microsoft YaHei'; font-size:10px">public class MyExpection extends Exceptio{  
    2.     public MyException(){  
    3.        //调用Exception父类的Exception(String msg)方法  
    4.        super("Something is error!");  
    5.     }  
    6.     public MyException(String msg){  
    7.        //调用EXception父类的Exception(String msg)方法  
    8.        super(msg);  
    9.     }  
    10. }</span>  

                    用super调用父类的构造方法必须遵守以下规则:

                            1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;

                            2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句);

            1.4. 构造方法的作用域

    • 当前类的其他构造方法通过this语句调用;
    • 当前类的子类的构造方法通过super语句调用;
    • 在程序中通过new语句调用。

            1.5. 构造方法的private访问级别

                    构造方法为private级别时,意味着只能在当前类中访问它:当前类的其他构造方法中可以通过this语句调用,此外还可以在当前类的成员方法中使用new调用。

                    以下场合中,可以把类的所有构造方法声明为private:

    • 这个类中仅仅包含一些供其他程序调用的静态方法,没有任何实例方法。
    • 禁止这个类被继承。声明为private后,如果定义了它的子类,子类的方法中无法调用父类的任何构造方法。
    • 类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。提供静态方法。

    2. 类方法

            用static关键字修饰,可以直接通过类名调用,不需要创建类的对象来调用该方法。

    3. 实例方法

            可以通过类的实例调用对象的方法,也称为成员方法。

    1. 构造方法

           构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:

     

    • 方法名与类名相同;
    • 不要返回类型(例如return、void等);
    • 不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

            例如以下例子:

     

     

    [java] view plain copy
     
    1. <span style="font-family:'Microsoft YaHei'; font-size:10px">public class Sample{  
    2.    private in x;  
    3.    public Sample(){              //不带参数的构造方法  
    4.       this(1);  
    5.    }  
    6.    public Sample(int x){         //带参数的构造方法  
    7.       this.x=x;  
    8.    }  
    9.    public int Sample(int x){     //不是构造方法,return  
    10.       return x++;  
    11.    }  
    12. }</span>  

            

     

           1.1. 默认构造方法

                    默认构造方法时没有参数的构造方法,分为

                        a.隐含的默认构造方法:public ClassName(){}

                        b.程序显示定义默认构造方法:public Employee(){this("无名氏");}

                    可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:

                       

    [java] view plain copy
     
    1. <span style="font-family:'Microsoft YaHei'; font-size:10px">ClassName c=new ClassName();   //此语句合法</span>  

     

           1.2. 重载构造方法

                    通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。

     

            1.3. 子类调用父类的构造方法

                    父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:

     

    [java] view plain copy
     
    1. <span style="font-family:'Microsoft YaHei'; font-size:10px">public class MyExpection extends Exceptio{  
    2.     public MyException(){  
    3.        //调用Exception父类的Exception(String msg)方法  
    4.        super("Something is error!");  
    5.     }  
    6.     public MyException(String msg){  
    7.        //调用EXception父类的Exception(String msg)方法  
    8.        super(msg);  
    9.     }  
    10. }</span>  

     

                    用super调用父类的构造方法必须遵守以下规则:

                            1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;

                            2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句);

            1.4. 构造方法的作用域

     

    • 当前类的其他构造方法通过this语句调用;
    • 当前类的子类的构造方法通过super语句调用;
    • 在程序中通过new语句调用。

            1.5. 构造方法的private访问级别

     

                    构造方法为private级别时,意味着只能在当前类中访问它:当前类的其他构造方法中可以通过this语句调用,此外还可以在当前类的成员方法中使用new调用。

                    以下场合中,可以把类的所有构造方法声明为private:

     

    • 这个类中仅仅包含一些供其他程序调用的静态方法,没有任何实例方法。
    • 禁止这个类被继承。声明为private后,如果定义了它的子类,子类的方法中无法调用父类的任何构造方法。
    • 类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。提供静态方法。

     

     

    2. 类方法

            用static关键字修饰,可以直接通过类名调用,不需要创建类的对象来调用该方法。

     

    3. 实例方法

            可以通过类的实例调用对象的方法,也称为成员方法。

  • 相关阅读:
    apache和tomcat有什么不同,为什么要整合apache 和tomcat
    使用jstack分析cpu消耗过高的问题
    eclipse建立springMVC 简单项目
    JAVA中的反射机制
    MySQL索引的Index method中btree和hash的优缺点
    JAVA中的线程安全与非线程安全
    Java中普通代码块,构造代码块,静态代码块执行顺序
    jvm的内部体系结构浅析
    CPU思考
    linux内核调度算法(2)--CPU时间片如何分配 转!
  • 原文地址:https://www.cnblogs.com/zterry/p/6835417.html
Copyright © 2020-2023  润新知