static 은 제어자의 한 종류로 '공통적인' 이라는 의미를 가지고 있다.
클래스 내의 멤버변수, 메소드, 초기화 블럭에 붙여서 사용할 수 있다.
그 중 멤버변수와 메소드는 static 존재 여부에 따라 용도와 용어가 달라진다.
- static이 붙음
-클래스 변수
-클래스 메소드
-static 블럭
- static이 안붙음
-인스턴스 변수
-인스턴스 메소드
각각의 형태와 용도, 사용방법에 대해 알아보자.
class StaticTest { static int age; // 클래스변수 static { // static 블럭 - 클래스 변수를 초기화 age = 30; } }
❓ 왜 변수의 값을 초기화 하는걸까?
모든 인스턴스가 공통으로 유지해야하는 속성의 값을 클래스 변수로 정의한다.
클래스 영역에 선언되며 클래스의 인스턴스가 생성될 때 만들어지는 변수
클래스 영역 이외의 영역에 선언된 변수
(1) static 메소드 안에서 static 메소드 호출하기 : 메소드이름();
public class Myclass { int num; // 인스턴스 변수 static int staticNum = 100; // 클래스 변수 static { // static 블럭 } public static void test1(){ // 클래스 메소드1 test2(); // 클래스 메소드2 호출 } public static void test2(){ // 클래스 메소드2 System.out.println(staticNum); }
(2) 인스턴스 메소드에서 인스턴스 메소드 호출하기 : 메소드이름();
public class Myclass { int num = 10; // 인스턴스 변수 static int staticNum; // 클래스 변수 public void instance1(){ // 인스턴스 메소드1 instance2(); // 인스턴스 메소드2 호출 } public void instance2(){ // 인스턴스 메소드2 System.out.println(num); }
(3) 인스턴스 메소드에서 클래스 메소드 호출 : 메소드이름();
public class Myclass { int num = 10; // 인스턴스 변수 static int staticNum = 100; // 클래스 변수 public void instance1(){ // 인스턴스 메소드 test1(); // 클래스 메소드 호출 } public static void test1(){ // 클래스 메소드 System.out.println(staticNum); }
(4) 클래스 메소드에서 인스턴스 메소드 호출
: 인스턴스를 생성한 후 호출
public class Myclass { int num = 10; // 인스턴스 변수 static int staticNum = 100; // 클래스 변수 public void instance1(){ // 인스턴스 메소드 System.out.println(num); // 클래스 메소드 호출 } public static void test1(){ // 클래스 메소드 Myclass obj = new Myclass(); obj.instance(); }
(정리하는 대로 채워나가기!)
