這一節我們簡單的說幾個在使用構造函數時需要注意的細節。
通過我們前幾節的學習,我們對構造函數有了一個比較清楚的認識,當我們在創建對象時,我們會調用構造函數。那么我們在定義和調用構造函數時,需要注意哪些細節呢?
**
**
**第一個需要注意的細節:構造函數與set方法**
看兩個函數代碼:
~~~
class Person
{
private String name;
private int age;
//構造函數,初始化name
Person(String n)
{
name = n;
System.out.println(name+"age"+age);
}
//一般函數,設置name
public void setName(String n)
{
name = n;
}
}
~~~
我們看到上面有兩個函數,第一個是構造函數,第二個是一般方法,它們兩個都是為設置name的內容,那么我們能不能用構造函數代替set方法呢,很顯然,這是不行了,因為我們之前已經學習了構造函數和一般函數的區別,而set方法就是一個一般函數。構造函數在這里只是對name進行了一次初始化,之后就不再作用了,而set方法當我們需要更改名字的任何時候都可以調用。
**第二個需要注意的細節:構造函數可以調用一般函數,但是一般函數不可以直接調用構造函數。**
我們來看例子:
~~~
class Person
{
private String name;
private int age;
//構造函數,初始化name
Person(String n)
{
setName(n);
System.out.println(name+":"+age);
}
//一般函數,設置name
public void setName(String n)
{
name = n;
}
}
~~~
編譯通過,我們來測試一下
~~~
class PersonTest
{
public static void main(String[] args)
{
Person p = new Person("小強");
}
}
~~~
結果:

很顯然構造函數中調用一般函數是可以的。
當我們在set方法中調用構造函數:
~~~
class Person
{
private String name;
private int age;
//構造函數,初始化name
Person(String n)
{
name = n;
System.out.println(name+":"+age);
}
//一般函數,設置name
public void setName(String n)
{
Person(n);
name = n;
}
}
~~~
結果:

我們看到編譯直接通不過,所以說一般函數中是不能直接調用構造函數的。
**第三個需要注意的細節:與類名同名的一般方法**
我們看這樣一個函數:
~~~
class Person
{
private String name;
private int age;
void Person(String n)
{
name = n;
System.out.println(name+":"+age);
}
}
~~~
測試:
~~~
class PersonTest
{
public static void main(String[] args)
{
Person p = new Person("小強");
}
}
~~~
結果:

我們看到提示說無法將構造函數應用到給定類型,實際沒有參數,但我們的代碼中有參數“小強”,也就是說我們創建對象用的函數不是構造函數,而是一個一般函數,程序沒有在Person類中找到相應的構造函數,因為我們的代碼中沒有定義構造函數,那么就只有默認構造函數,而默認構造函數是沒有任何參數的。所以我們在以后的編程過程中一定要注意這種現象。
**第四個需要注意的細節:構造函數中有return語句。**
我們看代碼說明問題
~~~
class Person
{
private String name;
private int age;
Person(String n,int a)
{
if(a<0)
{
System.out.println("初始化不合法!");
return;
}
name = n;
age = a
System.out.println(name+":"+age);
return ;//我們在函數那里學習了,沒有返回值的函數中的return語句是可以省略的
}
}
~~~
我們來測試一下
~~~
class PersonTest
{
public static void main(String[] args)
{
Person p = new Person("小強",-1);
}
}
~~~
結果:
我們發現了程序編譯通過并且運行正常,return語句跳出構造函數,那么也就是說構造函數中有return語句。
這一節我們學習了四個構造函數中經常需要注意的細節,在以后的編程過程中我們多多注意。
- 前言
- 1.1 基本常識
- 1.2 Java語言概述
- 1.3 Java語言的環境搭建
- 1.4 Java程序開發之初體驗--Hello World
- 2.1 關鍵字
- 2.2 標識符
- 2.3 注釋
- 2.4 常量
- 2.5 進制掃盲
- 2.6 變量和數據類型(1)
- 2.7 變量和數據類型(2)
- 2.8 運算符
- 3.1 if語句
- 3.2 switch語句
- 3.3 while和do-while語句
- 3.4 for語句
- 3.5 for循環的嵌套
- 3.6 break語句與continue語句
- 4.1 函數的定義
- 4.2 定義函數的兩個明確
- 4.3 函數的內存加載過程
- 4.4 函數的重載
- 5.1 數組的定義
- 5.2 數組的內存分配及特點
- 5.3 數組操作中常見問題
- 5.4 數組常用操作(1)
- 5.5 數組常用操作(2)
- 5.6 二維數組
- 6.1 面向對象的概述
- 6.2 類與對象的關系
- 6.3 對象的內存體現
- 6.4 成員變量與局部變量
- 6.5 類類型參數與匿名對象
- 6.6 基本數據類型參數與引用數據類型參數的傳遞過程
- 6.7 封裝
- 7.1 構造函數概述與默認構造函數
- 7.2 構造函數與一般函數的區別
- 7.3 構造函數的重載
- 7.4 構造函數的內存加載
- 7.5 構造函數需要注意的幾個細節
- 7.6 this關鍵字的原理
- 7.7 this關鍵字的細節與應用
- 8.1 static關鍵字之特點
- 8.2 成員變量與靜態變量的區別
- 8.3 static關鍵字使用的注意細節
- 8.4 main函數的解析與細節
- 8.5 static關鍵字的使用場景
- 8.6 靜態的內存加載
- 8.7 靜態代碼塊
- 8.8 構造代碼塊
- 9.1 繼承
- 9.2 單繼承與多重繼承
- 9.3 子父類中成員變量特征體現