8

クラスstaticをインポートするときのキーワードの意味がわかりません。System

import static java.lang.System.*

私はJavaについての本を読んでいて、そこに書かれています。

この単語を使用しないインポート宣言staticは、パッケージの名前で始まり、次のいずれかで終わる必要があります。

  • そのパッケージ内のクラスの名前
  • アスタリスク(そのパッケージ内のすべてのクラスを示します)

たとえば、宣言import java.util.Scanner;は有効です。これjava.utilは、がJava APIのパッケージの名前であり、 がパッケージScannerのクラスの名前であるためjava.utilです。

別の例を示します。はJavaAPIのパッケージの名前であり、アスタリスクはパッケージ内のすべてのクラスを参照しているため、宣言import javax.swing.*;は有効です。javax.swingjavax.swing

そして、私は次のコードを持っています:

public class Addition {

   public static void main(String[] args) {
      double num;
      num = 100.53;

      num = num + 1000;

      // So when I want to import the whole package java.lang as written in the book, it doesn't work:
      // import java.lang.*;
      // or like this:
      // import static java.lang.*;
      // NetBeans in both cases doesn't see these abbreviated names `out` and throws errors. Why?
      out.print("The result is ");
      out.print(num);
      out.println(" .");
   }
}

そして、この方法でインポートすると機能します。

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

しかし、これを実行しようとすると機能しません。

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

staticこの特定の場合のキーワードの意味は何ですか?

そして、なぜクラスをimport java.lang.*;含むパッケージ全体をインポートしないのですか?System

4

4 に答える 4

13

インポートを使用すると、次のstaticように記述できます。

out.print("The result is ");

これではなく:

System.out.print("The result is ");

たとえばhttp://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.htmlを参照してください。

于 2012-05-25T14:56:46.203 に答える
2

静的インポートは、Javaプログラミング言語で導入された機能であり、パブリック静的としてクラスで定義されたメンバー(フィールドとメソッド)を、フィールドが定義されたクラスを指定せずにJavaコードで使用できるようにします。この機能は、バージョン5.0で言語に導入されました。

この機能は、フィールドを最初に定義したクラスを参照しなくても、コードに定数を含めるためのタイプセーフなメカニズムを提供します。また、定数インターフェイスを作成する方法を廃止するのにも役立ちます。定数のみを定義し、そのインターフェイスを実装するクラスを作成するインターフェイスです。これは、インターフェイスの不適切な使用と見なされます。

staticキーワードを使用してインポートする場合、それはクラスに何らかの方法で挿入したことを意味し、独自のクラスのメソッドを呼び出すのと同じ方法でそのメソッドを使用できます。

例えば:

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

と :

out.println("I have a house with an area of " + (PI * pow(2.5,2)) + " sq. cm");
于 2012-05-25T15:17:05.397 に答える
2

次のように、単体テストで静的インポートをよく使用します。

import static org.junit.Assert.*;

これにより、次のコードを書くことができます。

assertEquals(2, list.size());

このコードの代わりに:

Assert.assertEquals(2, list.size());
于 2012-05-25T15:00:48.497 に答える