[Java] Static variable
せいてきへんすう
従業員が入社するたびに発行される従業員番号、学生の学号など、複数のインスタンスで共有する変数が必要な場合は、Static変数を使用します.
Static変数は使用可能であるため、インスタンスではなくクラス名を直接参照します.
// serialNum은 static변수!
Student student1 = new Student();
student1.serial = 100;
// (X) 이렇게 인스턴스 이름을 사용해 참조하지 않고 아래와 같이 class이름으로 참조한다.
Student.serialNum = 100; // (O)
public static int getSerialNum() {
employeeName = "Lee"; // 이렇게 인스턴스 변수 사용이 안됨 (오류가 발생함)
return serialNum;
}
👨🏻💻 Example Code
Employee.java
package ch17;
public class Employee {
private static int serialNum = 1000;
private int employeeId;
private String employeeName;
private String department;
public Employee() {
serialNum++;
employeeId = serialNum;
}
public static int getSerialNum() {
return serialNum;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
EmployeeTest.java
package ch17;
public class EmployeeTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee employee1 = new Employee();
employee1.setEmployeeName("이순신");
System.out.println(Employee.getSerialNum());
Employee employee2 = new Employee();
employee2.setEmployeeName("김유신");
System.out.println(employee1.getEmployeeName() + "님의 사번은 " + employee1.getEmployeeId());
System.out.println(employee2.getEmployeeName() + "님의 사번은 " + employee2.getEmployeeId());
}
}
変数のメモリ容量と有効範囲
メンバー変数が多すぎると、インスタンスの作成時に余分なメモリが大量に割り当てられます.これは良いプログラムではありません.したがって、メンバー変数のみをclassのプロパティとして適切に使用することが望ましい.
クラス内のさまざまなメソッドで使用される変数は、メンバー変数として宣言することが望ましい.
静的変数は、プログラムがメモリにロードされるとデータ領域を占有するのではなく、配列などの大量のメモリを占有します.
Reference
Reference
この問題について([Java] Static variable), 我々は、より多くの情報をここで見つけました https://velog.io/@seongwon97/Java-3lm211fkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol