지역 변수

"안녕하세요, 사랑하는 학생입니다! 이제 변수에 대해 좀 더 진지하게 알아볼 시간입니다. 하지만 이번에는 변수의 내부 구조에 대해 논의하지 않을 것입니다. 대신 변수가 위치한 코드와 어떻게 상호 작용하는지에 초점을 맞출 것입니다.

"메서드 내부에 선언된 모든 변수를 지역 변수 라고 합니다 . 지역 변수는 선언된 코드 블록에만 존재합니다. 더 정확하게는 선언된 순간부터 블록 끝까지 존재합니다. 선언된 코드."

"분명히, 나는 예가 필요합니다."

"문제 없습니다. 여기 있습니다.

암호 가변 가용성
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

"지역 변수에 접근하는 규칙을 한 번 더 살펴봅시다. 여기 코드 블록이 있습니다. 시작과 끝을 표시하는 것은 무엇입니까?"

"중괄호?"

"정답입니다. 메서드 본문, 루프 본문 또는 조건문에 대한 코드 블록일 수 있습니다. 코드 블록에서 선언된 변수는 해당 코드 블록이 끝날 때까지 존재합니다. 어디에서 루프 본문에 변수가 선언되어 있으면 변수가 존재합니까?"

"루프 본문에만 존재합니다."

"그렇습니다. 게다가 루프가 반복될 때마다 생성되고 소멸됩니다."

"즉, 한 메서드에서 이름이 같은 두 개의 지역 변수를 선언할 수 없다는 의미입니다 . 프로그램이 컴파일되지 않습니다. 하지만 변수가 선언된 코드 블록이 겹치지 않는 경우에는 이렇게 할 수 있습니다. "

"당신이 내가 가장 좋아하는 이유가 있어요, 아미고. 이것을 당신의 두뇌에서 굳히기 위해 한 가지 더 예를 들어보세요.

암호 변수 가시성
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

"첫 번째 변수가 두 번째 변수가 선언된 코드 블록에 표시되지 않기 b때문에 명명된 두 번째 로컬 변수를 선언할 수 있었습니다 .bb

매개변수

"앞서 말했듯이 각 메서드에는 매개 변수라고 하는 변수가 있을 수 있습니다. 가시성과 수명은 어떻습니까?"

"흠... 멍해졌어..."

"여기서는 모든 것이 매우 간단합니다. 실행 단계가 메서드로 들어갈 때 매개변수가 생성됩니다(즉, 메서드 코드가 실행을 시작할 때). 메서드가 종료되면 매개변수가 제거됩니다."

"즉, 메소드의 전체 본문에서 볼 수 있고 거기에서만 볼 수 있습니까?"

"예. 예:

암호 변수 가시성
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

"앞서 말했듯이 는 args유형이 문자열 배열인 변수일 뿐입니다. 그리고 모든 매개변수와 마찬가지로 메서드 본문 내의 모든 위치에서 사용할 수 있습니다. 즉, 우리는 일반적으로 예제에서 이를 무시합니다.

클래스의 변수

"클래스가 메소드와 변수를 가질 수 있다고 말한 레벨 1의 수업을 기억하십시오. 메소드는 때때로 인스턴스 메소드라고 하고 변수는 인스턴스 변수 또는 필드라고 합니다.

" 클래스 의 변수(또는 필드)는 무엇입니까 ?

메소드가 아닌 클래스에서 선언된 변수입니다."

"그리고 그들은 무엇을 위해 거기에 있습니까?"

"처음에는 클래스의 모든(비정적) 메서드에서 액세스할 수 있습니다. 대략적으로 말하면 인스턴스 변수는 클래스의 모든 메서드에서 공유하는 변수입니다.

예:

암호 변수 가시성
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

add()"이 예제에는 and 라는 두 가지 방법이 있습니다 remove(). 이 add()방법은 sumcount인스턴스 변수를 증가시키고 이 remove()방법은 sumcount변수를 감소시킵니다. 두 방법 모두 공유 인스턴스 변수에서 작동합니다."

"모두 이해합니다! 메서드가 실행되는 동안 지역 변수가 존재합니다. 클래스인스턴스 변수는 해당 개체가 존재하는 한 클래스의 개체 내에 존재합니다."

"잘했어, 아미고. 우리는 약간의 토대를 마련했고, 다음 레벨에서 클래스의 개체에 대한 세부 사항을 배우게 될 것이다.

정적 변수

"메소드와 마찬가지로 클래스의 변수는 정적이거나 비정적일 수 있습니다. 정적 메소드는 정적 변수에만 액세스할 수 있습니다.

"아직 정적 변수에 대한 명확한 이해가 없습니다."

"아, 알아. 하지만 걱정하지마. 지금은 그냥 익숙해져라. 익숙해져라. 레벨 11에서는 정적 변수와 메소드의 구조를 분석하고 그 이유를 이해할 것이다. 제한.

"정적 변수(클래스 변수)를 만들려면 static해당 선언에 키워드를 작성해야 합니다.

"정적 변수는 선언된 클래스의 개체나 인스턴스에 바인딩되지 않습니다. 대신 클래스 자체에 속합니다. 따라서 클래스의 단일 개체가 생성되지 않은 경우에도 정적 변수 가 존재합니다 . 참조할 수 있습니다. 다음과 같은 구성을 사용하여 다른 클래스에서 가져옵니다.

ClassName.variableName

예:

암호 변수 가시성
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

"위의 예에서 우리는 별도의 클래스를 생성하고 및 변수를 그 클래스로 Storage이동한 다음 static 으로 선언했습니다 . 공용 정적 변수는 프로그램의 모든 메서드에서 액세스할 수 있습니다(메서드뿐만 아니라)."countsum

"완전히 이해하지는 못하지만 이것이 나에게 편리한 것 같습니다."

"그렇습니다. 때로는 필요합니다. 정적 변수와 메서드가 없으면 막힐 것입니다."

" 천천히 알아낼 수 있기를 바랍니다. "

"네, 물론이죠."