java中构造方法是一个重要的概念,初学时有人会对此构造方法的使用特别是其作用不清楚,下面我就来谈谈我对java中构造方法的理解,有不对或不清楚的地方希望各位看官提出意见,谢谢!

一.构造方法的定义声明

构造方法的名字必须和所在类的名字一致,没有返回值,但不能声明void,访问权限可以为任意,但是一般情况下使用public方法权限,构造方法中的参数可以根据需要自行定义,参数的不同的构造方法构成重载;

例:

class Fu
   {
public Fu(){} //无参的公有构造方法
public Fu(int i){} //参数类型为int的公有构造方法
     ......
   }

   public class Demo extends Fu
   {
     public Demo(){} //无参的公有构造方法
     public Demo(int i){} //参数类型为int的公有构造方法
     ...
   }


二.构造方法的使用

关键字new后面,类名加上一个小括号(),小括号内根据实际加上实参,另外一个是跟在关键字super或this后加上一个小括号(),小括号内根据实际添加实参,下面进行举例。

例1:

Demo demo = new Demo(); //这里是调用的是一个无参的构造方法,必须声明在方法中,最好声明在主方法

 上面构造方法的参数根据实际添加实参,jvm根据构造方法的参数不同加载不同的构造方法;

例2:

public Demo(){
 }

例3:

public Demo(){
super(1); //调用参数为int类型的父类的构造方法
 }

注意:例2和例3中this或super调用构造方法只能出现在构造方法中,而且必须出现在第一行,所以一个构造方法中第一行只能为this或super调用构造方法,两者不能同时调用构造方法出现,而且注意this或super调用构造方法时,要留构造方法出口,意思就是最后调用的构造方法中没有再调用别的构造方法!

三.构造方法的作用

1.初始化成员属性,而不是初始化对象,初始化对象是通过new关键字实现的

 2.通过new调用构造方法初始化对象,编译时根据参数签名来检查构造函数,称为静态联编和编译多态
 (参数签名:参数的类型,参数个数和参数顺序)

 3.创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始化父类成员属性;

我总是要把构造器和方法混淆,后来发现,

方法,实际上,是需要用于执行java代码的,而构造器,

构造器,,,是一个类的实例!!

 

为什么呢?

初始化”,事例如下:

class Rock {
     Rock() {
       System.out.print("Rock");
     }
   }

  这样,当我们在对Rock类进行调用的时候,我们的java编译器就会事先对他进行“自动”地初始化,开辟内存空间

 

  那么现在问题又来了,举个例子,我们的Rock()方法需要带有一个参数,形参,但是整个代码中,需要不仅仅是带有形参的Rock();还需要不带形参的Rock(),在我们的构造器对类进行构造的时候,需要将功能类似的,但形参不同的方法同时打包在该类下,以便在我们调用某个方法的时候,直接重载构造器中的该方法,可以说,这种构造形式,满足了我们对功能类似,形参不同的方法,调用的时候,进行重载,而满足了编译器自动初始化,人不需要手动初始化的需求。

  而且有个,问题,本来两个方法,功能上是类似的,一棵树和一株树苗,你非得要给他们起不同的名字,多别扭,好在有了构造器,能够是功能相似的方法起相同的名字,不同的参数,而能够在被调用的时候得以重载,多么牛逼的构造器 啊