Language/Java

[JAVA 26] 자바 ② 소유 제한자 ( static )

reifier.tistory.com 으로 이전하였습니다. 2018. 2. 14. 11:47
반응형


2) 소유 제한자 ( static )

(1) static 이 붙으면 클래스 소유 , 붙지 않으면 객체 소유가 된다.

(2) 특징

Class ( 클래스 ) 와 Constructor ( 생성자 ) 앞에는 붙지 못한다.

Memeber Variable ( 멤버 변수 ) 와 Method ( 메소드 ) 앞에만 붙을 수 있다.


 

error : illegal start of expression

에러 :  불법적인 표현이 시작되었다.


error : class , interface , or enum expected  // (Enumeration ( 열거 타입 ) 나중에 하겠다.)

에러 : 클래스 , 인터페이스 , 또는 열거타입 이 예상된다.


② static method 내에서는 객체 생성 없이 static 자원을 호출 가능하다.

    해당 자원에 클래스 이름이 생략이 된다.

Local Variable ( 지역변수 ) 에는 static 이 붙을수 없다.

    오직 Member Variable ( 멤버 변수 ) 만이 소유의 대상이 된다.

④ 다른 클래스에서 static 자원을 호출할 때에는 클래스 이름을 생략할 수 없다. 

           

1
2
3
4
5
6
7
8
9
10
11
12
class StaticS1{        // static Study 1
 
    static int i = 10;
 
    StaticS1(){
        // static String name = "CIVIC";    // 불가능하다.
    }
 
    static void m(){
        System.out.println("메소드 내용");
    }
}

cs

1
2
3
4
5
6
class User1{    // User1 클래스에서 StaticS1 클래스의 자원을 사용한다.
    public static void main(String[] args){
        System.out.println(" i : " + StaticS1.i);    // 클래스.변수
        StaticS1.m();
    }
}

cs



static 자원은 메모리에 오직 1개 생성이 된다.

    해당 클래스의 모든 객체에서 공유 되어진다.


⑥ static 메소드에서는 this 와 super 을/를 사용할 수 없다.

error : non-static variable super cannot be referenced from a static context

에러 : static 문맥으로 부터 non-static 변수 super 를 참조 ( 언급 ) 할 수 없다.

      this

error : non-static variable this cannot be referenced from a static context                     

error : non-static variable a cannot be referenced from a static context


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class StaticS2{
 
    int a;
    static int b;
 
    StaticS2(){
        a++;
        b++;
    }
 
    public static void main(String[] args){
        // String name = super.toString();            // 불가능 !!
        // System.out.println(" this.a : " + this.a); // 불가능 !!
 
        StaticS2 ss1 = new StaticS2();
        StaticS2 ss2 = new StaticS2();
        StaticS2 ss3 = new StaticS2();
 
        System.out.println("    a : " + ss3.a);
        System.out.println(" 1. b : " + ss3.b);
        System.out.println(" 2. b : " + ss3.b);
            // static 변수는 객체로 호출해도 되고, 클래스로 호출해도 된다.
    }
}

cs



여기서 문제 !

< 문제 : a 는 1 인데 , b 는 어째서 3일까?? >


비유를 하나 들어볼까 !

< 주의 : 이 비유가 static 공부에 방해가 될 수 있습니다. > 

< 또한 혼란을 야기할 수 있습니다. >



반응형