programing

정적과 최종의 차이점

javaba 2022. 8. 12. 22:41
반응형

정적과 최종의 차이점

는 항상 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★.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.Stringfinal으로 "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을 참조해 주세요. ""의 인스턴스를 할 수 ?Cn아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.

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

반응형