본문 바로가기

JavaCode(review)

Static Statement

반응형

Variable이 static이냐 아니냐에 따른 다른 결과값. (Static : memory기능 있음.)

 

 numInstance값 증가의 다른 결과. 1. non static : 다음 실행때 초기값에서 다시 시작

                                             2. static  : 다음실행때 저장된 값에서 시작(이전 실행의 결과값)

 

1. Non static 변수(numInstances) > 결과값 1, 1, 1

package com.timbuchalka._static;

//StaticTest Class

public class StaticTest {
    private int numInstances = 0;			//non static variables		V
    private String name;

    public StaticTest(String name) {        //constructor
        this.name = name;
        numInstances++;					//constructor 실행시, numInstance 증가		V
    }

    public int getNumInstances() {       //getter
        return numInstances;
    }

    public String getName() {           //getter
        return name;
    }
}

//Main Class
package com.timbuchalka._static;

public class Main {

    public static void main(String[] args) {
        StaticTest firstInstance = new StaticTest("1st Instance");	//object//call constructor
        System.out.println(firstInstance.getName() + " is instance number " + firstInstance.getNumInstances());

        StaticTest secondInstance = new StaticTest("2nd instance");
        System.out.println(secondInstance.getName() + " is instance number " + secondInstance.getNumInstances());

        StaticTest thirdInstance = new StaticTest("3rd instance");
        System.out.println(thirdInstance.getName() + " is instance number " + thirdInstance.getNumInstances());
	}
}

//Output

D:\IT\JDK\jdk11.0.6_10\bin\java.exe "-javaagent:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar=51225:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\IT\script\static statement\out\production\Static" com.timbuchalka._static.Main
1st Instance is instance number 1	
2nd instance is instance number 1		// 다음 실행때 초기값에서 다시시작		V
3rd instance is instance number 1		// 다음 실행때 초기값에서 다시 시작		V

Process finished with exit code 0

 

2. numInstance변수를 static 변수로 바꿔보자. 결과값 : 1 ,2 ,3

 

//StaticTest Class


package com.timbuchalka._static;

public class StaticTest {
    private static int numInstances = 0;		//static variable	V
    private String name;

    public StaticTest(String name) {        //constructor
        this.name = name;					//constructor 실행시, numInstance값 증가.
        numInstances++;
    }

    public int getNumInstances() {       //getter
        return numInstances;
    }

    public String getName() {           //getter
        return name;
    }
}

//Main Class 
package com.timbuchalka._static;

public class Main {


    public static void main(String[] args) {
        StaticTest firstInstance = new StaticTest("1st Instance");		//object // call constructor
        System.out.println(firstInstance.getName() + " is instance number " + StaticTest.getNumInstances());

        StaticTest secondInstance = new StaticTest("2nd instance");
        System.out.println(secondInstance.getName() + " is instance number " + StaticTest.getNumInstances());

        StaticTest thirdInstance = new StaticTest("3rd instance");
        System.out.println(thirdInstance.getName() + " is instance number " + StaticTest.getNumInstances());
	}
}

OutPut

D:\IT\JDK\jdk11.0.6_10\bin\java.exe "-javaagent:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar=51132:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\IT\script\static statement\out\production\Static" com.timbuchalka._static.Main
1st Instance is instance number 1
2nd instance is instance number 2			//다음 실행때, memory 값에서 시작		V
3rd instance is instance number 3			//다음 실행때, memory 값에서 시작		V

Process finished with exit code 0

 

3. static 변수 numInstance에 getter method를 static으로 입력보자.

 

  -> Main 에 입력시, object.method가 아닌,  className.method로 입력이 가능해서, Class가 많을때, 굳이 object일일이define 할 필요없어 편하다.

 

(참고. Main method가 static method니 다른 클래스의 static method 쓰는거 가능-static은 자기들끼리만 이용가능)

package com.timbuchalka._static;		//static getter설정해보자.

public class StaticTest {
    private static int numInstances = 0;		//static variable
    private String name;

    public StaticTest(String name) {        //constructor
        this.name = name;
        numInstances++;
    }

    public static int getNumInstances() {       // static getter		V
        return numInstances;
    }

    public String getName() {           //getter
        return name;
    }
}

//Main Class

package com.timbuchalka._static;

public class Main {	
								//main method도 static method이다.	V

    public static void main(String[] args) {		
      StaticTest firstInstance = new StaticTest("1st Instance");
      System.out.println(firstInstance.getName() + " is instance number " + StaticTest.getNumInstances());	//V
													
      StaticTest secondInstance = new StaticTest("2nd instance");
      System.out.println(secondInstance.getName() + " is instance number " + StaticTest.getNumInstances());	//V

      StaticTest thirdInstance = new StaticTest("3rd instance");
      System.out.println(thirdInstance.getName() + " is instance number " + StaticTest.getNumInstances());	//V

			//className.method로 그냥 입력가능. StaticTest.method		V
            // static method는 static field나 static method끼리만 사용가능. 
    }
}

//Output    // 동일 - 1 , 2 ,3

D:\IT\JDK\jdk11.0.6_10\bin\java.exe "-javaagent:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar=51311:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\IT\script\static statement\out\production\Static" com.timbuchalka._static.Main
1st Instance is instance number 1
2nd instance is instance number 2
3rd instance is instance number 3

Process finished with exit code 0