[java] Java의 전역 변수

Java에서 전역 변수를 어떻게 정의합니까?



답변

전역 변수를 정의하기 위해 정적 키워드를 사용할 수 있습니다

public class Example {
    public static int a;
    public static int b;
}

지금 당신은 전화로 어디서나 a와 b에 액세스 할 수 있습니다

Example.a;

Example.b;


답변

당신은하지 않습니다. 의도적으로 설계된 것입니다. 할 수 있어도하지 말아야합니다.

즉, Globals라는 클래스에 공개 정적 멤버 세트를 작성할 수 있다고합니다.

public class Globals {
   public static int globalInt = 0;
   ///
}

그러나 당신은 정말로해서는 안됩니다 :). 진심으로 ..하지 마십시오.


답변

다른 방법은 다음과 같은 인터페이스를 만드는 것입니다.

public interface GlobalConstants
{
  String name = "Chilly Billy";
  String address = "10 Chicken head Lane";
}

그것들을 사용해야하는 모든 클래스는 인터페이스를 구현해야합니다.

public class GlobalImpl implements GlobalConstants
{
  public GlobalImpl()
  {
     System.out.println(name);
  }
}


답변

의존성 주입을 사용하는 것이 좋습니다.

public class Globals {
    public int a;
    public int b;
}

public class UsesGlobals {
    private final Globals globals;
    public UsesGlobals(Globals globals) {
        this.globals = globals;
    }
}


답변

좋은 대답이 많이 있지만 다른 클래스가 클래스의 변수에 액세스하는 더 적절한 방법 인 getter 및 setter를 사용하는 것으로 간주 되므로이 예제를 제공하고 싶습니다.

변수를 공용으로 만드는 대신 게터와 세터를 사용하는 이유는 다음과 같습니다. var가 전역 매개 변수가되어 프로그램을 실행하는 동안 (팀과 코드를 개발하는 경우) 누군가 웹 사이트의 URL과 같이 변경하지 않기를 바랍니다. 이론적으로 이것은 변경 될 수 있으며 프로그램에서 여러 번 사용될 수 있으므로 전역 변수를 사용하여 한 번에 모두 업데이트 할 수 있기를 원합니다. 그러나 다른 누군가가 들어가서이 var를 변경하는 것을 원하지 않습니다 (아마도 그것이 중요하지 않은지도 모릅니다). 이 경우 단순히 setter 메소드를 포함하지 않고 getter 메소드 만 포함하십시오.

public class Global{
    private static int var = 5;

    public static int getVar(){
        return Global.var;
    }

    //If you do not want to change the var ever then do not include this
    public static void setVar(int var){
        Global.var = var;
    }
}


답변

Java에는 전역 변수가 없습니다

그럼에도 불구하고 우리가 가진 것은 static키워드이며 우리가 필요한 전부입니다. Java에서는 클래스 외부에 존재하는 것이 없습니다. 그만큼static키워드는 인스턴스 변수는 반대로, 하나의 복사본 만 그 값이 어느 시점에서 모든 인스턴스에 변경 및 액세스 할 수 있음을 의미 만든 그 클래스의 모든 인스턴스에 걸쳐 그 초월을 가지고있는 클래스 변수를 나타냅니다.

범위를 넘어 액세스 할 수있는 전역 변수가 필요한 경우 필요한 변수이지만 범위는 클래스가있는 위치에만 존재하며 이것이 전부입니다.


답변

실제로 Java OO 프로그램 에는 “GLOBAL” 이라는 개념이 없다

그럼에도 불구하고 프로그램의 어느 부분에서나 메소드를 실행하려는 경우가 있기 때문에 질문 뒤에 약간의 진실이 있습니다. 예를 들어 Phrase-O-Matic 앱의 –random () 메소드는 프로그램의 어느 곳에서나 호출 할 수있는 메소드입니다.

위와 같은 것을 만족시키기 위해서는 “전역과 같은 변수와 방법이 필요합니다”

글로벌 변수로 선언합니다.

 1.Mark the variable as public static final While declaring.

글로벌 한 방법을 선언 합니다.

 1. Mark the method as public static While declaring.

전역 변수와 메소드를 정적으로 선언했기 때문에 다음 코드를 사용하여 원하는 곳 어디에서나 호출 할 수 있습니다

ClassName.X

참고 : X는 요구 사항에 따라 메서드 이름 또는 변수 이름이 될 수 있으며 ClassName은 선언 한 클래스의 이름입니다.