Java Silver SE11 1章
黒本をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。
package
コンパイラやJVMはクラス名の重複を防ぐために、「完全修飾クラス名」で取り扱う。
(名前空間を提供する)
完全修飾クラス名(full qualified class name) FQCN は先頭行に記述する。
package パッケージ名.クラス名;
- パッケージ単位でアクセス制御が可能になる
- 公開、非公開に分けることができる
- クラスは必ず何らかのパッケージに属する
- (記載がない場合、無名パッケージに属するものと解釈される)
- ソースの先頭行に記述する
- コメントは記述可能
- 無名パッケージに属するクラスは、
同じく無名パッケージに属するクラスからしかアクセスすることができない
クラスのアクセス修飾子
public | 記載なし | private |
---|---|---|
全て可能 | 同じパッケージに属するクラス | クラスには指定できない |
実際に検証
package chapter1.test2.sub;
public class Sample1 {
public String greet() {
return "hello";
}
}
package chapter1.test2.sub;
// publicを記載しない
class Sample2 {
public String greet() {
return "hello";
}
}
package chapter1.test2.main;
import chapter1.test2.sub.Sample1;
import chapter1.test2.sub.Sample2;
public class Main {
public static void main(String[] args) {
// sample1はインスタンス生成できる
Sample1 sample1 = new Sample1();
// エラー sample2はインスタンス生成できない
Sample2 sample2 = new Sample2();
// hello
System.out.println(sample1.greet());
// エラー
System.out.println(sample2.greet());
}
}
import
FCQNの入力の手間を省くために、import文がある。
package文より後に記述する。
import パッケージ名.クラス名;
import宣言はあくまでも「入力軽減」であり、FCQNの記述を省略しているに過ぎない。
java.langバッケージに関しては、import文を記述しなくとも自動的にインポートされる。
(使用頻度がとても高いから)
例:System, Integer, String など
また同じパッケージに属するクラスも、インポート宣言する必要なく利用できる。
Javaクラスを実行するコマンド
メモリ上にクラスファイルに相当するバイトコードを出力し、これを実行している。
(ソースファイルモードのこと)
javaコマンドでTest.javaを実行する場合
> java Test.java
> java Test
エスケープ
特別な意味を持つ記号をただの文字列として認識させる文字のこと。
記号の前に「¥」を記述する。
起動パラメータを実行した場合の例
起動パラメータ | 実行結果 |
---|---|
¥" | " |
a¥" | a" |