> Java > java지도 시간 > 본문

Java 정적 메소드와 인스턴스 메소드의 차이점에 대한 자세한 설명

高洛峰
풀어 주다: 2017-01-24 16:56:51
원래의
2255명이 탐색했습니다.

정적 메서드와 인스턴스 메서드의 차이점은 크게 두 가지 측면에서 나타납니다.

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

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

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

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();   //利用对象来调用静态方法
}
}
로그인 후 복사

프로그램은 정적 메서드를 두 번 호출하며 둘 다 허용됩니다. 프로그램의 출력은 다음과 같습니다.
이것은 정적 메서드입니다. 🎜>

객체를 생성하지 않고 정적 메서드를 호출할 수 있도록 허용하는 것은 Java에서 프로그래머가 특정 일반적인 메서드를 호출할 때 발생하는 문제를 줄이고, 프로그래머가 함수를 사용하는 것과 동일한 방식으로 메서드를 사용할 수 있도록 하는 방법입니다. 전통적인 C 언어. 전형적인 예는 이전 프로그램에서 난수를 얻기 위해 "Math.ramdon()"을 사용하는 것입니다.

또 다른 대표적인 대표적인 것이 배열 처리 도구인 Arrays

2. 멤버 변수에 대한 정적 메소드 액세스의 예

//-----------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 키워드를 사용할 수 없습니다.


main() 메소드는 일반적인 정적 메소드의 규칙을 따르므로 객체를 생성하기 전에 시스템에서 호출할 수 있습니다.


위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

Java 정적 메소드와 인스턴스 메소드의 차이점에 대한 더 자세한 설명은 PHP 중국어 홈페이지를 참고해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿