在学习构造函数时有两个问题困扰了我:
1、一个类没有显式的写上一个构造方法,构造方法是如何产生的?
2、如果一个类已经显式的写上一个构造方法时,还会产生无参的构造方法吗?
于是用代码验证一下:
验证问题1:
class Baby{ int id; //身份证 String name; //名字 } class Demo6 { public static void main(String[] args) { } }
将这段代码反编译:
Javap –c –l –private
验证结果:
结论1:如果一个类没有显式的写上一个构造方法时,那么java编译器会为该类添加一个无参的构造函数的,而不是JVM。
验证问题二:
新建一个带参数的Baby构造方法:
class Baby{ int id; //身份证 String name; //名字 public Baby(int i,String n) {} }
反编译后:
结论2:如果一个类已经显式的写上一个构造方法,那么java编译器不会再为该类添加一个无参的构造方法。
扩展:
构造函数是在编译器编译时产生的,那么构造函数和普通函数的区别是什么?
1. 返回值类型的区别:
1. 构造函数没有返回值类型
2. 普通函数有返回值类型,即使函数没有返回值,返回值类型也要写上void。
2. 函数名的区别:
1. 构造函数的函数名必须要与类名一致,
2. 普通函数的函数名只要符合标识符的命名规则即可。
3. 调用方式的区别:
1. 构造函数是 在创建对象的时候由jvm调用的。
2. 普通函数是由我们使用对象调用的,一个对象可以对象多次普通 的函数,
4. 作用上的区别:
1. 构造函数 的作用用于初始化一个对象。
2. 普通函数是用于描述一类事物的公共行为的。
总结:
这次虽然总结的是两个知识点,但是在总结方式上有了进步:用代码验证自己怀疑的结论!希望大家都能勇敢的迈出一步。