프로그래밍/java

[자바JAVA] 변수의 종류(지역변수, 전역변수, 매개변수, 클래스 변수)

pupu91 2022. 7. 7. 21:14
반응형

변수의 종류

 


 

 

1. 클래스 변수 

   - static 키워드를 가지고 필드에 선언하는 변수 = 정적 필드 (메모리의 static영역 사용)

   - 프로그램 시작시 생성, 프로그램 종료시 소멸

 

2. 멤버 변수(인스턴스 변수)

    - static 키워드 없이 필드에 선언하는 변수 (메모리의 heap영역 사용)

    - 인스턴스 생성 시 생성, 참조하지 않을시 소멸(가비지컬렉터가 소멸시킴)

 

3. 지역 변수

   - 메소드, 생성자, 초기화 블록 내부에서 선언하는 변수

   - 메소드 호출 시 생성, 메소드 종료시 소멸

 

 

public class KindsOfVariable { 클래스 영역의 시작

	(1) 클래스 영역에 작성하는 변수를 필드라고 함
    
    (2)  인스턴스 변수(=전역변수)
      private int globalNum;
    
    (3) 클래스 변수(=정적 필드)
    

public void testMethod(int num) { 메소드 영역의 시작
	                     ↑
    (4) 괄호 안에 선언하는 변수는 매개변수
        (매개변수도 일종의 지역 변수)
   
    (5) 지역변수
    int localNum;
    
    System.out.println(num); 
    ↑
    매개변수는 호출 시 값이 넘어와서 변경되기 때문에 초기화 필요없음
    지역변수는 선언 외에 다시 사용하기 위해서는 반드시 초기화 필요
    
    System.out.println(globalNum);
    ↑
    전역변수는 클래스 전역에서 사용 가능
   
   } 메소드 영역의 끝
   
public void testMethod2() {
	
    
    (x) System.out.println(localNum);
    ↑
    지역 변수는 해당 지역(블럭 내)에서만 사용 가능
	
    System.out.println(globalNum);
    System.out.println(staticNum);
    ↑
    전역 변수는 다른 메소드에서도 사용 가능함.
		
	}

 

반응형

 

 

 

4. 여러 변수의 초기화 방법

 

 

 

 

(1) 필드를 초기화하지 않으면 JVM이 정한 기본 값으로 객체가 생성

(2) 명시적인 초기화
private String name = "신라면";
private int price = 100;
private static String brand = "농심";

(3) 인스턴스 초기화 블록

{ name = " 라면"
  price = 500;
  brand = "삼양"; }
  => 인스턴스 초기화 블럭이 동작하는 시점에는 이미 최화가 진행 된 정적 필드에 
     인스턴스 초기화 블럭에서 대입한 값으로 덮어쓰게 된다.
  
  
(4) static 초기화 블록
 static {
 	
    brand = "롯데";
 => static 초기화 블록에서는 non=static 필드를 초기화 하지 못함.
 정적 초기화 블럭의 동작 시점(프로그램 실행 시)에는 인스턴스가 아무것도 존재할 수 없기 때문에
 존재하지 않는 인스턴스 변수에 초기화 하는 것은 시기 상으로 불가능 함.
 
 }
 
 (5) 생성자로 staic 변수 초기화시 클래스명.변수명 = 변수명; 으로 초기화

 

반응형