##完全修飾クラス名
正式なクラス名は常にパッケージとの組み合わせで表現される
「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);
}
}
となる