2016-10-16 2 views
0

Java 클래스에서 범위에 대해 학습했습니다. 그리고 배워서 나는 그것이 짧게 한 번 언급되고 결코 다시는 말하지 않았다는 것을 의미한다. 몇 가지 질문이 게시되었으며 두 코드 간의 차이점을 이해하는 데 어려움이 있습니다. 첫 번째 :Java의 변수의 개인, 정적 및 범위

public class Shadow3 { 
    private static int i = 99; 
    public static void main(String[] args) { 
     for (int i = 0; i < 10; i++) { 
      System.out.println(i); 
     } 
     System.out.println(i); 
    } 
} 

그리고 두 번째 :

public class Shadow4 { 
    private int i; 
    public void doSomething(int n) { 
     for (int i = 0; i < n; i++) { 
      System.out.println(i); 
     } 
    } 
    public static void main(String[] args) { 
     new Shadow4().doSomething(9); 
    } 
} 

내가 처음에 오류가 변수가 두 번 선언하는 것이 아니라는 것을 이해하지만, 내가 왜 범위를 이해하지 못하는 Shadow 클래스에서 선언 된 변수는 중복 오류를 발생시키는 main 메소드에 도달하지 않습니다. 나는 또한 for 루프의 i 값이 일시적이기 때문에 변수의 첫 번째 코드에서 변수가 for 루프에서 사용될 때 변수를 개인 정적으로 선언 할 수없는 이유를 이해하지만 어떻게 이해할 수 있습니까? 두 번째 코드의 변수 i는 여전히 사적이기 때문에 유효합니다.

+5

나도 블록을 생각하지 않는다 사용하는 거라고, 그래서 다른 위해, 당신은 인스턴스 변수를 가지고 Shadow3.i와 정적 변수를 참조 할 수 있습니다 코드에 오류가 있습니다. 왜 그들이 그렇게 생각하니? for 루프는 임시 변수를 가지며 범위 만 지정됩니다. 이 코드를 실행 했습니까? 너 뭐 알아 차 렸니? –

+0

당신이 완전히 옳습니다. 나는 수업을 삭제하고 다시 만들고 다시 시도해 보았다. 내 코드에서 다른 오류를 놓쳤을 것입니다. 감사합니다 :) –

+0

여기에 같은 질문입니다. http://stackoverflow.com/questions/10459487/difference-between-public-static-and-private-static-variables – Neeraj

답변

0

섀도우 클래스에서 선언 된 변수의 범위가 중복 오류를 유발하는 주 메서드에 도달하지 않는 이유를 알지 못합니다.

클래스 변수의 범위는 main 메소드에 도달합니다. 그러나이 교훈은 그림자에 관한 것입니다. 오류가 없어야합니다. 루프 변수

이 다음 반복을 위해 사용되는 경우 나 개인 정적으로 선언 될 수없는 변수 for 루프에서 I의 값이 임시 때문에

로컬 임시되고 범위가 맞습니다. 그렇지만 추론이 정확하지 않습니다. 지역 변수는 private 또는 static으로 선언 할 수 없습니다. 그게 그거야.

코드가 두 번째 코드의 변수 i가 유효한지 이해할 수 없습니다.이 코드는 여전히 비공개이므로 이해가되지 않습니다.

private은 문제가되지 않습니다. 변수는 default, protected 또는 public 일 수 있습니다. 코드는 여전히 유효합니다. 사실 두 코드 샘플이 모두 유효합니다. 처음에

, 당신은 doSomething 방법 내에서, 당신은 this.i 또는 Shadow4.this.i

+0

답변을 주셔서 대단히 감사합니다. 나는 방금 개인/정적이 문제가 아니었던 것처럼 보이는 원인이되는 코드와 별도의 오류가 있음을 깨달았다. –

+0

환영합니다. 이 문제가 해결되면 게시물 옆에있는 체크 표시를 사용하여 대답을 수락하십시오. –