1. Top
  2. Java SE
  3. Javaの書き方

Javaの書き方

Javaの基本的な文法

セミコロン

Javaでは文(ステートメント)の末尾には必ずセミコロン [ ; ] を付ける必要があります。セミコロン [ ; ]を付けるまでは一行とみなされますので、ステートメントを複数行に改行して記述することも可能です。
// セミコロンがないのでコンパイルエラー
System.out.println("出力メッセージ")

// 複数行に分かれていますが、上のコードと下のコードは同じ動作をします
System.out.println(strMsgA + strMsgB + strMsgC + strMsgD + strMsgE + strMsgF + strMsgG);

System.out.println(strMsgA + 
                   strMsgB + 
                   strMsgC + 
                   strMsgD + 
                   strMsgE + 
                   strMsgF + 
                   strMsgG);

大文字小文字

Javaでは大文字、小文字は異なる文字として区別して扱われます。
つまり System.out.printlnと system.out.printlnでは全く違った事になります。
System.out.println("Hello World!!");    // 正 
system.out.println("Hello World!!");    // 誤 ( SystemのsSが小文字 ) 

コメント

Javaでのコメントは [ // ] から始まるものと [ /* ~ */ ] で囲むもの、JavaDocで使用する [ /** ~ */ ] で囲むものの合計三つあります。今回は先の二種類について、コメントの有効範囲を見ていきましょう。


//を使用する行末までのコメント
System.out.println("Hello World!!");    // ここからコメント行末まではコメント文です。
ここはもうコメント文ではありません!!エラーになります。
// この行はすべてコメントになります!! 


/* */を使用する複数行に及ぶコメント
/* この行はコメント行です
この行もコメント行になります*/
System.out.println("Hello World!!"); 



ページの先頭へ

基本データ型

Javaで使用できる変数には大きく分けて、基本データ型(プリミティブ型)と、参照型(オブジェクト型)の 2つの型があります。 参照型は後述するとして、今回は基本となる 8つの基本データ型について、それぞれの特徴を見ていきましょう。

コード内で基本データ型は全て小文字で記述されます。Javaでは、基本データ型のサイズはプラットフォーム依存ではなく、どのプラットフォームでも不変なため移植性が確保されています。

変数型名 最小値 最大値 代入可能な値
byte -127 128 整数
short -32768 32767 整数
int -2147483648 2147483647 整数
long -9223372036854775808 9223372036854775807 整数
float 1.4013e-45(精度) 3.40282e38(精度) 小数
double 0(精度) 1.79769e308(精度) 小数
char 0 256 文字、unicode、整数
boolean - - 真/偽

整数型

byte型は名前そのままで、1バイトの範囲の値を扱いたいときに使用します。short、int、longは見ていただければ分かりますが、扱える数値の長さが異なります。ほとんどの場合 int型で事足りますが、大きい値を扱いたいときは long型を使います。

数値を long型として扱う場合には明示的に long型であると指定する必要があります。どうするかというと、以下のように数値の最後に 「 L」 とつけます。最後のLをつけないとコンパイルで値が大きすぎるといわれてエラーとなってしまいます。 ( Javaでは何指定していない数値は int型として扱われてしまうことになります。)
long l = 12345678901L;

浮動小数点型

小数点以下の数値を扱う場合には、float、doubleなどの浮動小数点型を使用します。上記の表を見ると分かるとおり、float型よりも double型の方がより小さい値を扱えるため精度が高くなります。

整数を明示的に指定しない場合 int型として扱われると前述しましたが、浮動小数点型は明示的に指定しない限り double型として解釈されます。 float型として扱いたい場合は数字の最後に「 F 」を付け、明示的にfloat型であると指定する必要があります。
float f = 123.456F;

文字型

文字型はシングルコーテーション「 ' 」で囲んだ一文字を保持することが出来ます。
char chr1 = 'a';


ページの先頭へ

変数の型変換

型変換とは、上記で説明した各型から別の型へ変換することを言います。型変換には、Java実行環境により暗黙的に変換される型変換と、プログラマが意識的に変換を行うキャストと呼ばれる変換があります。

Javaではユーザが変数に格納しているデータが知らないうちに損なわれないように考慮されています。つまり、より大きな型の変数やオブジェクトへの変換は認めますが、逆への変換はデータが損なわれる可能性があるため回避しようとします。このような場合に使用するのが「型キャスト」の仕組みになります。

暗黙的な型変換

基本データ型の型変換は、Java実行環境がデータ格納領域がより広い型への変換を要求した時に、暗黙的な型変換が行われます。ある基本データ型の変数を、別の基本データ型の変数に代入する際に型変換が行われています。 これらの変換は闇雲に行われているのではなく上記ルールに従います。

※メソッドを呼び出す際、呼び出すメソッドの引数の型に要求されている型と異なる型を指定した場合も暗黙的な型変換が行われます。


【型変換が行われる例】
int x = 10;
double y;
y = x;
変数 x(int型)を、変数 y(double型) に代入する時に暗黙的な型変換が行われます。
int型の変数xがdouble型に変換された後に代入が行われますが、変換ルールに沿っているため、問題ありません。


【型変換が行われない例】
int x = 10;
short y;
y = x;
変数 x (int型)を、変数 y (short型)に代入することはできません。
int型の変数 x が short型に自動変換されることはないため、実行結果はコンパイルエラーとなります。
※型変換は SJC-P の試験で何問かは出てきますので受験する方はしっかり覚えておきましょう。

キャスト

キャストとはJava実行環境が暗黙的に行う変換ではなく、プログラマが意識的に行う変換処理です。
暗黙的な型変換では変数の変換処理を行えない場合に、このキャストを使用します。キャストは以下のように変換したい型を( )で囲み、変換元の変数の前に指定することにより行えます。


(変換したい型)変換元の変数;


キャストの必要のない場合は、【 型変換のルール 】にも書きましたが、さらに簡単にまとめると以下のようになります。 ある型に対して右側にある型はそのまま代入できます。
例えば float型には long, int, short, byte型がキャストしないで代入することが出来ます。

基本データ型のキャスト

基本データ型では、boolean 型以外の基本型の変数を、他の boolean型以外の基本型の変数にキャストできます。
キャストはデータ格納領域が広くなるキャストでも、データ格納領域が狭くなるキャストでもかまいません。

データ格納領域が広くなるキャストの場合は、キャストを明示的に指定しなくても、必要な場合には、暗黙的な型変換が行われます。
※ boolean 型は他のどの基本データ型変へのキャストはできません。
int x = 10;
byte y = (byte)x;
//int型の変数xをbyte型にキャストして、変数yに代入しています。
//型変換ではint型の変数xをbyte型に変換することはできません。

参照型のキャスト

参照型のキャストは基本型のキャストと異なり、コンパイル時のルールと実行時のルールを意識する必要があります。何故かと言うと、参照型のデータには実体ではなく、実体が保存されている位置を表すアドレス情報が併せて格納されているためです。

コンパイラは参照型の変数が参照する実体がどのようなものかは、コンパイルする時点ではわかりません。そのため、コンパイル時にエラーが出なくても、実行する時点で初めて実行時のルールにそぐわないと判断され、エラーを生成します。
SuperClassAはSubClassA1のスーパークラスとします。
SuperClassAはSubClassA2のスーパークラスとします。 

SubClassA1 a1 = new SubClassA1( );
SuperClassA a;
SubClassA2 a2;

//変数aと変数a1にはクラスの継承関係があるため、コンパイルは成功します。
//また、実体においても、変数aは変数a1のスーパークラスであるため、
//【実行時のキャストのルール】に合致し、 実行も成功します。

a = (SuperClassA)a1;  //①コンパイルOK、実行OK

//変数a2と変数aにはクラスの継承関係があるため、コンパイルは成功します。
//実体においては、変数aの実体は①で代入が行われているためSubClassA1です。
//変数a2の実体はSubClassA2です。
//SubClassA2はSubClassA1のスーパークラスではないため、 
//【実行時のキャストのルール】に合致せず、例外が返されます。 

a2 = (SubClassA2)a;   //②コンパイルOK、実行NG 





ページの先頭へ