logo

비정적 변수를 Java의 정적 컨텍스트에서 참조할 수 없는 이유

오류 비정적 변수는 Java의 정적 컨텍스트에서 참조할 수 없습니다. Java 프로그램을 컴파일할 때 초보자가 가장 많이 직면하는 문제입니다. 이 오류가 발생하는 이유는 main() 메서드에서 비정적 멤버 변수를 사용하기 때문입니다. Java의 main() 메소드는 정적 메소드이고 자동으로 호출되므로 이를 호출하기 위해 객체를 생성할 필요가 없습니다. 오류를 이해하려면 먼저 오류를 이해해야 합니다. 공전 그리고 비정적 자바의 메소드 .

정적 방법

~ 안에 자바 , 공개 메소드는 클래스의 인스턴스에 속하지만 우리가 이야기한다면 정적 방법 , 그들은 클래스의 인스턴스가 아닌 클래스에 속합니다. 정적 메서드를 호출하기 위해 클래스의 인스턴스를 만들 필요가 없습니다. 정적 멤버는 정적 데이터 멤버에만 액세스할 수 있으며 해당 값을 변경할 수 있습니다.

비정적 방법

없는 모든 방법 공전 메소드 이름 앞의 키워드는 다음과 같습니다. 비정적 행동 양식. 정적 메서드와 정적 변수에 액세스하기 위해 클래스의 인스턴스를 만들 필요가 없습니다. 비정적 메서드는 동적 또는 런타임 바인딩으로 사용됩니다. 같지 않은 공전 메서드를 재정의할 수 있습니다. 비정적 방법.

Java 프로그램을 생성하고 동일한 오류를 생성해 보겠습니다.

병렬 처리

다음 예에서는 개인 변수를 선언했습니다. 숫자 main() 메소드 앞에 int 유형이 있습니다. main() 메소드에서 우리는 숫자를 1씩 증가시키려고 합니다. main() 메소드는 정적 메소드이고 변수는 정적이 아니라는 점에 유의해야 합니다. 위 프로그램을 컴파일하면 아래와 같이 동일한 오류가 발생합니다.

StaticExample1.java

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

산출:

숨겨진 앱을 공개하는 방법
비정적 변수를 Java의 정적 컨텍스트에서 참조할 수 없는 이유

이제 변수를 선언해보자 숫자 정적으로 코드를 컴파일합니다. 변수와 main() 메서드는 모두 정적입니다.

StaticExample2.java

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

산출:

비정적 변수를 Java의 정적 컨텍스트에서 참조할 수 없는 이유

프로그램이 성공적으로 컴파일되고 실행됩니다.

비정적 변수의 각 인스턴스는 서로 다른 값을 가지며 new() 연산자가 객체의 인스턴스를 초기화할 때 생성됩니다. 정적 변수는 클래스가 로드될 때 생성되거나 초기화됩니다. JVM .

비정적 변수를 호출하려면 객체의 인스턴스가 필요합니다. 비정적 또는 인스턴스 변수에 다른 값을 제공하여 많은 개체를 만들 수 있습니다.

자바의 세트

StaticExample3.java

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

산출:

비정적 변수를 Java의 정적 컨텍스트에서 참조할 수 없는 이유

위 프로그램에서는 세 개의 객체, var1, var2, var3 , 클래스용으로 생성됩니다. 변하기 쉬운 객체에 대해 세 가지 다른 값 12, 13, 14를 할당했습니다. var1, var2 , 그리고 var3 , 각각. 이제, 숫자 각 객체의 속성에는 고유한 정수 값이 있습니다. increment() 메서드를 호출하여 number 속성의 값을 증가시키려고 하면 컴파일러는 메서드가 값을 증가시켜야 하는 숫자 값이 무엇인지 이해하지 못합니다. 컴파일러는 모호성 오류에 직면하고 컴파일 시간 오류를 발생시킵니다. 비정적 변수는 정적 컨텍스트에서 참조할 수 없습니다. .

오류에 대한 해결책

간단하게 해결하는 방법이 하나 있는데 비정적 변수는 정적 컨텍스트에서 참조할 수 없습니다. 오류. 위 코드에서는 객체 이름으로 비정적 변수를 처리해야 합니다. 간단한 방법으로 정적 컨텍스트에서 비정적 변수를 참조하기 위해 클래스의 객체를 생성해야 합니다. 변수의 새 인스턴스가 생성되면 모든 비정적 변수의 새 복사본이 생성됩니다. 따라서 클래스의 새 인스턴스 참조를 사용하여 이러한 변수에 액세스할 수 있습니다. 예를 들어, 다음 Java 프로그램을 고려하십시오.

자바의 동적 배열

StaticExample4.java

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

산출:

비정적 변수를 Java의 정적 컨텍스트에서 참조할 수 없는 이유

설명

위 프로그램에서는 클래스 이름을 사용하여 숫자 속성에 액세스합니다. 정적예. StaticExample 클래스 이름의 객체를 생성합니다. 시험 그리고 증가 숫자의 값 테스트 개체를 사용하여