나는 교과서에서 나에게 주어진 텍스트를 읽고 있었는데 그것이 말하는 것을 정말로 이해하지 못합니다. 기본적으로 정적 메서드 또는 클래스 메서드에 “modifier”키워드 static이 포함되어 있다는 것을 알 수 있습니다. 하지만 그게 무슨 뜻인지 정말 모르겠어요?
누군가 정적 또는 클래스 메서드가 무엇인지 정말 간단한 용어로 설명해 주시겠습니까?
또한 인스턴스 메서드가 무엇인지에 대한 간단한 설명을 얻을 수 있습니까?
이것이 그들이 교과서에서 내게주는 것입니다.
정적 수정 자의 존재 여부에 대한 중요한 실제 의미가 있습니다. 공용 클래스 메소드는 Java가 속해있는 클래스의 정의를 처리하는 즉시 호출되고 실행될 수 있습니다. 인스턴스 메서드의 경우는 그렇지 않습니다. 공용 인스턴스 메서드를 호출하고 실행하려면 먼저 해당 메서드가 속한 클래스의 인스턴스를 만들어야합니다. 공용 클래스 메서드를 사용하려면 클래스 만 있으면됩니다. 반면에 공용 인스턴스 메서드를 사용하려면 먼저 클래스의 인스턴스가 있어야합니다.
다른 메서드의 정의 내에서 정적 메서드가 호출되는 방식은 두 메서드가 동일한 클래스에 속하는지 여부에 따라 다릅니다. 위의 예에서 factorial과 main은 모두 MainClass 클래스의 메서드입니다. 결과적으로 main 정의에서 factorial의 호출은 단순히 메소드 이름 “factorial”을 참조합니다.
답변
Java의 기본 패러다임은 클래스를 작성하고 해당 클래스가 인스턴스화된다는 것입니다. 인스턴스화 된 개체 (클래스의 인스턴스)에는 동작에 영향을주는 속성 (멤버 변수)이 연결되어 있습니다. 인스턴스가 메서드를 실행하면 이러한 변수를 참조합니다.
그러나 특정 유형의 모든 개체는 멤버 변수에 전혀 의존하지 않는 동작을 가질 수 있습니다. 이러한 방법은 정적으로 만드는 것이 가장 좋습니다. 정적이므로 메서드를 실행하는 데 클래스의 인스턴스가 필요하지 않습니다.
이렇게하면 정적 메서드를 실행할 수 있습니다.
MyClass.staticMethod(); // Simply refers to the class's static code
그러나 비 정적 메서드를 실행하려면 다음을 수행해야합니다.
MyClass obj = new MyClass();//Create an instance
obj.nonstaticMethod(); // Refer to the instance's class's code
더 깊은 수준에서 컴파일러는 클래스를 함께 배치 할 때 메서드에 대한 포인터를 수집하여 클래스에 연결합니다. 이러한 메서드가 실행되면 포인터를 따라 가고 맨 끝에서 코드를 실행합니다. 클래스가 인스턴스화되면 생성 된 개체에는 상속 계층 구조의 특정 클래스에 대해 호출 될 메서드를 가리키는 “가상 메서드 테이블”에 대한 포인터가 포함됩니다. 그러나 메서드가 정적이면 “가상 메서드 테이블”이 필요하지 않습니다. 해당 메서드에 대한 모든 호출은 정확히 동일한 코드를 실행하기 위해 메모리에서 정확히 동일한 위치로 이동합니다. 따라서 고성능 시스템에서는 인스턴스 변수에 의존하지 않는 경우 정적 메서드를 사용하는 것이 좋습니다.
답변
static으로 선언되지 않은 메서드와 변수를 인스턴스 메서드 및 인스턴스 변수라고합니다. 인스턴스 메서드 및 변수를 참조하려면 먼저 클래스를 인스턴스화해야 함은 해당 클래스의 개체를 먼저 만들어야 함을 의미합니다. 정적의 경우 클래스를 인스턴스화 할 필요가 없습니다 u는 마침표를 사용하여 클래스 이름으로 메서드와 변수에 액세스 할 수 있습니다. (.)
예를 들면 :
Person.staticMethod(); //accessing static method.
비 정적 메서드의 경우 클래스를 인스턴스화해야합니다.
Person person1 = new Person(); //instantiating
person1.nonStaticMethod(); //accessing non-static method.
답변
정적 메서드, 변수는 개체 인스턴스가 아닌 전체 클래스에 속합니다. 정적 메서드 인 변수는 클래스의 특정 인스턴스가 아닌 전체 클래스와 연결됩니다. 각 개체는 정적 메서드, 변수의 공통 복사본을 공유합니다. 생성 된 객체 수에 관계없이 클래스 당 하나의 복사본 만 있습니다.
답변
정적 메서드와 인스턴스 메서드의 차이점
-
인스턴스 메서드는 호출되기 전에 클래스의 개체를 만들어야하는 메서드입니다. 정적 메소드는 클래스의 객체를 생성하지 않고 호출 할 수있는 Java의 메소드입니다.
-
정적 메소드는 static 키워드로 선언됩니다. 인스턴스 메서드에 정적 키워드가 없습니다.
-
정적 메서드는 클래스에 대한 단일 복사본으로 존재하는 것을 의미합니다. 그러나 인스턴스 메서드는 해당 클래스에 대해 생성 된 인스턴스 수에 따라 여러 복사본으로 존재합니다.
-
정적 메서드는 클래스 참조를 사용하여 호출 할 수 있습니다. 인스턴스 또는 비 정적 메서드는 개체 참조를 사용하여 호출됩니다.
-
정적 메서드는 인스턴스 메서드와 인스턴스 변수에 직접 액세스 할 수 없습니다. 인스턴스 메서드는 정적 변수 및 정적 메서드에 직접 액세스 할 수 있습니다.
참조 : geeksforgeeks
답변
인스턴스 메소드 => 특정 클래스의 특정 인스턴스에서 호출됩니다. 메소드가 호출 된 클래스를 알고 싶어합니다. 그것이 일어나는 방식에는 ‘this’라는 보이지 않는 매개 변수가 있습니다. ‘this’안에 이미 값으로 설정된 인스턴스 클래스의 멤버가 있습니다. ‘이것은’변수가 아닙니다. 값이며 변경할 수 없으며 값은 호출 수신자를 참조합니다.
예 : TV (실제 프로그램)를 수리하기 위해 수리공 (인스턴스 방법)을 호출합니다. 그는 도구 ( ‘this’매개 변수)와 함께 제공됩니다. 그는 TV를 고치는 데 필요한 특정 도구를 제공하며 다른 것도 고칠 수 있습니다.
에서 정적 메소드 => ‘이’같은 것은 존재하지 않는다.
예 : 동일한 수리공 (정적 방법). 그에게 전화 할 때는 전기공과 같은 수리공을 지정해야합니다. 그리고 그는 와서 당신의 TV 만 고칠 것입니다. 그러나 그는 다른 것을 고칠 도구가 없습니다 ( ‘this’매개 변수가 없습니다).
정적 메서드 는 일반적으로 클래스의 인스턴스 ( ‘this’에서)의 데이터가 필요하지 않고 인수만을 사용하여 의도 된 목적을 수행 할 수있는 작업에 유용합니다.
답변
개체의 동작은 해당 클래스의 변수와 메서드에 따라 다릅니다. 클래스를 생성 할 때이를위한 객체를 생성합니다. 정적 메소드의 경우 정적 메소드가 필요하지 않습니다. 즉, 모든 객체가 동일한 사본을 가지므로 객체가 필요하지 않습니다. 예 :
Myclass.get();
인스턴스 메서드에서 각 개체는 다른 동작을 가지므로 개체 인스턴스를 사용하여 메서드를 호출해야합니다. 예 :
Myclass x = new Myclass();
x.get();
답변
메서드의 상태가 변경되지 않거나 인스턴스 변수를 사용하지 않는 경우.
인스턴스없이 메서드를 호출하고 싶습니다.
제공된 인수에서만 작동하는 경우.
유틸리티 함수는 정적 메서드의 좋은 인스턴스입니다. 즉, math.pow (),이 함수는 다른 값에 대한 상태를 변경하지 않습니다. 그래서 그것은 정적입니다.