2014-11-21 7 views
0

필자는 메인 클래스의 전역 변수를 참조하거나 액세스해야 할 필요성을 느꼈습니다. 나는 또한 스레드 (네트워킹 물건에 대한)와 관련된 또 다른 클래스를 사용하고 있습니다. 기본적으로 나는 그에게 다음과 같은 방법으로 할 수 있다면 (내가 확인했는데 내가 어떤 컴파일 오류하지 않습니다) 궁금 해서요 :메인 클래스에서 전역 변수를 참조 하시겠습니까?

public class One 
{ 
    public static int number; 

    public static void main(String [] args) 
    { 
     number = 5; 
     Two two = new Two(); 
     System.out.println(number);   
    } 
} 

public class Two 
{ 
    public Two() 
    { 
     One.number = 10; 
    } 
} 

그리고 경우, 즉 허용됩니다? 더 나은 방법이 있습니까 (다른 인수는 일반적으로 인수를 전달합니다)?

시간을내어 읽어 주셔서 감사합니다. 혼란 스럽다면 (피곤한 x.x) 죄송합니다. 난 당신이 아닌 "말 했는가 가정

//Accessor 
public int getNumber() 
{ 
    return number; 
} 

//Mutator 
public void setNumber(int num) 
{ 
    number = num; 
} 

:

+0

별로 명확하지 않습니다. 여기에 인수를 전달하는 문을 찾을 수 없습니다. –

+0

수 있습니까? 예. 너? 아마도 그렇지 않습니다. 받아 들일 수 있습니까? ['System.in'] (https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#in) 및 ['System.out'] (https : // docs .oracle.com/javase/7/docs/api/java/lang/System.html # out)은 적어도 "final"입니다. 나는 그것이 '최종'이라면 냄새가 감소한다고 생각하지만, 완전히 제거되지는 않는다. 왜 글로벌이 필요합니까? –

+0

@bachu'One.number = 10;'은 전역 변수에 'One'값을 할당합니다. –

답변

0

선호하는 방법이 될 개인 변수로 가지고와 같은 정보를 포함하는 클래스에 접근 및 뮤 테이터 방법을 추가 할 것이라고해야 할 일 인수를 전달 "하지만, 당신이 물었을 때 이것이 이것을 행하는 수락 가능한 방법이 될 것입니다. 이런 식으로 외부 클래스가 데이터를 잘못 조작하는 것을 방지 할 수 있습니다.

+0

좋아, One.setNumber (10); ? – Honor

+0

@Honor 예, 맞습니다. 그러나이 방법으로 사용하려면 setNumber 메서드를 정적으로 만들어야합니다. – user3424612

+0

Ahh okay, 나는 또한 그것에 관해 궁금하게 생각하고 있었다! – Honor

0

액세스하는 것이 좋지만 스레딩을 사용하는 경우 여러 스레드가 해당 변수에 동시에 writting하지 않도록하십시오. 이 경우 쓰기 작업에 동기화 블록을 사용하거나 잠금 메커니즘을 사용할 수 있습니다. 이것에 대해서도 한 가지 제안이 있습니다. 그 변수를 private로 만들고 getter와 setter를 사용하여 가시성과 오용을 제한하기 위해이 변수에 액세스하십시오.

관련 문제