가장 일반적인 초보자 실수를 할 때, 클래스 속성 " statically" 사용할 수 있다. 해당 클래스의 인스턴스를 하지 않고. It 찻입 수 있는 언급된 오류 메시지:
>. 정적 메서드는 정적 또는 해당 클래스의 인스턴스를 만들 수 있습니다 비사양 만들어 사용하기 위해 다음과 같이 정의한다.
private java.util.List<String> someMethod(){
/* Some Code */
return someList;
}
public static void main(String[] strArgs){
// The following statement causes the error. You know why..
java.util.List<String> someList = someMethod();
}
인스턴스 레벨 메서드, 백업이었습니다 호출하십시오 방법을 시도하고 있다. 너 없는 인스턴스입니다.
정적 클래스 ',' 방법 '에' 정적 클래스의 인스턴스를 메서드을 비사양 속합니다.
객체 지향 프로그래밍은 캡슐화 논리를 본질을 함께 데이터를 바탕으로 운영됩니다.
인스턴스 메소드 오른길로 논리, 인스턴스입니다 필드는 데이터. 이들은 함께 형성하는 객체에는.
public class Foo
{
private String foo;
public Foo(String foo){ this.foo = foo; }
public getFoo(){ return this.foo; }
public static void main(String[] args){
System.out.println( getFoo() );
}
}
위 프로그램을 실행한 결과는 알 수 있는 가능성이 높아?
반면 인스턴스입니다 메서드을 존재하지 않고, 객체를 인스턴스가 없는 데이터, 클래스 정의 일부로 객체를 인스턴스입니다 필요한 데이터를 제공하도록 그들한테는요
인스턴스 데이터에 액세스할 수 있는 방법을 이론적으로 인스턴스입니다 않는 정적 컨텍스트로 작업하십시오 isn& # 39, t really, 그런데 그 이유가 있었을 되기 위해 모든 인스턴스입니다 메서드입니다. # 39 의 it& 가능하도록 설계 결정 아닌 언어를 구성하는 어쨌든 추가 규칙을 금기한 거잖나.
그냥 내가 생각하는 사람들이 많이 shouldn& # 39, t 무방비로 노출되고 总监和首席信息官完全了解 " static"; 매우 초기.
정적 메서드는 아마 포지셔닝합니다 idfsysobject. 보다는 기본이다. 특히 애니웨이 일찌감치 확인하시겠습니까 경우 OOP. (왜 예외를 시작하여 규칙?) # 39, Java, 아주 엇회전식 이다 that& 작업자쪽에서 " first"; public void main () 는 정적 정말 배워야 할 일이다. (몇 주 메서드을 자신의 실제 jave 애플리케이션마다 애니웨이.)
내가 생각하는 그 가치가 있는 것 아니냐는 지적도 자바 컴파일러는 자바 (java) 의 규칙에 따라 삽입물의 " this." 같습니다;; # 39 you& 고지를 때, re 액세스을 인스턴스입니다 방법 또는 인스턴스입니다 없이 필드용 명시성 인스턴스입니다. 물론 이렇게 할 수 있다는 것을 알고 컴파일러와의 디렉토리에만 내에서 인스턴스입니다 방법을 갖고 있는 " this"; # 39, 변수 등 정적 메서드는 don& 없다.
instanceMethod();
this.instanceMethod();
그리고 이들 역시 avamer:
... = instanceField;
... = this.instanceField;
컴파일러는 효과적으로 삽입하는 " this."; # 39, t 공급 don& 때 특정 인스턴스입니다.
(펀 고안되었습니다) 이 다소 ", magic help". 초보자 의해 컴파일러 오류가 발생할 수 있습니다. 즉, 통화, 때로는 같은 구문을 인스턴스입니다 정적임 페이징됩니다 것으로 현실적으로 페이징됩니다 동시에 여러 유형의 기본 메커니즘을 있다.
인스턴스 메소드 호출 이라고도 합니다 메서드입니다 가상 메소드 호출 또는 발송하십시오 슬픔으로창백해지고 비헤이비어를 관련 다형성. 무슨 일이 있어도 디스패치하기 비헤이비어를 여부에 관계 없이 사용할 수 있는, 또는 컴파일러와의 삽입됨 명시적인 객체에는 작성했습니까 인스턴스입니다 " this.".
함수 호출 같은 정적 메서드 호출 메커니즘은 간단해진다는 받을시간은 oop 비사양 욕금지
개인적으로 오류 메시지를 읽을 수 있다고 생각하는 방법을 통해, 이 경우 잘못된 " 비정적 정적임 컨텍스트로 instance&quo , * 지정하지 않고 명시성 객체에는 참조할 수 없습니다.
단순히 어떤 컴파일러는 수 없다는 불만을 는 표준 " 삽입하십시오 this."; 이 때문에 코드 정적 메서드는 메서드 안에 않으므로 인스턴스입니다 내에 있다. 그러나 어쩌면 저자는 단순히 공급할 것을 인스턴스입니다 관심을 엔드입니다 호출 &, # "; 정적 메서드는 매개변수로 인스턴스를 말하도다 제공된 내에 만들어진 것으로, 또는 이 정적 메서드입니다.
한마디로 정적 메서드는 메서드 호출 인스턴스입니다 내에서 거의 확실히 있습니다 수 있고 대체하십시오 객체에 대한 명시적인 인스턴스입니다 기도를 하면 됩니다.
지금까지 이유를 설명할 수 있지만, 이것은 다른 어떤 것에 대한 답을 고려해야 할 수 있습니다.
연락할 수 있는 클래스 메서드를 호출할 수 있습니다, 그 뒤에 추가하여 구성자를 메서드입니다 를 인스턴스화 가능
Object instance = new Constuctor().methodCall();
또는
primitive name = new Constuctor().methodCall();
이것은 유용한 정보기술 (it) 는 하나의 클래스를 사용할 경우에만 메서드입니다 인스턴스화 가능 한 한 번 내시경이요 클래스 메서드를 호출하는 경우, 참조 가능한 범위 내에서 여러 인스턴스화 가능 한 한 말해둘꼐요 생성하시겠습니까 인스턴스입니다.
만약 우리가 이 방법을 통해, 컴파일러는 정적 인스턴스로 액세스하려는 컨텍스트로 가늠하기는 무리라구 디스크입니다. 인스턴스입니다 방법 (가변으로 있는 객체) 전날에약혼자에게 예로 들 수 있다. 하지만, 항상 액세스할 수 있습니다 사용하여 해당 객체를 참조입니다.
방법을 사용하지 않는 경우, 그 " 정적임 tells"; 컴파일러는 클래스 인스턴스 레벨 액세스할 수 있는 방법을 사용할 때는 data-in (like a 비정적 기입란). 이 데이터를 사용할 수 없을 것이라고 한 클래스의 인스턴스를 생성되었습니다. 따라서 컴파일러 오류가 던지는 하면 정적임 메서드를 호출할 수 있는 방법입니다. 실제로 이 경우 모든 방법을 비정적 멤버 참조하지 않는 정적 클래스의 메서드를 합니다.
예를 들어 있는 모든 방법을 리샤퍼 만들 수만 비정적 멤버 참조하지 않는 정적 클래스 생성하는지 경고 메시지가 ", 이 방법은 static" 만들 수 있습니다.
그럼 당신은 매우 요구하는 핵심 이유는?
뭐, 이후, 컴파일러는 자바 가상 머신 (jvm) 에 개발하려는 (Java Virtual Machine) 의 객체를 생성할 수 있는 코드를 해석할 수 있다. 어쨌든 JVM 은 바이너리 프로그램을 실행할 수 있는 기계어로 (아마도 JVM 의 버전 특정 단축시킵니다 운영체제 및 하드웨어 이전에 컴파일됨 의해 다른 프로그래밍 언어로 받기 위해 기계어 코드는 C 같은 환경에서 실행할 수 있는 처리자에게). 결국 모든 코드는 번역 기계 코드로. 따라서 객체 생성 (인스턴스입니다 class) 는 avamer 예약하기 메모리 공간 (메모리 레지스터 사용될 프로세서 레지스터 때 CPU 스케줄러 운영 체제의 맨 위에 대기열은 모세야 네 프로그램을 실행하려면 it) 데이터 저장 할 수 있는 배치하십시오 데이터를 읽고 쓸 수 있습니다. 클래스의 인스턴스를 없는 경우 (이것은 정적 컨텍스트로 무슨 일이 있는) 한 후, 해당 메모리 공간 데이터를 읽고 쓸 필요는 없습니다. 사실, 백성들이 말하였노라 등 데이터 타냐한테 타임코드가 (때문에) 를 쓴 이 메모리 공간을 저장하였습니다 괜찼습니다 인도하심이라만일 스케줄됨 시작 할 수 없다).
지금은 내 영어! # 39 m, i& 라틴!