388

이런 식으로 사용할 때 :

import static com.showboy.Myclass;

public class Anotherclass{}

무슨 차이점이 있니?import static com.showboy.Myclassimport com.showboy.Myclass?

8 답변


346

만나다선적 서류 비치

정적 가져 오기 선언은 다음과 같습니다.   정상적인 수입과 비슷하다.   선언. 정상적인 수입이있는 곳   선언은 클래스를 가져옵니다.   패키지를 사용하도록 허용   패키지 자격없이   정적 가져 오기 선언 가져 오기   클래스의 정적 멤버   그들은 수업없이 사용된다.   자격.

언제 정적 가져 오기를 사용해야합니까?   아주 조심스럽게! 네가 할 때만 사용해라.   그렇지 않으면 지역 선언을 유혹해야한다.   상수의 사본, 또는 남용   상속 (상수 인터페이스   안티 패턴). 즉, 그것을 사용하십시오.   잦은 액세스가 필요할 때   하나 또는 두 개의 정적 멤버   수업. 정적을 과도하게 사용하면   가져 오기 기능을 사용하면   프로그램을 읽을 수없고 유지할 수없는,   네임 스페이스를 모든   정적 멤버. 독자   귀하의 코드 (귀하, 몇 개월   당신이 그것을 쓴 후에) 알지 못할 것입니다.   정적 멤버가 오는 클래스   에서. 모든 정적 가져 오기   수업의 멤버가 될 수 있습니다.   특히 가독성에 해롭다.   한두 명의 회원 만 있으면됩니다.   개별적으로 가져 오십시오. 익숙한   적절하게, 정적 가져 오기로 만들 수 있습니다.   귀하의 프로그램을보다 읽기 쉽도록   반복의 상용구 제거하기   클래스 이름의.


  • 나는 @xsl에 의한 위의 경고에 완전히 동의한다. Junit의 Assert는 매우 유용합니다.import static org.junit.Assert. *모든 단위 테스트를 위해. - Yves B
  • - 간단한 설명을 쓰는 대신 눈길을 끄는 문서 파일이 아닌 아주 오랫동안 붙이는 컨트롤. - Błażej Michalik
  • @xsl 포스트의 하단 부분이 견적 블록에 있어야합니까? 당신이 타이핑 한 것처럼 보입니다. - Ferrybig
  • @Ferrybig : 링크 된 문서의 견적서입니다. - Joshua Snider
  • 좋아요.include루비에서! - Chloe

206

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

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

나는 이것을 할 수있다 :

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


53

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

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은 클래스의 정적 멤버를위한 것입니다.


33

정적 가져 오기의 기본 개념은 정적 클래스, 정적 변수 또는 열거 형을 사용할 때마다 가져올 수 있고 일부 입력에서 자신을 저장할 수 있다는 것입니다.

나는 예를 들어 나의 요점을 자세히 설명 할 것이다.

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));
  }
}

노트: 정적 가져 오기를 사용하면 코드를 혼동스럽게 읽을 수 있습니다.


  • 그것은 쓸만한 의미가 있겠는가?import static java.lang.Math별표없이? - Chris Middleton
  • @AmadeusDrZaius 아니요, import static은 클래스의 정적 멤버에만 사용됩니다. - Harry
  • 좋은 대답입니다! 많은 '초보자 ' 그러나이 게시물을 읽으면 하나의 경고를 주어야합니다.별표를 너무 많이 사용하지 마십시오.네임 스페이스 오염을 방지합니다. - goerlibe

22

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

정적 가져 오기는 필드 또는 멤버 유형을 가져 오는 경우에만 작동하므로 컴파일러 오류가 발생합니다. (MyClass가 쇼 클래스의 내부 클래스 나 멤버가 아니라고 가정)

나는 네가 의미 한 것 같아.

import static com.showboy.MyClass.*;

이는 MyClass의 모든 정적 필드와 멤버를 실제 컴파일 유닛에서 사용할 수있게합니다. 위에서 설명한대로


12

그만큼importJava 프로그래머는 패키지 규정없이 패키지의 클래스에 액세스 할 수 있습니다.

그만큼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");  

 }   
} 

참조 :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에서 Java - JavaRevisited- 더 많은 것을 알 수있는 아주 좋은 자료import static.

연결된 질문


관련된 질문

최근 질문