logo

Java의 정적 메소드와 인스턴스 메소드

이번 글에서는 자바의 정적 메소드와 인스턴스 메소드에 대해 알아보겠습니다.

Java 인스턴스 메소드

인스턴스 메소드는 호출되기 전에 해당 클래스의 객체를 생성해야 하는 메소드입니다. 인스턴스 메소드를 호출하려면 메소드가 정의된 클래스의 객체를 생성해야 합니다.



public void geek(String name) { // code to be executed.... } // Return type can be int, float String or user defined data type.>

인스턴스 메소드의 메모리 할당

이러한 메소드 자체는 힙의 영구 생성 공간에 저장되지만(Java 7까지만 유효하며 이제 효율성이 향상된 Java 8 이상의 메타 공간으로 대체됨) 매개변수(전달된 인수)와 해당 지역 변수 및 값은 반환될 값은 스택에 할당됩니다. 이들은 자신이 상주하는 동일한 클래스 내에서 호출되거나 동일한 패키지 또는 다른 패키지에 정의된 다른 클래스에서 호출될 수 있습니다. 액세스 유형 원하는 인스턴스 메소드에 제공됩니다.

자바스크립트 base64 디코드

중요한 사항:

  • 인스턴스 메소드는 클래스가 아닌 클래스의 객체에 속합니다. 즉, 클래스의 객체를 생성한 후에 호출할 수 있습니다.
  • 가상 메서드를 사용하더라도 인스턴스 메서드는 인스턴스별로 저장되지 않습니다. 그들은 단일 메모리 위치에 저장되며 호출할 때 이 포인터가 전달되기 때문에 자신이 속한 개체만 알 수 있습니다.
  • 다음을 사용하여 해결되므로 재정의할 수 있습니다. 동적 바인딩 런타임에.

다음은 인스턴스 메소드에 액세스하는 구현입니다.



자바






// Example to illustrate accessing the instance method .> import> java.io.*;> class> Foo {> >String name =>''>;> >// Instance method to be called within the> >// same class or from a another class defined> >// in the same package or in different package.> >public> void> geek(String name) {>this>.name = name; }> }> class> GFG {> >public> static> void> main(String[] args)> >{> >// create an instance of the class.> >Foo ob =>new> Foo();> >// calling an instance method in the class 'Foo'.> >ob.geek(>'techcodeview.com'>);> >System.out.println(ob.name);> >}> }>

한달에 몇주?
>

>

산출

techcodeview.com>

Java 정적 메소드

정적 메소드는 클래스 객체를 생성하지 않고도 호출할 수 있는 Java의 메소드입니다. 그들은에 의해 참조됩니다 클래스 이름 자체 또는 해당 클래스의 객체에 대한 참조입니다.

자바의 문자열 길이
public static void geek(String name) { // code to be executed.... } // Must have static modifier in their declaration. // Return type can be int, float, String or user defined data type.>

정적 메서드의 메모리 할당

해당 클래스의 개체가 아닌 해당 클래스와 연결되어 있으므로 힙의 영구 생성 공간에 저장됩니다. 그러나 해당 지역 변수와 전달된 인수는 스택에 저장됩니다. 이들은 클래스에 속하므로 클래스의 객체를 생성하지 않고도 호출할 수 있습니다.

중요한 사항:

  • 정적 메소드는 자신이 상주하는 클래스와 연관되어 있습니다. 즉, 클래스의 인스턴스를 생성하지 않고 호출됩니다. 클래스 이름.메소드 이름(인수) .
  • 동일한 클래스에서 생성된 모든 개체 간에 공유할 목적으로 설계되었습니다.
  • 정적 메서드는 다음을 사용하여 해결되므로 재정의할 수 없습니다. 정적 바인딩 컴파일 타임에 컴파일러에 의해. 그러나 동일한 이름의 메소드를 선언할 수 있습니다. 공전 둘다 슈퍼클래스 그리고 아강 , 그러나 그것은 호출될 것이다 메소드 숨기기 파생 클래스 메서드는 기본 클래스 메서드를 숨길 것이기 때문입니다.

다음은 정적 메서드에 액세스하는 방법을 보여줍니다.

자바




SSH 전체 형식

저장
// Example to illustrate Accessing> // the Static method(s) of the class.> import> java.io.*;> class> Geek {> >public> static> String geekName =>''>;> >public> static> void> geek(String name)> >{> >geekName = name;> >}> }> class> GFG {> >public> static> void> main(String[] args)> >{> >// Accessing the static method geek()> >// and field by class name itself.> >Geek.geek(>'vaibhav'>);> >System.out.println(Geek.geekName);> >// Accessing the static method geek()> >// by using Object's reference.> >Geek obj =>new> Geek();> >obj.geek(>'mohit'>);> >System.out.println(obj.geekName);> >}> }>

>

>

산출

vaibhav mohit>

메모:

클래스에 정의된 정적 변수와 해당 값(기본값 또는 참조)은 다음 위치에 저장됩니다. PermGen 기억의 공간.

자주 묻는 질문

1. 정적 변수가 객체를 참조하면 어떻게 되나요?

static int i = 1; static Object obj = new Object();>

첫 번째 줄에서는 값 1이 PermGen 섹션에 저장됩니다. 두 번째 줄에서는 참조 obj가 PermGen 섹션에 저장되고 참조하는 개체는 힙 섹션에 저장됩니다.

2. 언제 정적 메소드를 사용합니까?

  • 동일한 클래스의 모든 인스턴스에서 공유할 수 있는 코드가 있는 경우 해당 코드 부분을 정적 메서드에 넣습니다.
  • 기본적으로 클래스의 정적 필드에 액세스하는 데 사용됩니다.

3. 인스턴스 방식과 정적 방식의 차이점

  • 인스턴스 메서드는 인스턴스 메서드와 인스턴스 변수에 직접 액세스할 수 있습니다.
  • 인스턴스 메서드는 정적 변수와 정적 메서드에 직접 액세스할 수 있습니다.
  • 정적 메서드는 정적 변수와 정적 메서드에 직접 액세스할 수 있습니다.
  • 정적 메서드는 인스턴스 메서드와 인스턴스 변수에 직접 액세스할 수 없습니다. 객체에 대한 참조를 사용해야 합니다. 그리고 정적 메소드는 사용할 수 없습니다 이것 'this'가 참조할 인스턴스가 없기 때문에 키워드입니다.