아래의 코드를 보자.
class A{
int i=10;
public void static main(String[] args){
System.out.println(i);
}
}
이 코드를 자바에서 실행하면 컴파일 에러가 뜬다. 왜일까?
왜냐하면 class A를 객체화를 하지 않았기 때문이다.
따라서 메인메모리에 int i=10; 가 올라와있지 않아서 System.out.println(i); 에서 변수 i를 찾을 수 없기 때문에 에러가 뜨기 때문이다.
그런대 위에서 class A를 new A()를 하지 않았는대도 main()메서드가 실행되는 이유는 무엇일까?
바로 메인 method앞에 static이 붙어 있기 때문에, new A()로 객체화를 하지 않아도 하드디스크에서 저절로 메인 메모리에
올라가기 때문에 실행이 되는 것이다.
위의 코드를 오류 없이 실행되게 하려면
class A{
public void static main(String[] args){
int i=10;
System.out.println(i);
}
}
int i=10; 를 main메서드 안에 넣으면 main메서드가 static이므로 객체화를 안해도 저절로 하드디스크에서 메인메모리로 올라가게 되어
실행이 된다.
다른 방법으로는
class A{
int i=10;
public void static main(String[] args){
A a = new A();
System.out.println(a.i);
}
}
A a = new A(); 로 class A를 객체화를 하여 Class A 전부를 메인메모리에 올린 다음 a.i 로 접근하여 사용할 수 있다.
아래는 개인적으로 끄적여 놓은 것이다.
------------------------------------------------------------------------------------------------------------------------
java 에서 new class();를 해야 클래스가 하드디스크에서 메인메모리에 올라간다.
이것을 객체화라 하고 객체화를 해야 해당하는 클래스 내에 있는 변수나 메서드를 사용할 수 있다.
하드디스크에 있는 메모리는 cpu에서 접근할 수 없기 때문이다.
메모리에 올라간 클래스를 객체라 한다.
안드로이드에서 버튼을 객체화를 한다 == "버튼 클래스를 메모리에 올린다."는 뜻이다.
하지만 static를 사용하면 'new class()'의 과정 없이 static이 붙은 코드가 하드디스크에서 메인메모리로 올라간다.
즉, 객체화를 하지 않고도 메모리에 올라가서 그 코드를 사용할 수 있다.
안드로이드 스튜디오에서는 activity별로 객체화를 사용자가 하지 않는다.
우리가 manifests에 activity를 등록하면 시스템이 사용자 대신 객체화를 해준다.
'안드로이드+자바' 카테고리의 다른 글
안드로이드 애니메이션 만드는 법 (0) | 2017.01.05 |
---|---|
안드로이드 이미지 버튼 만드는 법 (0) | 2017.01.05 |
안드로이드 액션바, 옵션메뉴 만드는 법! (0) | 2017.01.03 |
안드로이드 화면 전환시키는법! (0) | 2016.12.30 |
addView(View, LayoutParams) is not supported in AdatperView 예외가 발생할 때 해결법! (0) | 2016.12.27 |
댓글