정적 메서드와 인스턴스 메서드의 차이점은 주로 두 가지 측면에 반영됩니다.
외부적으로 정적 호출 메소드는 "클래스명.메소드명" 메소드를 사용하거나, "객체명.메소드명" 메소드를 사용할 수 있다. 인스턴스 메소드에는 후자의 메소드만 있습니다. 즉, 정적 메서드를 호출하는 데에는 개체를 만들 필요가 없습니다.
정적 메서드가 이 클래스의 멤버에 액세스할 때 정적 멤버(예: 정적 멤버 변수 및 정적 메서드)에만 액세스할 수 있지만 인스턴스에는 액세스할 수 없습니다. . 멤버 변수 및 인스턴스 메서드에는 이러한 제한이 없습니다.
다음 예는 이러한 차이점을 보여줍니다.
1. 정적 메서드 호출 인스턴스
public class hasStaticMethod{ //定义一个静态方法 public static void callMe(){ System.out.println("This is a static method."); } }
다음 프로그램은 두 가지 형식을 사용하여 정적 메서드를 호출합니다.
public class invokeStaticMethod{ public static void main(String args[]){ hasStaticMethod.callMe(); //不创建对象,直接调用静态方法 hasStaticMethod oa = new hasStaticMethod(); //创建一个对象 oa.callMe(); //利用对象来调用静态方法 } }
프로그램에서 정적 메서드를 두 번 호출하는 것이 허용됩니다. 프로그램의 출력은 다음과 같습니다.
This is a static method.This is a static method.
정적 호출을 허용하는 것은 Java입니다. 프로그래머가 일반적인 메소드를 호출할 때 발생하는 문제를 줄이기 위해 프로그래머는 기존 C 언어의 함수와 동일한 방식으로 메소드를 사용할 수 있습니다.
2. 멤버 변수에 액세스하는 정적 메서드의 예
class accessMember{ private static int sa; //定义一个静态成员变量 private int ia; //定义一个实例成员变量 //下面定义一个静态方法 static void statMethod(){ int i = 0; //正确,可以有自己的局部变量sa = 10; //正确,静态方法可以使用静态变量 otherStat(); //正确,可以调用静态方法 ia = 20; //错误,不能使用实例变量 insMethod(); //错误,不能调用实例方法 } static void otherStat(){} //下面定义一个实例方法 void insMethod(){ int i = 0; //正确,可以有自己的局部变量 sa = 15; //正确,可以使用静态变量 ia = 30; //正确,可以使用实例变量 statMethod(); //正确,可以调用静态方法 } }
이 예제는 실제로 한 문장으로 요약할 수 있습니다. 정적 메서드는 정적 멤버에만 액세스할 수 있고 인스턴스 메서드는 정적 멤버에 액세스할 수 있습니다. 그리고 인스턴스 멤버. 정적 메서드가 인스턴스 멤버 변수에 접근할 수 없는 이유는 인스턴스 멤버 변수가 특정 개체에 속해 있고, 정적 메서드가 실행될 때 해당 개체가 반드시 존재하는 것은 아니기 때문입니다.
마찬가지로 인스턴스 메서드는 인스턴스 멤버 변수에 접근할 수 있기 때문에 정적 메서드가 인스턴스 메서드 호출을 허용하면 간접적으로 인스턴스 멤버 변수를 사용할 수 있게 되어 인스턴스 메서드를 호출할 수 없게 됩니다. 같은 이유로 정적 메서드에서는 this 키워드를 사용할 수 없습니다.
main() 메소드는 일반적인 정적 메소드의 규칙을 따르므로 객체를 생성하기 전에 시스템에서 호출할 수 있습니다.
추천 튜토리얼: JavaTutorial
위 내용은 Java의 정적 메소드와 인스턴스 메소드의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!