>  기사  >  Java  >  Java의 정적 메소드와 인스턴스 메소드의 차이점

Java의 정적 메소드와 인스턴스 메소드의 차이점

王林
王林원래의
2019-11-18 16:43:012843검색

Java의 정적 메소드와 인스턴스 메소드의 차이점

정적 메서드와 인스턴스 메서드의 차이점은 주로 두 가지 측면에 반영됩니다.

외부적으로 정적 호출 메소드는 "클래스명.메소드명" 메소드를 사용하거나, "객체명.메소드명" 메소드를 사용할 수 있다. 인스턴스 메소드에는 후자의 메소드만 있습니다. 즉, 정적 메서드를 호출하는 데에는 개체를 만들 필요가 없습니다.

정적 메서드가 이 클래스의 멤버에 액세스할 때 정적 멤버(예: 정적 멤버 변수 및 정적 메서드)에만 액세스할 수 있지만 인스턴스에는 액세스할 수 없습니다. . 멤버 변수 및 인스턴스 메서드에는 이러한 제한이 없습니다.

다음 예는 이러한 차이점을 보여줍니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.