정적과 최종의 차이점
는 항상 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★.static
★★★★★★★★★★★★★★★★★」final
키워드를 지정합니다.
그들은 어떻게 다릅니까?
static 키워드는 4가지 시나리오에서 사용할 수 있습니다.
- 정적 변수
- 정적 방식
- 정적 코드 블록
- 정적 중첩 클래스
먼저 정적 변수와 정적 방법을 살펴보겠습니다.
정적 변수
- 오브젝트(인스턴스)가 아닌 클래스에 속하는 변수입니다.
- 정적 변수는 실행 시작 시 한 번만 초기화됩니다.이러한 변수는 인스턴스 변수를 초기화하기 전에 먼저 초기화됩니다.
- 클래스의 모든 인스턴스가 공유하는 단일 복사본.
- 정적 변수는 클래스 이름으로 직접 액세스할 수 있으며 개체가 필요하지 않습니다.
- 문::
Class.variable
정적 방식
- 오브젝트(인스턴스)가 아닌 클래스에 속하는 메서드입니다.
- 정적 메서드는 정적 데이터에만 액세스할 수 있습니다.클래스의 인스턴스를 생성하거나 생성하지 않으면 비정적 데이터(인스턴스 변수)에 액세스할 수 없습니다.
- 스태틱 메서드는 다른 스태틱메서드만 호출할 수 있으며 클래스의 인스턴스를 생성하지 않는 한 스태틱메서드에서 비 스태틱메서드를 호출할 수 없습니다.
- 정적 메서드는 클래스 이름으로 직접 액세스할 수 있으며 개체가 필요하지 않습니다.
- 문::
Class.methodName()
- 는 ""를 할 수 .
this
★★★★★★★★★★★★★★★★★」super
이치노
스태틱 클래스
Java에는 "static nested 클래스"도 있습니다.스태틱 네스트클래스는 외부 클래스의 인스턴스를 암묵적으로 참조하지 않는 클래스입니다.
스태틱 네스트클래스에는 인스턴스 메서드 및 스태틱메서드를 사용할 수 있습니다.
Java에는 최상위 수준의 정적 클래스가 없습니다.
사이드 노트:
은 "예"입니다.
static
인스턴스화가 수행되기 전에 응용 프로그램이 실행되려면 액세스 가능해야 합니다.
final
키워드는 나중에 변경할 수 없는 엔티티를 정의하기 위해 여러 다른 컨텍스트에서 사용됩니다.
A
final
클래스는 하위 분류할 수 없습니다.을 사용법은 Java입니다.final
: " " )java.lang.System
★★★★★★★★★★★★★★★★★」java.lang.String
의final
으로 "class"입니다.final
.A
final
메서드는 하위 클래스에서 재정의할 수 없습니다.이는 클래스의 기능 또는 일관성에 중요한 메서드를 변경하는 서브클래스의 예기치 않은 동작을 방지하기 위해 사용됩니다.A
final
변수는 이니셜라이저 또는 할당 문을 통해 한 번만 초기화할 수 있습니다.을 「초기화」라고 .【A】【A】【A】【A】【A】【A】【A】【A】【A】【A】키로 하다blank final
의 되어야 합니다. 마찬가지로 정적 빈그렇지 두 경우 시 합니다.클래스의 빈 최종 인스턴스 변수는 선언된 클래스의 모든 컨스트럭터 끝에 확실하게 할당되어야 합니다. 마찬가지로 빈 최종 정적 변수는 선언된 클래스의 정적 이니셜라이저에 확실하게 할당되어야 합니다.그렇지 않으면 두 경우 모두 컴파일 시 오류가 발생합니다.
참고: 변수가 참조인 경우 다른 개체를 참조하도록 변수를 다시 바인딩할 수 없습니다.그러나 이 개체가 참조하는 개체는 원래 변형이 가능했다면 여전히 변형이 가능합니다.
되어 있는 는 "Nonymous inner class"로 선언됩니다.final
내부 클래스 내에서 접근할 수 있습니다.할당이 완료되면 최종 변수 값은 변경할 수 없습니다.
static은 인스턴스가 아닌 클래스에 속함을 의미합니다.즉, 특정 클래스의 모든 인스턴스 간에 공유되는 변수/메서드의 복사본은 1개뿐임을 의미합니다.
public class MyClass {
public static int myVariable = 0;
}
//Now in some other code creating two instances of MyClass
//and altering the variable will affect all instances
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
MyClass.myVariable = 5; //This change is reflected in both instances
final은 전혀 관련이 없습니다.이것은 한 번뿐인 초기화를 정의하는 방법입니다.변수를 정의할 때 또는 생성자 내에서만 초기화할 수 있습니다.
최종 방법 및 최종 클래스에 대한 참고사항, 이는 방법 또는 클래스를 각각 재정의/확장할 수 없음을 명시적으로 기술하는 방법이다.
추가 판독치 스태틱에 대해서는, 그 외의 사용법에 대해 이야기하고 있었습니다.스태틱 블록에서 사용되는 경우도 있습니다.정적 변수를 사용할 때 클래스를 사용하기 전에 이러한 변수를 설정해야 하는 경우가 있지만 안타깝게도 생성자를 얻을 수 없습니다.여기서 static 키워드가 들어갑니다.
public class MyClass {
public static List<String> cars = new ArrayList<String>();
static {
cars.add("Ferrari");
cars.add("Scoda");
}
}
public class TestClass {
public static void main(String args[]) {
System.out.println(MyClass.cars.get(0)); //This will print Ferrari
}
}
인스턴스별로 컨스트럭터 앞에 호출되는 인스턴스 이니셜라이저 블록과 혼동해서는 안 됩니다.
그 둘은 정말 비슷하지 않다. static
필드는 클래스의 특정 인스턴스에 속하지 않는 필드입니다.
class C {
public static int n = 42;
}
에서는, 「」, 「」.static
들 fieldn
특정 인스턴스와는 관련이 없습니다.C
와 함께 할 수 있습니다( '클래스 전체C.n
을 참조해 주세요. ""의 인스턴스를 할 수 ?C
n
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.
final
반면, 특정 변수는 초기화 후 변경할 수 없음을 나타냅니다.
class C {
public final int n = 42;
}
서서,,n
- be be cannot cannot cannot cannot cannot cannot cannot cannot 。final
한 가지 은 어떤 할 수 final
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아.
클래스는 「클래스」라고 선언할 수 .final
연장할 수 을 나타냅니다. 즉, 연장할 수 없습니다.
final class C {}
class B extends C {} // error!
마찬가지로 메서드는 확장 클래스로 덮어쓸 수 없음을 나타내기 위해 final로 선언할 수 있습니다.
class C {
public final void foo() {}
}
class B extends C {
public void foo() {} // error!
}
static
는 클래스의 모든 인스턴스가 공유하는 메모리 내의 변수 복사본이 1개뿐임을 의미합니다.
final
키워드는 값을 변경할 수 없음을 의미합니다.final
할 수 .
최종 -
1) 변수에 "final" 키워드를 적용하면 해당 변수의 값은 일정하게 유지됩니다. (또는) 변수를 final로 선언하면 됩니다.변수 값은 변경할 수 없습니다.
2)프로그램 수명 동안 변수 값이 변하지 않을 때 유용합니다.
정적 -
1) 변수에 "static" 키워드를 적용하면 변수가 클래스에 속함을 의미합니다.
2) 메서드에 static 키워드를 적용하면 클래스의 인스턴스를 만들지 않고도 메서드에 액세스할 수 있습니다.
스피커 같은 것을 생각해 보세요.스피커가 클래스라면 음량, 고음, 베이스, 색상 등 변수가 다르다.이러한 필드는 모두 스피커클래스를 정의하면서 정의합니다.예를 들어, 정적 수식자를 사용하여 색상 필드를 선언했습니다. 즉, 클래스가 인스턴스화된 횟수에 관계없이 이 변수의 복사본이 정확히 하나 존재함을 컴파일러에 알립니다.
선언하다
static final String color = "Black";
는 이 클래스가 인스턴스화될 때마다 색상 필드의 값이 변경되지 않는 한 "검은색"이 되도록 합니다.
public class Speaker {
static String color = "Black";
}
public class Sample {
public static void main(String args[]) {
System.out.println(Speaker.color); //will provide output as "Black"
Speaker.color = "white";
System.out.println(Speaker.color); //will provide output as "White"
}}
메모: 스피커의 색상을 최종으로 변경하면 final 키워드는 필드의 값을 변경하지 않기 때문에 이 코드는 실행되지 않습니다.
public class Speaker {
static final String color = "Black";
}
public class Sample {
public static void main(String args[]) {
System.out.println(Speaker.color); //should provide output as "Black"
Speaker.color = "white"; //Error because the value of color is fixed.
System.out.println(Speaker.color); //Code won't execute.
}}
이 코드를 에뮬레이터에 직접 복사/붙여넣고 시도할 수 있습니다.
간단한 차이,
[Final] : 변수 값이 [Final]으로 변경되지 않음을 의미합니다.최종 x = 5라고 하는 것은 x 값을 변경할 수 없다는 것을 의미합니다.
Static : 오브젝트는 1개뿐임을 나타냅니다.x = 5가 있고 메모리에는 x = 5가 있으며 클래스 내에는 현재가 있다고 가정합니다.클래스의 오브젝트 또는 인스턴스를 작성하면 그 클래스와 그 변수 및 메서드를 나타내는 특정 박스가 있습니다.또, 그 클래스의 다른 오브젝트 또는 인스턴스를 작성하면, 메모리내에 다른 x 를 가지는 같은 클래스의 2 개의 박스가 있는 것을 의미합니다.또, x 를 다른 위치와 ch 에 호출하면, 양쪽 모두를 다른 위치에 호출할 수 있습니다.그들의 값은 다를 것이다. 상자 1은 x = 5이고 상자 2는 x = 6이다. 그러나 만약 당신이 x를 고정시킨다면 그것은 다시 생성될 수 없다는 것을 의미한다.클래스의 오브젝트를 만들 수 있지만 그 오브젝트에는 다른x 가 포함되어 있지 않습니다.x 가 정적인 경우, 박스 1 과 박스 2 는 모두 값이 5 인 같은 x 를 가집니다.예, 최종값이 아니기 때문에 어디서든 static 값을 변경할 수 있습니다.상자 1에 x가 있고 그 값을 x =5로 변경한 후 다른 상자 2를 만들고 상자 2 x의 값을 x=6으로 변경하면 X가 고정적이기 때문에 두 상자 모두 x가 됩니다. 상자 2는 상자 2가 5에서 6의 값을 덮어쓰기 때문입니다.
최종과 정적 모두 완전히 다릅니다.최종 결승은 변경할 수 없습니다.스태틱은 하나로 유지되지만 변경할 수 있습니다.
"이것이 예시입니다.remember static 변수는 항상 클래스 이름으로 호출됩니다.왜냐하면 그들은 그 클래스의 모든 물건에 대해 오직 하나이기 때문이다.클래스 A는 x=5이므로 호출하여 A.x=6으로 변경할 수 있습니다.
스태틱과 최종에는 몇 가지 큰 차이가 있습니다.
정적 변수 또는 클래스는 항상 (대부분) 어디에서나 사용할 수 있습니다.Final은 변수를 변경할 수 없음을 나타내는 키워드일 뿐입니다.그렇다면 다음과 같습니다.
public class Test{
public final int first = 10;
public static int second = 20;
public Test(){
second = second + 1
first = first + 1;
}
}
이 프로그램은 "첫 번째" 정수를 변경하려고 시도할 때까지 실행되며, 이로 인해 오류가 발생합니다.이 클래스 이외에서는 클래스를 인스턴스화한 경우에만 "첫 번째" 변수에 액세스할 수 있습니다.이는 항상 사용할 수 있는 "second"와는 대조적입니다.
스태틱은 클래스 내의 모든 오브젝트가 호출할 수 있는 것으로 본질적으로 오브젝트유형에 속합니다.
변수는 전체 클래스에 대해 최종적일 수 있으며, 이는 단순히 더 이상 변경할 수 없음을 의미합니다.설정할 수 있는 것은 1회뿐이며, 다시 설정하려고 하면 에러가 발생합니다.이 기능은 변경할 수 없는 상수를 선언하는 등 여러 가지 이유로 유용합니다.
코드 예시:
class someClass
{
public static int count=0;
public final String mName;
someClass(String name)
{
mname=name;
count=count+1;
}
public static void main(String args[])
{
someClass obj1=new someClass("obj1");
System.out.println("count="+count+" name="+obj1.mName);
someClass obj2=new someClass("obj2");
System.out.println("count="+count+" name="+obj2.mName);
}
}
Wikipedia에는 Java 키워드의 전체 목록이 포함되어 있습니다.
저는 여기서 완전한 대답을 하려고 하지 않을 거예요.제가 추천하는 것은 각각이 무엇을 하는지 이해하는 데 초점을 맞추는 것입니다.그리고 그 효과가 완전히 다른지, 그리고 때때로 그것들이 함께 사용되는 이유를 명확하게 해야 합니다.
static
는 클래스 멤버(아트리뷰트 및 메서드)용이며 인스턴스(비 스태틱) 멤버와 대조하여 이해할 필요가 있습니다.Java 튜토리얼의 "인스턴스 및 클래스 구성원에 대하여"를 읽어보실 것을 권장합니다.또, 에도 사용할 수 있습니다.static
'이렇게 하면 안 돼요'가 됩니다.
final
는 변수, 메서드, 클래스 또는 기타 경우에 적용되는 경우에 따라 다른 의미를 가집니다.여기서는 위키피디아 설명이 더 좋아요.
정적 변수 값은 변수의 복사본 하나가 응용 프로그램을 통과하더라도 변경할 수 있지만 최종 변수 값은 한 번 초기화할 수 있으며 응용 프로그램 전체에서 변경할 수 없습니다.
언급URL : https://stackoverflow.com/questions/13772827/difference-between-static-and-final
'programing' 카테고리의 다른 글
컴포넌트 마운트 시 Vuex의 상태 데이터에 액세스하는 방법 (0) | 2022.08.12 |
---|---|
모든 문자가 고유한지 여부를 판단하기 위한 비트 벡터 사용법을 설명합니다. (0) | 2022.08.12 |
루프에서 For 확인란을 렌더링하고 Vue JS에서 해당 값을 바인딩합니다. (0) | 2022.08.12 |
탭을 사용하여 다른 컴포넌트를 로드하는 Vue.js 방법 (0) | 2022.08.08 |
VueJ - VueX 및 플래시 메시지 (0) | 2022.08.08 |