#static


#static 붙어있는 메소드에서는 this, super 를 사용할 수 없다.
#Overriding 안됨

객체는 생성하지 않아도 되니까 클래스이름.(필드, 메소드) 이런식으로 사용가능.
*!!!!!클래스 이름으로!!!!!

field , method, { } block 앞에 사용이 가능하다.

1.소스 작성

2.컴파일
컴파일 시간에(실행 하기 전에) static 붙은 애들은 컴파일러가 class area에 만들어준다.
객체가 아무리 많아도 하나만 만들어진다. => 하나로 모든 객체가 공유를 한다.
static 여부에 따라서 생성 시간이 다르다.
그래서 실행할때 객체를 따로 생성 안해도 괜찮다.


3.실행
static이 없는 애들은 객체가 만들어 지는 순간 만들어지고 heap 영역에 사용된다
생성 시간과 장소 모두 다르다 static 타입과

package com.basic;

public class StaticTest {

    //1.static field. class area에 실행전 한개만 미리 만들어짐
    static int scount; //0 class 변수
    int count; //0 heap에 실행이 되면 객체마다 만들어짐. instance 변수
    //필드는 객체를 생성하면 기본값이 있다.
    
    public static void main(String[] args) {
        StaticTest s1 =new StaticTest();
        StaticTest s2 =new StaticTest();
        StaticTest s3 =new StaticTest();
        
        System.out.println(++s1.count+ "--" + ++s2.count +"--" + ++s3.count); //계속 1 출력
        System.out.println(++s1.scount+ "--" + ++s2.scount +"--" + ++s3.scount); //1,2,3 출력
        
    }

}


static method
객체 생성을 하지 않아도 됨


ex) StaticTest.java

public class StaticTest {
    //1.static field. class area에 실행전 한개만 미리 만들어짐, 객체 생성을 하지 않아도 됨
    static int scount; //0 class 변수
    int count; //0 heap에 실행이 되면 객체마다 만들어짐. instance 변수
    //필드는 객체를 생성하면 기본값이 있다.
    
    //2. static method
    public static void go() {
        System.out.println("gogogo~");
    }
}

HelloWorld.java
System.out.println(StaticTest.scount); //클래스 이름으로 static 변수 사용 가능
    StaticTest.go();




//3. static block :{ }

static 블럭은 main보다 먼저 사용된다.

static {
    System.out.println("static block-1");
}

main{

}

static {
    System.out.println("static block-2");
}

출력 결과
static block-1
static block-2
+main()





'JAVA > JAVA 기본 문법' 카테고리의 다른 글

[JAVA]-interface  (0) 2019.01.20
[JAVA]-abstract  (0) 2019.01.20
[JAVA]- final  (0) 2019.01.19
[JAVA]-Java Reference Type Casting  (0) 2019.01.19
[JAVA]-Java 상속  (0) 2019.01.19

+ Recent posts