1. 程式人生 > >jnhs-java實體類的有參構造器 無參構造器Could not instantiate bean class 實體類No default constructor found

jnhs-java實體類的有參構造器 無參構造器Could not instantiate bean class 實體類No default constructor found

 new一個物件的時候要用到建構函式,

例如Hello hello = new Hello();這時呼叫的是Hello的無引數構造方法;

Hello hello = new Hello("hi");這個是呼叫Hello有引數構造方法,

在JAVA中如果不寫構造方法的話,會預設加上一個無引數的構造方法,但是如果已經有了一個有引數的構造方法,那麼無引數的構造方法就不會預設被加上.

如果Hello類中已經有了一個有引數的構造方法,這時再使用Hello hello = new Hello();來建立物件的時候就會出錯

這就是為什麼書上要強調寫了有引數的構造方法就最好加一個無引數的構造方法。

區別

有引數的構造方法的主要目的是為類中的屬性初始化的

而無引數的構造方法,可以控制new物件。

--------------------------------------------------------------------------------------------------------------------------------

我生成了一個帶引數的建構函式,但是沒有寫無參的,所以,報錯,修改如下,問題解決

 

 

 

所以安全的辦法就是生成一個有參的,用來new ,生成一個有參的,用來測試,賦值等

所以安全的辦法就是生成一個有參的,用來new ,生成一個有參的,用來測試,賦值等

使用構造器時需要記住:

 

1.構造器必須與類同名(如果一個原始檔中有多個類,那麼構造器必須與公共類同名)

2.每個類可以有一個以上的構造器

3.構造器可以有0個、1個或1個以上的引數

4.構造器沒有返回值

5.構造器總是伴隨著new操作一起呼叫

 


構造方法: 語法       

public 類名(){}  (構造方法沒有返回值, 構造方法:一般用於給物件賦初始值)


 

解決:引數名和 屬性名 相同  

  1.  修改引數名(不推薦)

  2. 使用this關鍵字       

        this:  關鍵字 

             1、指代當前物件     

              2、指代當前類     *

              3、 指代構造方法 this():   表示當前類的構造方法,只能放在首行