자바에서 부분 변수와 구성원 변수의 동명 해결 기교를 간단히 분석하다

이 두 형제를 구분하려면 우선, 우리는 그것들이 각각 무엇인지 알아야 한다.먼저 멤버 변수에서 칼을 내리세요.
구성원 변수
우리는 하나의 사물을 연구한다.
속성: 외적 특징;예를 들면 사람의 키, 몸무게
행위: 무엇을 할 수 있는지;예를 들어 사람은 말을 하거나 공을 치는 등의 행위를 한다.
자바 언어에서 가장 기본적인 단위는 클래스이고 클래스는 사물을 나타내는 데 쓰인다.
클래스 클래스로 사물을 묘사하는 것도 마찬가지다.
속성: 해당 클래스의 구성원 변수
비헤이비어: 해당 클래스의 구성원 함수
정의 클래스는 사실 정의 클래스의 구성원 (구성원 변수와 구성원 함수) 이다
확장: 클래스는 추상적인 개념이고 대상은 클래스의 구체적인 존재이며 구현이다.예를 들어 생활 속의 자동차는 하나의 종류로 볼 수 있다. 우리는 자동차 종류라고 부른다. 모든 차는 색깔과 타이어 수(속성, 즉 구성원 변수로 정의할 수 있다), 모든 차는 달릴 수 있다(즉 차의 행위, 대응 클래스의 전체 구성원 함수). 우리는 자동차를 실례화하면 벤츠, BMW와 같은 대상이 생길 것이다.
Demo1:

public class Car {
 private String color; //  , 
 private int numLuntai; //  , 
 
 public Car(String color, int numLuntai){
   super();
   this.color = color;
   this.numLuntai = numLuntai;
 }
 public void run() {
   System.out.println(this.numLuntai+ " " +this.color + " ");
 }
}

public class ClassTest {
 public static void main(String[] args){
   Car bmw = new Car(" ", 4); //  , bmw
   bmw.run();
 }
}
실행 결과:
바퀴 4개의 검은색 승용차가 도로를 달리고 있다
그 중에서color와numLuntai는Car류의 구성원 변수라고 하는데 이 속성은 하나의 종류의 속성을 묘사할 수 있다. 그렇지 않으면 국부 변수로 정의해야 한다.
예를 들어 for 순환 중의 i는 국부 변수입니다.
                  for(int i = 0; i < args.length; i++) {
                          ......
                  }
또 예를 들어 구성원 방법에 쓰인 변수는 국부 변수이다.

publicclass Car {
 private String color; //  , 
 private int numLuntai; //  , 
 public Car(String color, int numLuntai){
   super();
   this.color = color;
   this.numLuntai = numLuntai;
 }
public void run() {
   String carName=” ”; // 
   System.out.println(this.numLuntai+ " " +this.color + carName+" ");
 }
}
publicclass ClassTest {
 public static void main(String[] args){
   Car bmw = new Car(" ", 4); //  , bmw
   bmw.run();
 }
}
결과:
바퀴 4개의 검은색 BMW표 승용차가 도로를 달리고 있다
구성원 변수와 국부 변수의 차이
구성원 변수:
① 구성원 변수는 클래스에 정의되어 있으며, 전체 클래스에서 접근할 수 있다.
② 구성원 변수는 객체가 만들어지고 객체가 사라짐에 따라 객체가 있는 더미 메모리에 존재합니다.
③ 멤버 변수에는 기본 초기화 값이 있습니다.
로컬 변수:
① 국부 변수는 국부 범위 내에서만 정의된다. 예를 들어 함수 내, 문장 내 등은 소속된 구역에서만 유효하다.
② 부분 변수가 스택 메모리에 존재하고 작용의 범위가 끝나면 변수 공간이 자동으로 방출된다.
③ 로컬 변수에 기본 초기화 값 없음
변수를 사용할 때 지켜야 할 원칙은 다음과 같다.
우선 국부적인 범위에서 찾고 있으면 사용한다.이어서 멤버 위치에서 찾습니다.
여기를 보면 좀 어리둥절할 수도 있으니 다음은 예시를 정리해 드리겠습니다. 생각해 보면 정말 간단합니다.
먼저 간단한 코드를 보겠습니다.
우선 저는 Person 클래스를 정의했습니다.

public class Person {
 private int age=1000;// , 1000

 public void setAge(int age) {
 age=age;
 System.out.println(" "+age);
 }
 public void sayHello() {
 System.out.println(" "+age+".");
 }
}
그리고 주 함수에 대상을 만들고 출력합니다.

Person p=new Person();
p.setAge(20);
p.sayHello();
출력 결과는 무엇입니까?우리가 상상하는 나의 나이가 20이 아니라 아래는 이렇다.

// 20
// 1000.
생각해보면 이해하기 쉬워요.
한마디로 이름이 같지 않으면 방법 내의 변수 이름은 구성원 변수를 대표한다.만약 동명이라면 방법 내의 변수명은 국부 변수만 표시하고 구성원 변수와 1마오의 관계도 없다.
그래서 우선 우리가 Person 대상 p를 만들었을 때 대상을 만들 때 구성원 변수의 초기화를 완성했다.구성원 변수age의 초기값은 1000입니다.
우리가 p.setAge(20)를 할 때 사실 이 20마리는 setAge라는 방법에서만 작용하기 때문에 방법내 나이 20을 출력했고 이 말을 실행한 후 20마리는 폐기되었다.
그리고sayHello를 실행합니다. 그 안에 있는age는 구성원 변수의 값을 대표하기 때문에 여전히 1000입니다.
여기까지만 해도 이해할 수 없다면 스스로 코드를 써서 출력 결과를 보고 체득할 수 있다.
그렇다면 동명일 때 이 변수명을 멤버 변수로 표시해야 하는데 어쩔 수 없나요?
그럼 this 키워드로 넘어가겠습니다.우리는 Person 클래스를 이렇게 바꾸었다.

public class Person {
 private int age=1000;

 public void setAge(int age) {
 this.age=age;
 System.out.println(" "+age);
 }
 public void sayHello() {
 System.out.println(" "+age+".");
 }
}
코드를 다시 실행하면 코드 실행 결과가 다음과 같이 됩니다.

// 20
// 20.
this는 현재 대상을 나타냅니다.
this.age는 여기서 p대상의age(즉 p대상의 구성원 변수age)의 값이 20임을 구체적으로 나타낸다.
비록 양자의 본질은 모두 변수이지만 사용할 때 상당히 큰 차이가 있기 때문에 조금만 조심하지 않으면 함정에 빠질 수 있다.그리고 먼저 기억해라. 하나의 클래스에서 하나의 변수가 하나의 클래스의 속성을 묘사할 수 있다면 구성원 변수로 정의하고, 그렇지 않으면 국부 변수로 정의해야 한다.이해하지 못하면 코드를 많이 쓰면 이해할 수 있다.

좋은 웹페이지 즐겨찾기