[构造函数]构造函数是如何产生的?

简介: [构造函数]构造函数是如何产生的?

在学习构造函数时有两个问题困扰了我:

   1、一个类没有显式的写上一个构造方法,构造方法是如何产生的?

   2、如果一个类已经显式的写上一个构造方法时,还会产生无参的构造方法吗?

   

  于是用代码验证一下:

验证问题1:

class Baby{
   int id; //身份证
   String name;  //名字
}
class Demo6
{
   public static void main(String[] args)
   { 
}
}

将这段代码反编译:

Javap –c –l –private



验证结果:

20170211110347612.png


   结论1:如果一个类没有显式的写上一个构造方法时,那么java编译器会为该类添加一个无参的构造函数的,而不是JVM。



验证问题二:

新建一个带参数的Baby构造方法:

class Baby{
  int id; //身份证
  String  name;  //名字
public Baby(int i,String n)
{}
}


反编译后:



20170211110457395.png


 结论2:如果一个类已经显式的写上一个构造方法,那么java编译器不会再为该类添加一个无参的构造方法。

扩展:

构造函数是在编译器编译时产生的,那么构造函数和普通函数的区别是什么?

1. 返回值类型的区别:

1. 构造函数没有返回值类型


2. 普通函数有返回值类型,即使函数没有返回值,返回值类型也要写上void。


2. 函数名的区别:


1. 构造函数的函数名必须要与类名一致,


2. 普通函数的函数名只要符合标识符的命名规则即可。


3. 调用方式的区别:


1. 构造函数是 在创建对象的时候由jvm调用的。


2. 普通函数是由我们使用对象调用的,一个对象可以对象多次普通 的函数,


4. 作用上的区别:


1. 构造函数 的作用用于初始化一个对象。


2. 普通函数是用于描述一类事物的公共行为的。


 

 总结:

   这次虽然总结的是两个知识点,但是在总结方式上有了进步:用代码验证自己怀疑的结论!希望大家都能勇敢的迈出一步。


相关文章
|
1月前
|
C++ Linux
|
1月前
|
编译器 C#
C#构造函数详解
C#构造函数详解
25 0
|
1月前
|
编译器 C语言 C++
你想对构造函数说些什么?
你想对构造函数说些什么?
|
7月前
|
JavaScript 前端开发
构造函数。
构造函数。
20 1
|
11月前
|
安全 C#
C#视频之构造函数
C#视频之构造函数
50 0
|
编译器 C语言 C++
C嘎嘎~~[构造函数提升篇]
C嘎嘎~~[构造函数提升篇]
构造函数
构造函数
48 1
学生类-构造函数
学生类-构造函数
131 0
|
编译器
类的构造函数
类的构造函数
138 0