8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JAVA メモ 完全修飾クラス名/staticインポートの躓きやすい処(重要)

Last updated at Posted at 2015-11-18

##完全修飾クラス名
正式なクラス名は常にパッケージとの組み合わせで表現される
「String」のようにクラス名単独で登場しますが、あくまでも「java.lang.String」が正式なクラス名。Java用語では、Stringのような省略形を「単純名(simple name)」、「java.lang.String」のような形式を「完全修飾名(fully qualified name)」と呼ぶ。

public class Test13 {
	public static void main(String[] args) {
		java.lang.String a = "こんにちは";
		System.out.println(a);
	}

}

■実行結果
こんにちは

##無名パッケージに属するクラスは、同じ無名パッケージに属するクラスからしかアクセスできない

■Sample.java エラーになる例

package ex5;

public class Sample {
	public static void main(String[] args) {
		System.out.println(num);
	}
}

■Test13.java エラーになる例

public class Test13 {
	protected int num = 10;
}

##FQCN(完全限定クラス名)入力の手間を省くための宣言

import パッケージ名.クラス名;

##staticインポート

staticインポートとは、static変数やstaticメソッドをクラス名を指定せずに使用する機能です。これにより、使用するたびにクラス名を記述する必要がなくなります。キーワードとしてimport staticを使用し、完全修飾名およびインポートしたいstatic変数やstaticメソッドを指定します。 ※完全修飾名とは、「パッケージ名.クラス名」といった正式なクラス名称のことです。

【構文】
import static パッケージ名.クラス名.static変数名;
import static パッケージ名.クラス名.staticメソッド名;
import static パッケージ名.クラス名.*;

http://www.atmarkit.co.jp/ait/articles/0801/15/news158_2.html

■OverloadImport.java

package ex6;
import static ex6.Test.print;

public class OverloadImport {
	public static void main(String[] args) {
		print("sample");
		print();
	}
}

■Test.java

package ex6;

public class Test {
	public static void print() {
		System.out.println("default");
	}

	public static void print(String str) {
		System.out.println(str);
	}

}

■実行結果
sample
default

■補足
import static ex6.Test.print; は
import static ex6.Test.*; でもいい

■Test14.java

//import static Test141.num;
//import static Test141.print;

public class Test14 {
	public static void main(String[] args) {
		Test141.num = 10;
		Test141.print();
	}

}

■Test141.java

public class Test141 {
	public static int num = 0;

	public static void print() {
		System.out.println(num);
	}

}

##デフォルトパッケージはインポートできませんし、staticインポートも出来ない。staticインポートの検証を行いたいなら、パッケージは必須。

■実行結果
10

■Test16ex.java

package ex1;

import static ex1.Test16.num;
import static ex1.Test16.print;

public class Test16ex {
	public static void main(String[] args){
	num = 10;
	print();
	}
}

■Test16.java

package ex1;

public class Test16 {
	public static int num = 0;

	public static void print() {
		System.out.println(num);
	}

}

■実行結果
10

■補足

import static ex1.Test16.num;
import static ex1.Test16.print;

import static ex1.Test16.*;
とワイルドカードを使用して1つにまとめてもいい

■補足
Test16ex.javaを、

package ex1;

//import static ex1.Test16.*;

public class Test16ex {
	public static void main(String[] args){
	Test16.num = 10;
	Test16.print();
	}
}

としてもいい。

#まとめ
##今回staticインポートの勉強でわかったこと

  • 同じpackageに属するクラスの変数を使いたいときは、はimportしなくても、クラス名.変数で使える
  • default packageはインポートできないし、staticインポート出来ない。staticインポートの検証をしたいなら、packageは必須
  • import static ex1.Test16.*;などの様に、ワイルドカードを使ってimport文を1つにすると楽

##インポートしたクラスに、インポートされたメソッドやフィールドと同名のものがあった場合、そのインポートは無視される

■Main.java

package ex7;

public class Main {
	private final static int VALUE = 0;

	public static void main(String[] args) {
		System.out.println(VALUE);
	}

}

■Sample.java

package ex7;

public class Sample {
	public final static int VALUE = 10;

}

■実行結果
0

■補足
Main.javaをコンパイルすると、自動的に

package ex7;

public class Main {
	private final static int VALUE = 0;

	public static void main(String[] args) {
		System.out.println(ex7.Main.VALUE);
	}

}

となる

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?