"가져 오기"후 "정적"수정자는 무엇을 의미합니까?


438

이렇게 사용하면 :

import static com.showboy.Myclass;

public class Anotherclass{}

차이 무엇 import static com.showboy.Myclassimport com.showboy.Myclass?

답변:


390

설명서를 참조하십시오

정적 가져 오기 선언은 일반 가져 오기 선언과 유사합니다. 일반 가져 오기 선언이 패키지에서 클래스를 가져 와서 패키지 자격없이 사용할 수있는 경우 정적 가져 오기 선언은 클래스에서 정적 멤버를 가져와 클래스 자격없이 사용할 수 있습니다.

정적 가져 오기를 언제 사용해야합니까? 매우 드물게! 상수의 로컬 사본을 선언하거나 상속을 남용하려는 유혹이있는 경우에만 사용하십시오 (Constant Interface Antipattern). 즉, 하나 또는 두 개의 클래스에서 정적 멤버에 자주 액세스해야 할 때 사용하십시오. 정적 가져 오기 기능을 과도하게 사용하면 프로그램을 읽을 수없고 유지 관리 할 수 ​​없어서 가져 오는 모든 정적 멤버로 네임 스페이스를 오염시킬 수 있습니다. 코드를 작성한 후 몇 개월이 지난 후에도 코드 멤버는 정적 멤버의 클래스를 알 수 없습니다. 클래스에서 모든 정적 멤버를 가져 오는 것은 특히 가독성에 해로울 수 있습니다. 하나 또는 두 개의 멤버 만 필요한 경우 개별적으로 가져 오십시오. 적절하게 사용하면 정적 가져 오기로 프로그램을 더 읽기 쉽게 만들 수 있습니다.


28
위의 @xsl 경고에 전적으로 동의합니다. 매우 유용한 한 가지 영역은 junit의 Assert 입니다. 모든 단위 테스트에 대해 static org.junit.Assert. *가져옵니다 .
BxlSofty

3
-간단한 설명을 작성하는 대신 매우 길고 눈길을 끄는 문서 파일을 붙여 넣는 것을 제어합니다.
Błażej Michalik

@xsl 게시물의 하단 부분이 따옴표 블록으로되어 있습니까? 입력 한 것 같습니다.
Ferrybig

1
@Ferrybig : 링크 된 문서에서 인용 한 것입니다.
Joshua Snider

include루비 와 같습니다 !
Chloe

227

귀하가 언급 한 두 수입 간에는 차이가 없습니다. 그러나 정적 가져 오기를 사용하여 다른 클래스의 정적 멤버에 대한 규정되지 않은 액세스를 허용 할 수 있습니다. 내가 이것을해야했던 곳 :

import org.apache.commons.lang.StringUtils;
      .
      .
      .
if (StringUtils.isBlank(aString)) {
      .
      .
      .

나는 이것을 할 수있다 :

import static org.apache.commons.lang.StringUtils.isBlank;
      .
      .
      .
if (isBlank(aString)) {
      .
      .
      .

자세한 내용은 설명서를 참조하십시오 .


57

정적 가져 오기는 다음 대신 클래스의 정적 필드 / 메소드를 가져 오는 데 사용됩니다.

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

당신은 쓸 수 있습니다 :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

코드의 다른 클래스에서 상수를 자주 사용하고 정적 가져 오기가 모호하지 않은 경우에 유용합니다.

Btw, 예에서 "import static org.example.Myclass;" 작동하지 않음 : import는 클래스 용이고 import static은 클래스의 정적 멤버 용입니다.


37

정적 가져 오기의 기본 아이디어는 정적 클래스, 정적 변수 또는 열거 형을 사용할 때마다 해당 클래스를 가져 와서 입력하지 않아도된다는 것입니다.

나는 예를 들어 내 요점을 설명 할 것이다.

import java.lang.Math;

class WithoutStaticImports {

 public static void main(String [] args) {
  System.out.println("round " + Math.round(1032.897));
  System.out.println("min " + Math.min(60,102));
 }
}

정적 가져 오기와 동일한 코드 :

import static java.lang.System.out;
import static java.lang.Math.*;

class WithStaticImports {
  public static void main(String [] args) {
    out.println("round " + round(1032.897));
    out.println("min " + min(60,102));
  }
}

참고 : 정적 가져 오기를 사용하면 코드를 혼란스럽게 만들 수 있습니다.


4
import static java.lang.Math별표없이 쓸 내용이 있습니까?
Chris Middleton

1
@AmadeusDrZaius nope, import static은 클래스의 정적 멤버 전용입니다.
Harry

1
좋은 대답입니다! 많은 '초보자'가이 게시물을 읽었으므로 하나의 작은 경고를 표시해야합니다 . 네임 스페이스 오염을 방지하기 위해 별표과도하게 사용하지 마십시오 .
goerlibe

24

"import static com.showboy.Myclass"와 "import com.showboy.Myclass"의 차이점은 무엇입니까?

정적 가져 오기는 필드 또는 멤버 유형 가져 오기에만 작동하므로 첫 번째는 컴파일러 오류를 생성해야합니다. (MyClass가 showboy의 내부 클래스 또는 멤버가 아니라고 가정)

나는 당신이 의미하는 것 같아

import static com.showboy.MyClass.*;

위에서 설명한 것처럼 MyClass의 모든 정적 필드와 멤버를 실제 컴파일 단위에서 사용할 수있게합니다 ...


14

import패키지 자격이없는 패키지의 액세스 클래스 자바 프로그래머를 할 수 있습니다.

static import기능을 사용하면 클래스 자격없이 클래스의 정적 멤버에 액세스 할 수 있습니다.

import클래스에 대한 접근성을 제공하고, 인터페이스 반면,이 static import클래스의 정적 멤버에 대한 접근성을 제공합니다.

예 :

수입

import java.lang.System.*;    
class StaticImportExample{  
    public static void main(String args[]){  

       System.out.println("Hello");
       System.out.println("Java");  

  }   
} 

고정 수입

import static java.lang.System.*;    
class StaticImportExample{  
  public static void main(String args[]){  

   out.println("Hello");//Now no need of System.out  
   out.println("Java");  

 }   
} 

참조 : 자바 5의 정적 가져 오기 무엇입니까


2

당신이라는 클래스 내에서 정적 필드와 방법을 말해 MyClass라는 패키지 안에 myPackage당신이 입력하여 직접 액세스 할 myStaticField또는 myStaticMethod각 시간을 입력하지 않고 MyClass.myStaticField또는MyClass.myStaticMethod .

참고 : import myPackage.MyClass 또는 myPackage.* 다른 리소스에 액세스하려면 또는


1

이후 static수정자는 import클래스의 정적 필드를 검색 / 사용하기위한 것입니다. 내가 사용하는 한 가지 영역은 import static클래스에서 상수를 검색하는 것입니다. import static정적 메소드 에도 적용 할 수 있습니다 . 잘못 입력 import static했기 때문에 입력하십시오 static import.

뭐가 static import 자바 - JavaRevisited - 아주 좋은 자원이 더에 대해 알고import static.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.