이 두 형제를 구별하기 위해 우선, 우리는 그들이 무엇인지 알아야합니다. 먼저 멤버 변수를 사용하십시오.
멤버 변수
공부합시다 :
속성 : 외부 특성; 인간의 높이와 체중과 같은
행동 : 당신은 무엇을 할 수 있습니까? 예를 들어, 사람들은 말하기, 농구 경기 등과 같은 행동이 있습니다.
Java 언어에서 가장 기본적인 단위는 클래스이며 수업은 사물을 반영하는 데 사용됩니다.
수업 수업으로 사물을 묘사하는 것도 마찬가지입니다.
속성 : 해당 클래스의 멤버 변수
동작 : 해당 클래스의 멤버 기능
클래스 정의는 실제로 클래스에서 멤버 (회원 변수 및 멤버 함수)입니다.
확장 : 클래스는 추상 개념이며, 대상은 클래스의 구체적인 존재와 구체화입니다. 예를 들어 : 인생의 자동차는 우리가 자동차 수업이라고 부르는 수업으로 간주 될 수 있습니다. 각 차량에는 색상 및 타이어 번호가 있습니다 (멤버 변수, 즉 멤버 변수로 정의 될 수 있음). 자동차를 인스턴스화하면 Mercedes-Benz 및 BMW (BMW)와 같은 물체를 생산합니다.
데모 1 :
공개 클래스 카 {개인 문자열 색상; // 자동차 색상, 글로벌 가변 개인 int numluntai를 정의합니다. // 자동차 타이어 번호, 글로벌 가변 공공 차량 (문자열 색상, int numluntai) {super (); this.color = 색상; this.numluntai = numluntai; } public void run () {System.out.println (this.numluntai + "wheels" + this.color + "차가 도로에서 운전하고 있습니다"); }} 공개 클래스 ClasStest {public static void main (String [] args) {Car bmw = 새 차 ( "검은 색", 4); // 이름을 가진 세단 객체를 만듭니다. bmw bmw.run (); }}실행 결과 :
4 개의 바퀴가 달린 검은 세단이 도로에서 운전하고 있습니다.
그중에서도 Color와 Numluntai를 자동차 클래스의 회원 변수라고합니다. 이 속성은 클래스의 속성을 설명하는 데 사용할 수 있습니다. 그렇지 않으면 로컬 변수로 정의해야합니다.
예를 들어, 나는 for 루프의 로컬 변수입니다.
for (int i = 0; i <args.length; i ++) {
......
}
예를 들어, 변수는 멤버 메소드로 로컬 변수로 기록됩니다.
Publicclass Car {개인 문자열 색상; // 자동차 색상, 글로벌 가변 개인 int numluntai를 정의합니다. // 자동차 타이어 번호, 글로벌 가변 공공 차량 (문자열 색상, int numluntai) {super (); this.color = 색상; this.numluntai = numluntai; } public void run () {String carname = "bmw"; // 이것은 로컬 변수 System.out.println입니다 (this.numluntai + "wheels" + this.color + carname + "차가 도로에서 운전하고 있습니다"); }} publicclass classtest {public static void main (String [] args) {Car BMW = 새 차 ( "검은 색", 4); // 이름을 가진 세단 객체를 만듭니다. bmw bmw.run (); }}결과:
4 개의 바퀴가 달린 검은 색 BMW 세단 도로에서 운전 중입니다.
멤버 변수와 로컬 변수의 차이
회원 변수 :
① 멤버 변수는 클래스에서 정의되며 클래스 내내 액세스 할 수 있습니다.
② 멤버 변수는 물체의 확립으로 설정되고, 물체가 사라지고 사라지고, 객체가있는 힙 메모리에 존재합니다.
③ 멤버 변수에는 기본 초기화 값이 있습니다.
로컬 변수 :
로컬 변수는 다음과 같은 로컬 범위에서만 정의되어 있습니다. 함수 내에서, 진술 내에서 내부 내에서는 유효합니다.
stack 스택 메모리에는 로컬 변수가 있습니다. 함수의 범위가 종료되면 가변 공간이 자동으로 해제됩니다.
③ 로컬 변수에는 기본 초기화 값이 없습니다
변수를 사용할 때 따라야하는 원칙은 다음과 같습니다.
먼저 로컬 범위에서 검색하고 하나가있는 경우 사용하십시오. 그런 다음 멤버 위치에서 검색하십시오.
내가 이것을 볼 때 약간 혼란 스러울 수 있습니다. 아래의 예를 정리하겠습니다. 신중하게 생각하면 실제로는 매우 간단합니다.
간단한 코드를 먼저 살펴 보겠습니다.
먼저 사람 수업을 정의했습니다.
공개 클래스 사람 {private int age = 1000; // 회원 변수 정의, 나이는 1000 개의 공공 무효 설정 (int 연령) {age = age; System.out.println ( "방법 내 연령"+연령); } public void sayhello () {system.out.println ( "내 나이는"+age+"); }}그런 다음 기본 함수에서 객체를 만들고 출력하십시오.
Person P = New Person (); P.Setage (20); P.SayHello ();
출력 결과는 무엇입니까? 내 나이가 20 살이라고 상상했지만 다음은 다음과 같습니다.
// 메소드 내의 연령은 20입니다. // 내 나이는 1000입니다.
당신이 그것에 대해 생각하면 실제로 이해하기 쉽습니다.
한 단어에서 이름이 다른 경우 메소드의 변수 이름은 멤버 변수를 나타냅니다. 동일한 이름이있는 경우 메소드의 변수 이름은 로컬 변수 만 나타내며 멤버 변수와 관계가 없습니다.
먼저, 개인 객체 P를 만들 때 객체를 만들 때 멤버 변수가 초기화되었습니다. 회원 가변 연령의 초기 값은 1000입니다.
P.Setage (20)가있을 때 20은 실제로 설정 방법에서만 작동하므로 방법의 20 세는 출력입니다. 이 문장을 실행 한 후, 20은 파괴됩니다.
그런 다음 Sayhello를 실행하면 나이가 멤버 변수의 값을 나타내므로 여전히 1000입니다.
여기서 여전히 이해할 수 없다면 코드를 직접 작성하여 출력 결과를보고 경험할 수 있습니다.
따라서 동일한 이름이 사용되면이 변수 이름이 멤버 변수를 나타내도록합니다. 어떤 방법이 있습니까?
그런 다음이 키워드에 대해 이야기해야합니다. 우리는 사람 클래스를 이것으로 변경했습니다.
공개 계급 사람 {private int age = 1000; 공공 무효 설정 (int Age) {this.age = age; System.out.println ( "방법 내의 연령"+연령); } public void sayhello () {system.out.println ( "내 나이는"+age+"); }}코드를 다시 실행하고 코드 실행 결과가 다음과 같은 것을 찾으십시오.
// 메소드 내의 연령은 20입니다. // 내 나이는 20입니다.
이것은 현재 객체를 나타냅니다.
여기서 여기서 여기에서 구체적으로 p 객체의 연령 (즉, p 객체의 멤버 변수 연령)의 값은 20임을 나타냅니다.
이 둘의 본질은 가변적이지만, 사용하면 상당히 차이가 있으며, 조심하지 않으면 함정에 빠질 수 있습니다. 먼저 기억하십시오. 클래스에서 변수를 사용하여 클래스의 속성을 설명 할 수있는 경우 멤버 변수로 정의됩니다. 그렇지 않으면 로컬 변수로 정의해야합니다. 이해할 수 없다면 더 많은 코드를 작성하면 이해할 수 있습니다.