인스턴스 메소드와 클래스 메소드의 정의
메서드를 선언할 때 static 키워드로 수정되지 않는 메서드 유형은 인스턴스 메서드이고, static 키워드로 수정되는 메서드 유형은 클래스 메서드(정적 메서드라고도 함)입니다.
예를 들어:
classMain{inta;floatmax(floatb,floatc){//인스턴스 메서드...}staticfloatmax(floatd,floate){//클래스 메서드...}}
인스턴스 메소드와 클래스 메소드의 차이점
1. 객체가 인스턴스 메소드를 호출합니다.
클래스의 바이트코드 파일이 메모리에 로드되면 클래스의 인스턴스 메소드에는 항목 주소가 할당되지 않습니다. 클래스가 객체를 생성한 후에만 클래스의 인스턴스 메소드에 항목 주소가 할당됩니다. 인스턴스 메소드는 클래스 호출 실행으로 생성된 모든 객체에서 사용할 수 있습니다.
알아채다:
첫 번째 객체를 생성하면 클래스의 인스턴스 메소드에 항목 주소가 할당되며, 객체가 다시 생성되면 해당 항목 주소가 더 이상 할당되지 않습니다. 모든 개체가 모두 존재하지 않는 경우 메서드의 항목 주소가 취소됩니다.
인스턴스 메소드는 인스턴스 변수뿐만 아니라 클래스 변수도 조작할 수 있습니다. 객체가 인스턴스 메소드를 호출할 때 메소드에 나타나는 인스턴스 변수와 클래스 변수는 객체에 할당된 변수이지만, 클래스 변수는 다른 모든 객체와 공유됩니다.
2. 클래스 이름을 사용하여 클래스 메서드를 호출합니다.
클래스 내의 클래스 메소드의 경우, 클래스가 메모리에 로드될 때 해당 항목 주소가 할당되므로 클래스 메소드는 클래스가 생성한 모든 객체에 의해 호출 및 실행될 수 있을 뿐만 아니라 클래스를 통해 직접 호출될 수도 있습니다. 수업 이름. 클래스 메소드의 진입 주소는 프로그램이 종료될 때까지 취소되지 않습니다.
알아채다:
인스턴스 메서드는 클래스 이름으로 호출할 수 없으며 객체로만 호출할 수 있습니다. 그리고 클래스가 객체를 생성하기 전에 인스턴스 멤버 변수에 메모리가 할당되지 않았기 때문에 클래스 메서드는 인스턴스 변수를 조작할 수 없습니다.
3. 클래스 메소드의 설계 원칙:
메서드가 프로그램의 요구 사항을 충족하기 위해 클래스의 인스턴스 변수를 작동할 필요가 없는 경우 이러한 메서드를 정적 메서드로 설계하는 것을 고려할 수 있습니다.
정적 메소드의 경우 객체를 생성하지 않고 클래스 이름으로 직접 호출할 수 있습니다. 객체를 생성하면 클래스의 인스턴스 변수에 메모리 공간이 할당됩니다.