답변:
둘 다 멤버 변수이므로 클래스와 연관되어 있습니다. 물론 둘 사이에는 차이점이 있습니다.
인스턴스 변수 :
이러한 변수 는 클래스 의 인스턴스에 속하므로 객체입니다. 그리고 해당 클래스 (객체)의 모든 인스턴스에는 해당 변수의 자체 사본이 있습니다. 변수에 대한 변경 사항은 해당 클래스의 다른 인스턴스에 반영되지 않습니다.
public class Product {
public int Barcode;
}
클래스 변수 :
이들은 정적 멤버 변수 라고도하며 해당 클래스의 모든 인스턴스와 공유되는 해당 변수의 사본은 하나뿐입니다. 해당 변수가 변경되면 다른 모든 인스턴스는 변경 효과를 보게됩니다.
public class Product {
public static int Barcode;
}
전체 예 :
// INSTANCE VARIABLE
public class Main {
public static void main(String[] args) {
Product prod1 = new Product();
prod1.Barcode = 123456;
Product prod2 = new Product();
prod2.Barcode = 987654;
System.out.println(prod1.Barcode);
System.out.println(prod2.Barcode);
}
}
public class Product {
public int Barcode;
}
출력은 다음과 같습니다.
123456
987654
이제 인스턴스 변수를 정적으로 만들어 클래스 변수로 변경하십시오.
//CLASS VARIABLE
public class Main {
public static void main(String[] args) {
Product prod1 = new Product();
prod1.setBarcode(123456);
Product prod2 = new Product();
prod2.setBarcode(987654);
System.out.println(prod1.getBarcode());
System.out.println(prod2.getBarcode());
}
}
public class Product {
public static int Barcode;
public int getBarcode() {
return Barcode;
}
public void setBarcode(int value){
Barcode = value;
}
}
정적이 아닌 메소드를 사용 Barcode
하여 클래스가 아닌 객체에서 호출 할 수 있는 값을 가져오고 설정했습니다 . 출력은 다음과 같습니다.
987654
987654
여기에 설명되어 있습니다 ( Bicycle
클래스 변수 가있는 예제 클래스 사용)numberOfBicycles
와 인스턴스 변수 cadence
, speed
, gear
및 id
)
때로는 모든 객체에 공통적 인 변수를 원할 수도 있습니다. 이것은
static
수정자를 사용하여 수행됩니다 .static
선언에 수정자가있는 필드를 정적 필드 또는 클래스 변수라고합니다. 그것들은 어떤 객체가 아니라 클래스와 관련이 있습니다. 클래스의 모든 인스턴스는 클래스 변수를 공유하며 메모리의 고정 된 한 위치에 있습니다. 모든 객체는 클래스 변수의 값을 변경할 수 있지만 클래스의 인스턴스를 만들지 않고도 클래스 변수를 조작 할 수도 있습니다.
클래스 변수 (선언 static
)는 모든 인스턴스에 공통적 인 위치입니다.
이 예에서 numberOfBicycles
클래스 변수는 선언되었으므로static
). 모든 인스턴스와 클래스에 공통적 인 변수 (예 : 위치)는 하나뿐입니다. 수정 그래서 만약 numberOfBicycles
하나의 방법으로, 다른 방법은 (심지어 다른 새로운 값을 참조 할 Bicycle
객체)
대조적 gear
및 id
아르 인스턴스 변수는 (자신의 어떠한 선언이 없으므로 static
개질제). 모든 Bicycle
개체는 고유 한 개체를 가지고 있습니다. gear
일부 Bicycle
a에 대해 수정 하고 b 가 다른 인스턴스 인 경우 수정 해도 a.gear
아무런 영향을 미치지 않습니다.b.gear
각 Java 객체는 일부 메타 데이터 (예 : 클래스에 대한 일부 참조) 및 자체 인스턴스 변수 (아마 수퍼 클래스에서 상 속됨)가있는 별개의 메모리 영역입니다. 그러나 클래스 변수는 클래스에 공통적이며 모든 인스턴스가 공유합니다.
객체 (컴퓨터 과학) 및 인스턴스 변수 위키 페이지를 참조하십시오 .
인스턴스 변수 :
인스턴스 변수에는 클래스의 각 인스턴스마다 별도의 값이 있습니다.
Class InstanceDemo {
// this instance variable is visible for any child class.
public String name = "Testing";
// count variable is visible in Demo class only.
private int count = 2;
}
인스턴스 변수에 액세스하는 방법 :
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
출력 : 2, 테스트
클래스 변수 :
그리고 가장 중요한 클래스 변수는 클래스의 인스턴스 객체가 존재하지 않더라도 클래스의 모든 인스턴스에 대해 단일 공유 값을 유지합니다.
Class ClassDemo {
// count variable is Same for all instance of this class
public static int count = 2;
}
클래스 변수에 액세스하는 방법 :
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
출력 : 2
클래스 변수와 인스턴스 변수의 간략한 차이점 :
class variables
와 instance
변수 의 차이점은 의 문제입니다 who knows what?
.
는 instance variable
알려진 (=되어 바인딩 이에) 구체적인 예 - 따라서 이름.
public class Person {
private String firstName;
private String lastName;
[...]
}
클래스의 정의는 콘크리트 객체를 만들기 위한 청사진 과 같습니다 . 아마도이 시점 은 약간 혼란 스럽습니다 . 그러나 이런 식으로 작성하면 모든 변수가 구체적인 객체에 바인딩됩니다. 모든 사람은 자신의 firstName을있다
반면 class variable
에 A 는 이름에서 알 수 있듯이 클래스의 모든 구성원에게 알려져 있습니다. 또는 기술적으로 : 클래스 수준 에서 알려 지거나 제한 됩니다 . 전형적인 예는 것입니다 카운터 , 그것은 매우 문제가 예를 들어 있지만 - 얼마나 많은 개체를, 당신이 만든의 그러나이 초기 단계에서는 중요하지 않습니다.
public class Person {
private String firstName;
private String lastName;
[...]
static int numberOfPersons = 0
}
numberOfPersons
선언 static
사이에 distingush하는 키워드 인 class variables
과 instance variabes
. 변수는 클래스 정의 내의 다른 변수와 같이 선언됩니다. 그러나 static
키워드는 다르다는 신호를 보냅니다.
firstName
, lastName
있는 인스턴스 변수는 그 구체적인 인스턴스에 바인딩
numberOfPersons
모든 인스턴스가이 변수에 액세스 할 수 있도록 클래스에 바인딩됩니다.
변수가 정의되는 장소는 클래스 정의입니다.
클래스 변수는 클래스 수준에 알려져 있거나 바인딩되어 있습니다. 즉, 각 구체적인 인스턴스에 액세스 할 수 있습니다. 클래스 변수를 정의하려면 keyword를 사용하십시오 static
.
인스턴스 변수는 인스턴스 레벨에서만 알려져 있습니다. 당신은없이 그들을 정의static
키워드 .
Java에 대한 추가 문서는 여기에 있습니다.