java 클래스에는 두 가지 유형의 멤버 변수가 있습니다. 하나는 클래스 변수 또는 정적 변수라고 하는 static 키워드로 수정되는 변수이고, 다른 하나는 static으로 수정되지 않으며 인스턴스 변수입니다. .
문법적 정의의 차이점: static 키워드는 정적 변수 앞에 추가해야 하지만 인스턴스 변수 앞에는 추가하면 안 됩니다.
프로그램 실행 시 차이점: 인스턴스 변수는 객체의 속성에 속합니다. 인스턴스 객체가 생성되어야 그 안에 있는 인스턴스 변수에 공간이 할당되고, 이 인스턴스 변수를 사용할 수 있습니다. 정적 변수는 인스턴스 객체에 속하지 않고 클래스에 속하므로 클래스 변수라고도 합니다. 프로그램이 인스턴스 객체를 생성하지 않고 클래스의 바이트코드를 로드하는 한 정적 변수에는 공간이 할당되며 정적 변수를 사용할 수 있습니다. 즉, 인스턴스 변수는 이 개체를 통해 사용되기 전에 개체를 만들어야 하며, 정적 변수는 클래스 이름을 사용하여 직접 참조할 수 있습니다.
예를 들어, 다음 프로그램의 경우 인스턴스 객체가 아무리 많이 생성되더라도 항상 하나의 staticVar 변수만 할당되며, 인스턴스 객체가 생성될 때마다 이 staticVar는 인스턴스가 생성될 때마다 1씩 증가합니다. 객체가 생성되면 할당됩니다. 하나의 인스턴스Var는 여러 개의 인스턴스Var가 할당될 수 있으며 각 인스턴스Var의 값은 한 번만 증가한다는 의미입니다.
public class VariantTest { public static int staticVar = 0; public int instanceVar = 0; public VariantTest() { staticVar++; instanceVar++; System.out.println(“staticVar = ”++staticVar “, instanceVar = ” ++instanceVar); } }
메모리에는 클래스의 정적 변수가 하나만 있습니다. Java 가상 머신은 클래스를 로드하는 과정에서 정적 변수에 대한 메모리를 할당하며 정적 변수는 메서드 영역에 위치하며 모든 인스턴스에서 공유됩니다. 클래스. 정적 변수는 클래스 이름을 통해 직접 접근할 수 있으며, 그 생명주기는 클래스의 생명주기에 따라 달라집니다.
그리고 인스턴스 변수는 클래스의 인스턴스에 따라 달라집니다. 인스턴스가 생성될 때마다 Java Virtual Machine은 인스턴스 변수에 대한 메모리를 할당하며, 인스턴스 변수는 힙 영역에 위치하며 해당 수명 주기는 인스턴스의 수명 주기에 따라 달라집니다.
public class Temp { int t; //实例变量 public static void main(String args[]){ int t=1; //局部变量 System.out.println(t); //打印局部变量 Temp a= new Temp(); //创建实例 System.out.println(a.t); //通过实例访问实例变量 } }
결과는 다음과 같습니다.
1
0(멤버 변수에는 기본값이 있지만 지역 변수에는 없습니다.)
코드를 다음으로 변경합니다.
public class Temp { static int t; //类变量 public static void main(String args[]){ System.out.println(t); //打印类变量 int t=1; //局部变量 System.out.println(t); //打印局部变量 Temp a= new Temp(); //创建实例 System.out.println(a.t); //通过实例访问实例变量 } }
결과는
0
1
0
입니다.위 내용은 Java 정적 변수와 인스턴스 변수의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!