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


    1. 构造方法

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

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

            例如以下例子:

     1.1. 默认构造方法

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

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

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

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

    1.2. 重载构造方法

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

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

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

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

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

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

            1.4. 构造方法的作用域

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

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

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

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

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

    Java中类的方法分为类方法(用static修饰,也叫静态方法)和实例方法(没有用static修饰,也叫非静态方法),这两种方法之间有什么区别呢?

    一. 实例方法

    当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用,还有一点需要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会再分配新的入口地址,也可以说,该类的所有对象共享实例方法的入口地址,当该类的所有对象被销毁,入口地址才会消失。

    二. 类方法

    当类的字节码文件加载到内存,类方法的入口地址就会分配完成,所以类方法不仅可以被该类的对象调用,也可以直接通过类名完成调用。类方法的入口地址只有程序退出时消失。

    因为类方法的入口地址的分配要早于实例方法的入口地址分配时间,所有在定义类方法和实例方法是有以下规则需要遵循:

    1. 在类方法中不能引用实例变量

    实例变量的定义类似实例方法,没有用static修饰的变量,实例变量的创建与实例方法的创建相同,也是在类的对象创建时完成,所以在类方法中是不能引用实例变量的,因为这个时候实例变量还没有分配内存地址。

    2. 在类方法中不能使用super和this关键字

    这是因为super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建。

    3. 类方法中不能调用实例方法

    原因同1。

    与类方法相比,实例方法的定义就没有什么限制了:

    1. 实例方法可以引用类变量和实例变量

    2. 实例方法可以使用super和this关键字

    3. 实例方法中可以调用类方法

  • 相关阅读:
    input文本框加入xwebkitspeech实现语音输入功能
    获取textarea的光标位置
    初学者使用Application Cache指南
    一个封装了localStorage的增删改查的方法
    video from html5
    Asynchronous Method Invocation
    consume an asp.net webservice(upload a file to server) from java via soap
    INFO:VB/VBA (Long) 的转换自动化错误
    : 使用SAAJ发送和接收SOAP消息
    how to design a hardware service use .net remoting
  • 原文地址:https://www.cnblogs.com/sunyubin/p/9751412.html
Copyright © 2020-2023  润新知