티스토리 뷰
Java 에 변수는 크게 클래스변수,인스턴스변수,지역변수로 분류할수있다.
- 클래스변수 와 인스턴스변수 모두 멤버 변수이다 멤버 변수랑 클래스 안에서 생성된 변수를 뜻한다.
- 지역변수 는 메소드 안에서 생성될떄 메모리가 할당되고 메소드가 종료되면 다시 메모리 해제 되어 사라진다.
위 3개의 변수 는 생성된 위치에 따라 구분이 나뉘는데, 클래스변수와 인스턴스 변수에 대해 좀더 알아보자
class Test{
int a ; //인스턴스 변수
static int b ; //클래스 변수
}
public class Hello2 {
public static void main(String[] args) {
Test.a = 20; // 인스턴스 변수는 객체생성(인스턴스화)될때 메모리에 할당이되기떄문에 인스턴스화 전엔 사용이불가!
Test.b = 10 ; //클래스 변수는 전역변수 로써 객체 생성(인스턴스화)하지 않아도 접근하여 사용이가능하다!
}
}
- 클래스변수는 클래스가 생성될때 Method Area 영역 에 저장된다.
- 인스턴스변수는 객체별 생성된 Heap Area 에 저장된다.
- b 변수(클래스변수) 는 method 영역에 저장되어 Test 클래스를 통해 만들어진 객체들은 공통된 값으로 공유한다.
- a 변수(인스턴스변수) 는 각각의 Heap 영역에 저장되기때문에 각각의 값을 따로 갖을수있다.
(Test 클래스를 new 를통해서 객체로 만든후 a 에 접근하여야만 Heap 영역에 저장되면서 hashCode 가 참조변수
에 담기고 실제 참조값은 Heap영역에 저장된다. class Test 내부에서 메서드를 만들고 출력문에 a. 을 찍으면
아직 객체로 생성되지않았기 떄문에 a.hascod() 생기지 않는 걸 확인할수있다
Test t = new Test(); t 는 Test를 가리키는 hashCode가있다.)
( 직관직으로 보이기위해 test1.b 으로 접근하여 값을 변경했지만, Test.b 로 접근하여 값을 변경하는 것이 바람직하다)
JVM 구조와 메모리구조에 대해 더알아봐야겠다..
'Java' 카테고리의 다른 글
Java 메소드 오버로딩( Method overloading ) (0) | 2022.04.07 |
---|---|
Java ( Stack Area 와 Heap Area ) (0) | 2022.04.06 |
Java ( Scanner.hasNext() Scanner.nextLine() ) 차이 (0) | 2022.04.06 |
Java( While 문과 for 문 에 Continue를 사용할 때 차이점) (0) | 2022.04.06 |
Java 데이터 타입 확인 (0) | 2022.04.05 |
- Total
- Today
- Yesterday
- mapDispatchToProps
- java숫자형배열
- java문자열배열
- nexLine
- java멤버변수
- Stack Area
- 클래스변수 인스턴스변수 차이
- Dispatch
- Java
- java최대값최소값
- e.toString()
- 오버로딩
- e.getMessage()
- 기본형타입
- 자바
- react-redux
- final 변수 초기화
- java 예외
- 클래스영역
- redux
- map set 변환
- e.printStackTrace()
- java 배열 출력
- Heap Area
- Scanner 와 BufferedReader 차이
- publi
- java전역변수
- set
- Method 영역
- List Set 변환
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |