클래스 인스턴스 (예 : 정적/최종 선언 된 변수)와 정적 메서드 (예 : 클래스 메서드)간에 특별한 관계가 있습니까?클래스 인스턴스와 정적 메서드 간의 관계
나는 당신이 무슨 뜻인지 이해하고 있습니다.
클래스 인스턴스 (예 : 정적/최종 선언 된 변수)와 정적 메서드 (예 : 클래스 메서드)간에 특별한 관계가 있습니까?클래스 인스턴스와 정적 메서드 간의 관계
나는 당신이 무슨 뜻인지 이해하고 있습니다.
정적 및 비 정적 메서드/클래스는 완전히 다른 짐승입니다. 객체 지향 프로그래밍의 예제를 사용합시다. 이 클래스 것, 내 main
방법에서
int myAge;
public Person(){
myAge = 0;
}
public void Birthday(){
myAge += 1;
}
을 : myAge라는 선언 인스턴스 변수 (0으로 설정) 및 방법은 Birthday()
을 (이)라는이 Person()
라는 생성자 "사람"라는 클래스를 가지고 말 나는 당신을하는 새로운 사람을 만들 때
Person Sajjad = new Person();
Sajjad.Birthday();
우리의 생성자의 기본 값은 myAge
0이기 때문에 나이는 0 :이처럼 사용할 수. Birthday()
방법을 적용하면 연령이 1 단계 올라갑니다.
static
방법에 대해서는 객체 지향 원칙이 없습니다. 그것을위한 용도가 있습니다. 나는 보통 간단한 수학을 위해 그것을 사용합니다. 에서
public static double addValues(double a, double b){
return a + b;
}
내 main
:
int sum;
sum = addValues(1, 2);
System.out.println(sum);
출력 :
3
참조하는 방법 위에 새 객체를 선언 할 필요가 없다? 정적 메소드는 프로토 타입하기가 더 쉽지만 장기적으로 코드를 유지하는 것이 훨씬 쉬워지기 때문에 장기적으로는 객체 지향 원칙을 명확히 따르고 있습니다. 또한 불필요한 코드 줄을 사용하여 주요 메서드를 복잡하게 만들 필요가 없습니다.
P. 코드가 잘못 되었다면, 필자가 채찍질 한 의사 코드 일뿐입니다.
아주 좋은 도움, 고마워요 ... – Sajad
나는 약 정적 변수 대신 클래스 인스턴스 (NO이 용어), 정적 변수와 내가 생각할 수있는 정적 메서드 사이에 하나 개 연결되어 당신이 얘기를 어떻게 생각, 당신의 정적 방법 당신이 할 수있는 인스턴스 변수 대신 정적 변수에만 액세스하십시오.
클래스 인스턴스은 메모리에 저장되고 클래스 유형의 변수를 통해 참조되는 객체입니다. 각 요소에는 고유 한 상태와 자체 메서드가 있습니다. 예 :
Apple a = new Apple("green");
Apple b = new Apple("red");
a.getColor();//green
b.getColor();//red
정적 메소드/클래스와 관련된 클래스 이름을 통해 가입 한 요소 변수 : 우리는 Apple
클래스와 getColor
비 정적 요소가있는 경우. 인스턴스에서 정적 요소에 액세스 할 수 없습니다.예 :
Apple.tree; //Apple Tree
여기에 클래스 애플이
class Apple {
public static String tree = "Apple Tree"; // Class related
private String color; //object instance related
public Apple(String color) {
this.color = color;
}
public String getColor() {
return this.color;
}
}
그래서,이 클래스의 색을 갖는 것은 인스턴스에 따라 달라집니다입니다 : 우리는 Apple
클래스와 size
정적 요소가있는 경우.
나는 OP가 C# 대신 Java에 대해 묻고 있다고 생각합니다. 'Apple.size' 이후에 괄호가 없기 때문에 OP가 배우려고하는 것 대신 객체 속성을 참조한다고 생각하게 만듭니다. – theGreenCabbage
액세스 : class instance (i.e variables that declared by static/final)
및 static
방법은 객체 참조의 명시 적없이 함께 작업 할 수 있습니다. 멤버 변수 (별칭 인스턴스 변수)에 액세스하는 반면 객체 참조를 통해 액세스해야합니다.
class Test {
static String str = "asdf";
int num = 10;
static void methodA() {
System.out.println("Static variable direct access: " + str);
System.out.println("Member variable access : " + new Test().num);
}
}
: 당신은 믹스 앤 매치 할 수 있지만 당연히 다른 차이는 동시 액세스 또는 스레드 안전 로직 동안이다, class-level-lock
가 static-methods
및 object-level-lock
에 class-variables
를 통해 취할 수는 member-methods
에 member-variables
를 통해 수행 할 수 있습니다 .
코드를 형식화하십시오. – theGreenCabbage
시도가 더 명확 해 졌으면 좋겠다. – harsh
'final'한정자는 변수가 정적 (또는 클래스) 변수이거나 인스턴스 변수 인 경우 아무런 관련이 없습니다. –