본문 바로가기

Java/Java

(JAVA) static keyword in java

static 연산자는 하기와 같은 네 가지 경우에 적용 가능하다.

  1. blocks
  2. variables
  3. methods
  4. nested classes

어떠한 멤버가 static으로 선언되어있을 때, 클래스의 오브젝트가 생성되기 이전에 접근 가능하다 이때 접근 시 어떠한 오브젝트의 참조가 필요 없다.

 

package statickeyword;

public class StaticExercise {
	
	static void method01() {
		System.out.println("I am static Method...!");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		method01();
	}

}

위의 코드를 예시로 StaticExercise의 인스턴스를 생성할 필요 없이 메서드에 직접적인 호출이 가능하다.

 

실행결과

 

만약 우리가 static 변수를 초기화하기 위해선, 클래스가 로드될 때 딱 한번 실행되는 static 블록 내부에 선언해야 한다.

 

public class StaticExercise2 {
	
	static int var1;
	static int var2;
	
	static {
		var1 = 1;
		var2 = 2;
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//StaticExercise2.var1;
		System.out.println(StaticExercise2.var1);
		System.out.println(StaticExercise2.var2);
	}

}

실행결과

어떠한 변수가 static으로 선언될 때, 해당 변수의 복사본이 클래스 수준의 모든 오브젝트에 공유된다.

이때 모든 클래스의 인스턴스들은 똑같은 static 변수를 공유한다.

 

Key Point

  • 클래스 수준에서만 static 변수를 생성할 수 있다.
  • static 블록과 static 변수는 프로그램에 존재하는 순서대로 실행되어진다.
public class StaticExercise3 {
	
	static {
		System.out.println("Inside static block");
	}
	
	static int var1 = method01();
	
	
	static int method01() {
		System.out.println("static mehod01");
		return 1000;
	}
	
	public static void main(String[] args) {
		System.out.println("value of var1 ::" + StaticExercise3.var1);
		System.out.println("Inside main method");
	}

}

 

실행결과


static 메서드 제약사항

  • They can only directly call other static methods.
  • They can only directly access static data.
  • They cannot refer to this or super in any way.
public class StaticExercise3 {

    int localVariable = 1;

    static {
        System.out.println("Inside Static Block...!");
    }

    static int method01() {

        // TODO: [method01] junwoochoi 2020/03/04 8:42 오후
        // static 메서드에는 지역 변수, 일반 메서드 선언 및 초기화 불가
//        localVariable = 2;
//        method02();
        return 100;
    }

    private void method02() {
        System.out.println("Inside none-static Method...!");
    }

    public static void main(String[] args) {
        System.out.println(StaticExercise3.method01());
        System.out.println("Inside Main Method...!");
    }
}

실행결과


static의 활용

class Company {
	
	static String companyName;
	static int cnt = 0;
	
	private final String name;
	private final int id;
	
	public Company(String name, int id) {
		this.name = name;
		this.id = id;
		cnt++;
	}
	public static void main(String[] args) {
		Company company0 = new Company("choi",01234);
		Company company1 = new Company("kim",01235);
		
		System.out.println("생성 횟 수 : "+Company.cnt);
		
		Company.companyName = "카카오";
		Company.companyName = "라인";
		Company.companyName = "네이버";
		System.out.println(Company.companyName);
	}
}

실행결과


References

https://www.geeksforgeeks.org/static-keyword-java/

 

static keyword in java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

Code Link

https://github.com/mike6321/PURE_JAVA/tree/master/EffectiveStudy

 

mike6321/PURE_JAVA

Contribute to mike6321/PURE_JAVA development by creating an account on GitHub.

github.com