정적 메서드와 인스턴스 메서드의 차이점은 크게 두 가지 측면에서 나타납니다.
정적 메서드를 외부에서 호출할 때는 "클래스 이름.메서드 이름" 또는 "객체" 이름을 사용할 수 있습니다.메서드 이름". 인스턴스 메소드에는 후자의 메소드만 있습니다. 즉, 정적 메서드를 호출하는 데에는 개체를 만들 필요가 없습니다.
정적 메서드가 이 클래스의 멤버에 액세스하는 경우 정적 멤버(예: 정적 멤버 변수 및 정적 메서드)에만 액세스할 수 있지만 인스턴스 멤버 변수 및 인스턴스 메서드에는 액세스할 수 없습니다. 메소드에는 이 제한이 없습니다.
다음 예는 이러한 차이점을 보여줍니다.
1. 정적 메서드 호출 예
//-----------hasStaticMethod.java----------------- public class hasStaticMethod{ //定义一个静态方法 public static void callMe(){ System.out.println("This is a static method."); } }
다음 프로그램은 두 가지 형식을 사용하여 정적 메서드를 호출합니다.
//-----------invokeStaticMethod.java----------------- public class invokeStaticMethod{ public static void main(String args[]){ hasStaticMethod.callMe(); //不创建对象,直接调用静态方法 hasStaticMethod oa = new hasStaticMethod(); //创建一个对象 oa.callMe(); //利用对象来调用静态方法 } }
프로그램은 정적 메서드를 두 번 호출하며 둘 다 허용됩니다. 프로그램의 출력은 다음과 같습니다.
이것은 정적 메서드입니다. 🎜>
또 다른 대표적인 대표적인 것이 배열 처리 도구인 Arrays
//-----------accessMember.java----------------- 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 키워드를 사용할 수 없습니다.