1. 상수
다른 많은 프로그래밍 언어에는 상수 , 즉 값을 변경할 수 없는 변수가 있습니다 . Pi
일반적으로, 그것들은 한 해의 달의 숫자나 일수와 같은 일종의 기본적인 것에 사용됩니다 . 즉, 원칙적으로 프로그래머는 필요하다고 판단하는 경우 모든 변수를 상수로 만들 수 있습니다.
그렇다면 Java에서 불변 변수(상수)를 어떻게 선언합니까? 이를 위한 특별한 키워드가 있습니다: final
. 불변 변수를 생성하는 것은 일반 변수를 생성하는 것과 같습니다. 유일한 차이점은 변수 유형 앞에 final
다음과 같이 단어를 작성해야 한다는 것입니다.
final Type name = value;
변수 에 다른 값을 할당하려고 하면 final
프로그램이 컴파일되지 않습니다.
변수 final
는 선언될 때 초기화되어야 합니다(값이 할당되어야 함). 이 규칙에는 한 가지 예외가 있습니다. 정적 클래스 변수의 초기화를 생성자로 이동할 수 있습니다. 그러나 이것에 대해서는 레벨 10에서 배우게 될 것입니다 .
키워드 수를 줄이기 위해 Java 개발자는 final
단순히 상수를 선언하는 것 이상의 의미로 이 단어를 사용합니다. final
메서드와 클래스에도 적용할 수 있습니다. 로 선언된 메서드는 final
재정의할 수 없으며 로 선언된 클래스는 final
상속할 수 없습니다.
수정 final
자는 모든 변수(지역 변수, 메소드 매개변수, 클래스 필드 및 정적 클래스 변수) 앞에 추가될 수 있습니다.
final
변수 이름 앞에는 해당 변수에 대한 모든 변경 사항에 대한 보호 기능이 있습니다 . 변수가 개체에 대한 참조를 저장하는 경우 개체를 계속 변경할 수 있습니다.
예:
|
배열을 만듭니다. 이것은 허용되지 않습니다. 변수 data 가 로 선언됩니다 final . 그러나 당신은 이것을 할 수 있습니다. 그리고 이것도. |
전역 상수
프로그램에서 전역 상수를 선언하기로 결정했다면 정적 클래스 변수public
를 만들고 final
. 이러한 변수의 이름에는 특별한 스타일이 있습니다. 단어를 구분하는 데 사용되는 밑줄 문자와 함께 모두 대문자로 작성됩니다.
예:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. 변수 섀도잉
앞에서 말했듯이 같은 메서드에서 같은 이름을 가진 여러 지역 변수를 만들 수 없습니다. 다른 방법으로 할 수 있습니다.
그러나 여기에 당신이 아마 모르는 것이 있습니다. 인스턴스 변수와 로컬 메서드 변수는 같은 이름을 가질 수 있습니다.
예:
암호 | 변수 가시성 |
---|---|
|
|
메서드 에서 add
이라는 지역 변수를 선언했습니다 sum
. 메서드가 끝날 때까지 인스턴스 변수를 가리거나 가 립니다 sum
.
좋아, 당신은 그것이 어떤 의미에서 예상되는 것이라고 말합니다. 그러나 그것이 이야기의 끝이 아닙니다. 인스턴스 변수가 로컬 변수에 의해 가려지는 경우 메서드 내에서 인스턴스 변수를 참조하는 방법이 여전히 있음이 밝혀졌습니다. this
이름 앞에 키워드를 작성하여 이를 수행합니다 .
this.name
다음은 이름 충돌이 성공적으로 해결된 예입니다.
암호 | 변수 가시성 |
---|---|
|
|
count
및 변수 는 키워드 sum
가 있거나 없는 모든 곳에서 사용할 수 있습니다 this
. 로컬 변수가 인스턴스 변수를 sum
가리는 줄에서 인스턴스 변수는 키워드를 통해서만 액세스할 수 있습니다 .sum
sum
this
인스턴스 변수가 아닌 정적 클래스 변수가 가려지면 키워드가 아닌 클래스 이름을 통해 액세스해야 합니다 this
.
ClassName.name
예:
암호 | 변수 가시성 |
---|---|
|
|
클래스 이름을 접두사로 사용하거나 사용하지 않고 어디에서나 count
및 정적 변수에 액세스할 수 있습니다 . 로컬 변수가 인스턴스 변수를 가리는 줄에서 인스턴스 변수 에 대한 액세스는 접두사로 사용할 때만 가능합니다 .sum
Solution
sum
sum
sum
Solution
3. for
루프 내부의 변수
그리고 작지만 흥미로운 사실이 하나 더 있습니다.
변수가 특별한 방식으로 선언되는 곳도 있습니다. 바로 for
루프 내부입니다 .
for
루프에는 일반적으로 괄호 안에 카운터 변수가 있다는 것을 기억할 것입니다 . 그리고 이 변수의 가시성은 어떻게 될까요? 결국, 그것은 루프 본문에 있지 않습니다. 전체 방법입니까? 아님?
for
정답은 루프 의 헤더에 선언된 변수는 루프의 본문 과 루프 의 헤더for
에서만 볼 수 있다는 것 입니다 .
예:
암호 | 변수 가시성 |
---|---|
|
|
따라서 코드에서 항상 루프를 차례로 작성하고 동일한 이름의 카운터 변수를 사용할 수 있습니다. 그러면 문제가 발생하지 않습니다.
예:
암호 | 변수 가시성 |
---|---|
|
|
GO TO FULL VERSION