构造方法
- 构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。
要求:
- 方法名必须与类名相同
- 无返回值
- 不能被static final native abstract和synchronized修饰
- 不能被子类继承。
- 默认构造方法为无参
- 可以被重载
- 如果是子类构造方法,必须在第一行用super调用父类构造方法
- 构造方法为private级别时,意味着只能在当前类中访问它:当前类的其他构造方法中可以通过this语句调用,此外还可以在当前类的成员方法中使用new调用。
只要如下情况才推荐将构造方法为private级别
- 这个类中仅仅包含一些供其他程序调用的静态方法,没有任何实例方法。
- 禁止这个类被继承。声明为private后,如果定义了它的子类,子类的方法中无法调用父类的任何构造方法。
- 类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。提供静态方法。
实例方法
- 没有用static修饰,也叫非静态方法
- 当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用
- 当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会再分配新的入口地址,也可以说,该类的所有对象共享实例方法的入口地址,当该类的所有对象被销毁,入口地址才会消失。
- 所以实例方法也可以称之为对象方法,相比类方法,对象方法几乎没什么限制
- 对象方法中可以引用对象变量,也可以引用类变量
- 对象方法中可以调用类方法(被static修饰的), 当然也可以调用对象方法(实例方法)
- 对象方法中可以使用super、this关键字
类方法
- Java中类的方法也有类方法(用static修饰,也叫静态方法
- 当类的字节码文件加载到内存,类方法的入口地址就会分配完成,所以类方法不仅可以被该类的对象调用,也可以直接通过类名完成调用。类方法的入口地址只有程序退出时消失
- 因此类方法也会有如下限制
- 类方法中不能引用对象变量(实例变量)
实例变量的创建与实例方法的创建相同,也是在类的对象创建时完成,所以不能引用实例变量,因为这个时候实例变量还没有分配内存地址 - 在类方法中不能使用super和this关键字
因为super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建 - 类方法中不能调用实例方法
与不能调用实例变量同理 - 类方法不能被覆盖
- 类方法不支持重写, 但是不会报错, 只是没有多态性