新しいオブジェクトが完成すると、すべてのメンバー変数にデフォルト値が設定されているため、新しい値を割り当てる必要がある場合は、それらに 1 つずつ値を割り当てる必要があり、面倒です。新しいオブジェクトが作成されたときに、現在のオブジェクトの一部またはすべてのメンバー変数に値を直接割り当てることはできますか?
はい、Java は构造器(Constructor)
としても知られるを提供します构造方法
。
10.1 コンストラクタの役割
新しいオブジェクトを作成し、新しいオブジェクトが作成されたときにインスタンス変数に値を割り当てます。
例: 人物 p = 新規 Person(“Peter”,15)
;
説明: 各「人」は生まれたらすぐに入浴しなければならないことを規定するのと同じように、「人」のコンストラクターに「入浴」を完了するプログラムコードを追加できます。生まれたらすぐに「お風呂」を自動で完了させる。
10.2 コンストラクタの構文
[修饰符] class 类名{
[修饰符] 构造器名(){
// 实例初始化代码
}
[修饰符] 构造器名(参数列表){
// 实例初始化代码
}
}
説明します:
- コンストラクター名は、それが存在するクラス名と同じでなければなりません。
- 戻り値がないため、戻り値の型も void も必要ありません。
- コンストラクターの修飾子はパーミッション修飾子のみであり、他の修飾子によって変更することはできません。たとえば、静的、最終、同期、抽象、ネイティブによって変更することはできず、return ステートメントの戻り値を持つことはできません。
コードは以下のように表示されます:
public class Student {
private String name;
private int age;
// 无参构造
public Student() {}
// 有参构造
public Student(String n,int a) {
name = n;
age = a;
}
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
public String getInfo(){
return "姓名:" + name +",年龄:" + age;
}
}
public class TestStudent {
public static void main(String[] args) {
//调用无参构造创建学生对象
Student s1 = new Student();
//调用有参构造创建学生对象
Student s2 = new Student("张三",23);
System.out.println(s1.getInfo());
System.out.println(s2.getInfo());
}
}
10.3 使用説明書
-
クラスでコンストラクターを明示的に宣言しない場合、システムはデフォルトでパラメーターなしのコンストラクターを提供し、コンストラクターの修飾子はデフォルトでクラスの修飾子と同じです。
-
クラスコンストラクターを明示的に定義すると、システムはデフォルトの引数なしコンストラクターを提供しなくなります。
-
クラスには、少なくとも 1 つのコンストラクターがあります。
-
コンストラクターはオーバーロードできます。
10.4 演習
**演習 1:
**TriAngle と TriAngleTest の 2 つのクラスを記述します。ここで、プライベート ベースの長さ base と高さは TriAngle クラスで宣言され、パブリック メソッドはプライベート変数にアクセスするために宣言されます。さらに、クラスに必要なコンストラクターを提供します。これらのパブリック メソッドを別のクラスで使用して、三角形の面積を計算します。
演習 2:
(1) 4 つの属性を持つ Student クラスを定義します:
String name;
int age;
String school;
String major;
(2) Student クラスの 3 つのコンストラクターを定義します。
- 最初のコンストラクター Student(String n, int a) は、クラスの名前と年齢のプロパティを設定します。
- 2 番目のコンストラクター Student(String n, int a, String s) は、クラスの名前、年齢、および学校のプロパティを設定します。
- 3 番目のコンストラクター Student(String n, int a, String s, String m) は、クラスの名前、年齢、学校、および主要なプロパティを設定します。
(3) 異なるコンストラクターで作成されたオブジェクトを main メソッドで呼び出し、それらの属性値を出力します。
演習 3:
1. Account という名前のクラス デモ アカウントを作成します。このクラスのプロパティとメソッドを下の図に示します。
このクラスに含まれる属性: 口座 ID、残高、年利、anualInterestRate。
含まれるメソッド: アクセサー メソッド (ゲッター メソッドとセッター メソッド)、引き出しメソッドのwithdraw()、入金メソッドのdeposit()。
**注意:** 出金方法の出金では、ユーザー残高が出金額の要件を満たすことができるかどうかを判断する必要があり、そうでない場合は督促が行われます。
- 顧客クラスを作成します。
a. firstName、lastName、および account の 3 つのプライベート オブジェクト プロパティを宣言します。
b. オブジェクト プロパティを表す 2 つのパラメータ (f と l) を持つ
パブリック コンストラクタを宣言する c. オブジェクト プロパティにアクセスするための 2 つのパブリック アクセサを宣言する getFirstName メソッドと getLastName メソッドは、対応するプロパティを返します。
d. setAccount メソッドを宣言して、アカウント プロパティに値を割り当てます。
e. getAccount メソッドを宣言して、アカウント プロパティを取得します。
3. テスト プログラムを作成します。
(1) アカウント番号 1000、残高 2000 元、年利 1.23% のアカウントを持つ Jane Smith という名前の顧客を作成します。
(2) ジェーン・スミスに対する訴訟。
100元入金して960元出金。さらに2,000元を取り出します。
Jane Smith の基本情報を出力する
成功存入 :100.0
成功取出:960.0
余额不足,取款失败
Customer [Smith, Jane] has a account: id is 1000, annualInterestRate is 1.23%, balance is 1140.0