Static
변수를 Main
내부에 선언 할 수 있습니까? 오류 메시지가 표시되기 때문에 :Main 메서드 내에 정적 변수를 선언하려면 어떻게해야합니까?
Illegal Start of Expression
Static
변수를 Main
내부에 선언 할 수 있습니까? 오류 메시지가 표시되기 때문에 :Main 메서드 내에 정적 변수를 선언하려면 어떻게해야합니까?
Illegal Start of Expression
분명히, 아니, 우리는 할 수 없습니다.
Java에서 static
은 클래스의 변수/메소드이며 전체 클래스에 속하지만 특정 객체에는 속하지 않음을 의미합니다.
즉, static
키워드는 '수업 범위'에서만 사용할 수 있습니다. 즉, 방법 내에서 의미가 없습니다.
그것은 C 함수에서 가지고있는 의미를 가질 수 있습니다 ... 위키피디아에서 : "정적 지역 변수 : 함수 내부에서 정적 내부로 선언 된 변수는 자동 지역 변수와 동일한 범위를 가지면서 정적으로 할당됩니다. 함수가 다시 호출 될 때 하나의 호출 중에 정적 로컬 변수에 계속 남아 있습니다. " –
@functional : 내 제안은 질문 근처의'java' 태그에 기반합니다. – Roman
좋아, 알았다. 나는 그저 내부 방법이기도하다는 것을 말하고 있습니다. That 's all –
왜 그럴 수 없습니까? 항상 클래스 레벨에서 선언 할 수 있습니다.
메소드 내부의 정적 변수는 C 및 C++에서 유효합니다. 아마도 그의 배경입니다. –
Java는 C++이 아닙니다. C/C++의 정적 변수는 함수가 끝난 후에 삭제되지 않는다는 장점이 있으므로 어디에서나 전달할 수 있습니다. Java의 가비지 컬렉터를 사용하면 변수를 전달할 수 있으므로 걱정하지 않아도됩니다. 그래서 그의 요점이 무엇인지 물었습니다. 귀하의 의견에 감사드립니다. –
당신은 당신의 main
방법 내부 정적 변수 (또는 다른 방법)을 사용할 수 있지만 클래스를 선언해야합니다
이 완전히 괜찮 :
public Class YourClass {
static int someNumber = 5;
public static void main(String[] args) {
System.out.println(someNumber);
}
}
이 너무 괜찮습니다 ,이 경우 someNumber
은 정적 변수가 아니라 로컬 변수입니다. 정적 변수는 클래스 로딩 시간에 메모리를 할당하고이 방법 내부 정적 변수가있는 경우 메모리는 once.Now 할당되기 때문에
public Class YourClass {
public static void main(String[] args) {
int someNumber = 5;
System.out.println(someNumber);
}
}
, 그 변수는 메소드의 범위에 제공하지 클래스의 클래스의 객체에 의해 메소드가 호출 되었기 때문에 런타임에 클래스 로딩 시간이 아니라 JVM에서 메모리를 할당 할 수 없습니다.
정적 변수는 전체 클래스에서 사용할 수 있으므로 개념적으로는 정적 블록이나 메서드가 모두 자체 범위를 갖는 전역 범위 인 클래스 뒤에 선언 할 수 있습니다.
C에서는 로컬 범위 변수를 정적으로 할당 할 수 있습니다. 불행하게도 이것은 Java에서 직접 지원되지 않습니다. 그러나 중첩 된 클래스를 사용하여 동일한 효과를 얻을 수 있습니다.
예를 들어, 다음은 허용되지만 x의 범위가 필요 이상으로 크기 때문에 잘못된 엔지니어링입니다. 또한 두 멤버 (x와 getNextValue) 사이에 명확하지 않은 종속성이 있습니다.
static int x = 42;
public static int getNextValue() {
return ++x;
}
하나는 정말 다음을 수행하고 싶지만, 그것은 정당하지 않은 : 당신이 대신 할 수 그러나
public static int getNextValue() {
static int x = 42; // not legal :-(
return ++x;
}
,
public static class getNext {
static int x = 42;
public static int value() {
return ++x;
}
}
그것은 더 나은 설계는 비용이다 어떤 추함의.
해당 코드를 붙여 넣으십시오. –
일부 의견 제시자가 말한 것처럼 질문이 C에서이 작업을 수행 할 수 있다는 사실에 영감을받은 경우 Java 및 C의 차이점을 지적함으로써 답변을 통해 도움을 얻을 수 있도록 질문에 해당 사실을 표시해야합니다. – MatrixFrog
왜 우리는 방법 안에서 정적 변수를 사용해야하는지 잘 알면 더 잘 대답 할 수 있습니까? 메소드 내에서 선언 된 모든 변수는 해당 메소드에 대해서만 범위가 지정됩니다.해결하려는 문제가 무엇인지 알려주십시오. 그러면 좋은 답변을 찾을 수있을 것입니다. – CoolBeans