Javaでこれの属性とメソッドを呼び出す


記事の内容はシャンシリコンバレーから選ばれています

これはプロパティとメソッドを呼び出します

  • これは、現在のオブジェクトの意味として理解できます
  • これは、現在のオブジェクトのプロパティを意味するプロパティを呼び出すために使用できます

Javaの命名原則の1つは、名前で意味を知ることです。メソッドでは、クラスの属性変数とクラスのメソッドパラメータが同じ名前である場合、通常、近接の原則に従います。

package com.atguigu.java2;

public class PersonTest {
    
    
	public static void main(String[] args) {
    
    
		Person p1 = new Person();
		p1.setAge(1);
		System.out.println(p1.getAge());
	}
}

class Person{
    
    
	private String name;
	private int age;
	
	public void setName(String n){
    
    
		name = name;
	}
	
	public String getName(){
    
    
		return name;
	}
	public void setAge(int age){
    
    
		age = age;
	}
	public int getAge(){
    
    
		return age;
	}
}

操作の結果は次のとおりです。

0

	public void setName(String n){
    
    
		name = name;
	}

setNameメソッドの名前は、仮パラメーターの名前であり、属性の名前の使用はクラスの中括弧全体で行われ、メソッドの名前の使用はメソッド内で行われます。この場合、近接の原則が一般的に使用されます。つまり、2つの名前が仮パラメータ(ローカル変数)と見なされます。メソッドが呼び出されると、ローカル変数がスタックからポップされ、属性に値が割り当てられません。クラスの。

したがって、前の名前を属性変数として宣言する場合は、キーワードthisを追加するだけです。

class Person{
    
    
	private String name;
	private int age;
	
	public void setName(String n){
    
    
		this.name = name;
	}
	
	public String getName(){
    
    
		return name;
	}
	public void setAge(int age){
    
    
		this.age = age;
	}
	public int getAge(){
    
    
		return age;
	}
}

操作の結果は次のとおりです。

1

ここでは、これは現在のオブジェクトとして理解されていますこれは通常省略されます。

	public String getName(){
    
    
		return this.name;
	}

これも正しいですが、通常thisキーワードは使用されませんが、上記の重複した名前の出現はこれによって区別される必要があります。

この方法

このメソッドは、次の
ように通常は省略されます。

	public void eat(){
    
    
		System.out.println("人吃饭");
		this.study();
	}
	public void study(){
    
    
		System.out.println("人学习");
	}

次の2つのメソッドがPersonクラスに追加されます。this.study()にこれがあるかどうかは関係ありません。

これはコンストラクターを呼び出します

  • コンストラクターは、構築メソッドと呼ばれることもあります。コンストラクター内のプロパティに値を割り当てる場合、this。プロパティを使用して、仮パラメーターと区別することもできます。
  • コンストラクターを呼び出すためのthisの使用法はthis(パラメーターリスト)です。別のコンストラクターのすべてのメソッドをこのコンストラクターで呼び出すことができるように、パラメーターリストは別のコンストラクターのパラメーターリストである必要があります。
	public Person(){
    
    
		eat();
		//person初始化时,假设以下还需40行代码
	}
	
	public Person(String name){
    
    
		this.name = name;
		//person初始化时,假设以下还需40行代码
	}
	
	public Person(int age){
    
    
		this.age = age;
		//person初始化时,假设以下还需40行代码
	}
	
	public Person(String name,int age){
    
    
		this.name = name;
		this.age = age;
		//person初始化时,假设以下还需40行代码
	}

元のクラスにコンストラクターを追加します。上記の4つのコンストラクターは、コンストラクターのオーバーロードを構成します。各コンストラクターの初期化に40行を超える繰り返しコードが必要な場合、コードの冗長性が発生します。したがって、このコンストラクター呼び出しを使用します。

package com.atguigu.java2;

public class PersonTest {
    
    
	public static void main(String[] args) {
    
    
//		Person p1 = new Person();
//		p1.setAge(1);
//		System.out.println(p1.getAge());
		Person p2 = new Person("xiaoihuang",18);
		System.out.println("name="+p2.getName()+",age="+p2.getAge());
	}
}

class Person{
    
    
	private String name;
	private int age;
	
	public Person(){
    
    
		eat();
		String info = "person初始化时,假设以下还需40行代码";
		System.out.println(info);
	}
	
	public Person(String name){
    
    
		this();
		this.name = name;
		
	}
	
	public Person(int age){
    
    
		this();
		this.age = age;
	}
	
	public Person(String name,int age){
    
    
		this(age);
		this.name = name;
//		this.age = age;
		setName(name);
	}
	
	public void setName(String n){
    
    
		this.name = name;
	}
	
	public String getName(){
    
    
		return name;
	}
	public void setAge(int age){
    
    
		this.age = age;
	}
	public int getAge(){
    
    
		return age;
	}
	
	public void eat(){
    
    
		System.out.println("人吃饭");
		this.study();
	}
	public void study(){
    
    
		System.out.println("人学习");
	}
}

操作の結果は次のとおりです。


人は
人の初期化を学ぶときに食事をします。次の40行のコードが必要だとします
name = xiaoihuang、age = 18

コード分​​析

コードを分析すると、mainメソッドで呼び出されるコンストラクターは次のようになります。

	public Person(String name,int age){
    
    
		this(age);
		this.name = name;
//		this.age = age;
		setName(name);
	}

前のコンストラクターを呼び出すこのコンストラクター

	public Person(int age){
    
    
		this();
		this.age = age;
	}

このステップでは、年齢の属性が割り当てられていますが、このコンストラクターでは前のコンストラクターも呼び出されます

	public Person(){
    
    
		eat();
		String info = "person初始化时,假设以下还需40行代码";
		System.out.println(info);
	}

だからそれは出力します

人々は人の初期化を
学ぶときに食べる
、次の40行のコードが必要だと仮定する

現時点では、名前は割り当てられておらず、setName(name);メソッドを使用して、public Person(String name、int age)コンストラクターで値を割り当てています。これが実行プロセス全体です。

コンストラクターを呼び出すメソッドを使用することにより、前のコンストラクターの内容を継続的に使用できるため、コードの冗長性を回避し、読みやすさを向上させることができます。これでコンストラクターを呼び出すときに注意すべきことがいくつかあります

  • this(パラメーターリスト);ステートメントはメソッド本体の最初の行のみにすることができます。
  • コンストラクターはこれ(仮パラメーターリスト)を1回しか使用できません。複数のコンストラクターを呼び出すことはできず、複数のコンストラクターが呼び出されます。このステートメントが最初の行にない場合は常にあります。
  • これは、コンストラクターを呼び出すときに自分自身を呼び出すことも、相互に呼び出すこともできません。
  • これは、コンストラクターを呼び出すときに閉ループを形成できません。たとえば、コンストラクターのオーバーロードを形成するために4つのコンストラクターA、B、C、およびDがあります。AはBを呼び出し、BはAを呼び出すことができず、BはCまたはDのみを呼び出すことができます。 BがCを呼び出すと、CはBまたはAを呼び出すことができません。これは、AまたはBが呼び出されると、閉ループが形成されるためです。CはDのみを呼び出すことができ、Dは誰からも呼び出すことができません。したがって、オーバーロードされたコンストラクターがn個ある場合は、最大でn-1回呼び出します。

おすすめ

転載: blog.csdn.net/Meloneating/article/details/113593108