반응형
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
'JavaCode(review)' 카테고리의 다른 글
Static initialization block (0) | 2020.06.30 |
---|---|
Final statement / 1.개념 코딩/ 2. password 암호화 코딩 (0) | 2020.06.30 |
Account coding / access modifier 'private' example (0) | 2020.06.28 |
Scope 개념 코딩 (0) | 2020.06.28 |
nSum(int n), factorial(int n) 계승, fibonacci(int n) 수열 코딩 (0) | 2020.06.27 |