AxiZ沖縄ブログ

エンジニア育成学校【AxiZ沖縄】のブログです。

Java基礎の補足

Java基礎で学習する範囲で、
講義で直接扱わない細かい部分や、
知っておくと便利なテクニックや豆知識を紹介。

整数の型

Javaで整数を扱うとき、byte、short、int、long の4種類があります
小さい順に並べてあります。
Javaリテラルとして整数を書くと、自動的にint型になります。
その仕様もあってか、Javaで整数を扱うときはほぼint型です。

longの方が大きいのであれば、longで扱えばよいのに、なぜint?と質問されることがあります。
おそらく、整数を扱い場合は、ほとんどの場合intの範囲で事足りるからでしょう。
intの細かい範囲は他で調べてもらうとして、ざっくり-20億~20億を扱えます。
この数値を超える整数を扱う場合があまりないからだと思います。

longにすることで不都合があるかと言えば、特にありませんが、
longはintよりも扱える桁数が多い分、確保されるメモリの容量が多くなります。
変数が多くなればその分確保するメモリの容量も増えるので、
無駄にメモリを確保しないようにintを使用しているのでしょう。

逆に、扱う数値が小さい場合はbyteやshortを使った方が良いかというと、
特にintのままで問題ありません。

作成するプログラムの性質にもよるでしょうが、
基本的にはintを使い、intの範囲で納まらない数値の場合はlong、と覚えておけば良いでしょう。

名前の付け方

プログラミングしていると、名前を付ける場面が多くあります。
変数名、メソッド名、クラス名、パッケージ名、定数名、などなど。
そして、それぞれ名前を付ける時はこういう名前にしましょう。
という慣習があります。
慣習を守らなくても、エラーになるわけではありませんが、
チームで開発するときには守っていないとソースコードが分かりにくいと言われる可能性大なので、
身に付けておきましょう。

名前の付け方は、大きく分けて2つあります。
キャメルケースとスネークケースと呼ばれるものです。
キャメルケースは、複数の単語を続けて書くとき、単語の頭文字を大文字にする書き方です。
キャメルとはラクダのことで、ラクダのコブが上がったり下がったりすることからこの名前が付いたようです。
キャメルケースの中でも、ローワーキャメルケースとアッパーキャメルケースの2種類があります。
ローワーキャメルケースは、始まりの単語の頭文字は小文字にする名前の付け方です。
一方でアッパーキャメルケースは、始まりの単語も頭文字を大文字にする付け方です。
javaだと、変数名、メソッド名はローワーキャメルケース。
クラス名はアッパーキャメルケースで付けるのが一般的です。

スネークケースは、単語を_(アンダースコア)で区切る方法です。
Javaだと、スネークケースを使用するのは定数の名前ぐらいです。
他の言語や、データベース関連で名前を付ける場合にもよく使用されます。

言語によって慣習は異なりますが、
それぞれの慣習に合わせて命名できるように慣れていきましょう。

代入演算子

Javaでは、演算を行うと同時に代入を行う、
代入演算子という演算子が用意されています。
5種類あります。

  • +=
  • -=
  • *=
  • /=
  • %=

使い方は以下の通りです。

int n = 10;
n += 5; //n = n + 5; としても同じ
n -= 5; //n = n - 5; としても同じ
n *= 5; //n = n * 5; としても同じ
n /= 5; //n = n / 5; としても同じ
n %= 5; //n = n % 5; としても同じ

これを使用しなければできないような処理は特にありませんが、
数値の計算や文字列の結合が簡潔に書けるようになるので、
覚えておきましょう。

インクリメント・デクリメントの前置と後置

インクリメントは、変数に1を加算する演算子です。
デクリメントは変数から1を減算する演算子です。
この2つの演算子には、前置と後置という2種類の書き方があります。

i++; // 後置インクリメント
++i; // 前置インクリメント
i--; // 後置デクリメント
--i; // 前置デクリメント

前置・後置、どちらも1加算(減算)するという処理は同じですが、
評価されるタイミングが異なります。
そのため、書き方によっては結果が異なる場合があります。
例でみてみましょう。

int i = 10;
System.out.println(i++);

この場合、「10」が出力されます。
出力された後に、iは11になっています。

int i = 10;
System.out.println(++i);

この場合、「11」が出力されます。
加算された後に出力されます。

デクリメントについても同じです。
基本的には前置の方を使うことはあまりないと思いますが、
違いは認識しておきましょう。

コンパイルエラーと実行時エラーの判断

プログラミングを習い始めたばかりの時は、
コンパイルエラーと実行時エラーの違いが曖昧な人が多いです。
ここでは、判断のポイントをお伝えします。

コンパイルエラーというのは文法上のエラーのことです。
つまり、書き方がそもそも間違っている場合に起きるエラーです。
実行時エラーは、コンパイラがエラーを判断できず、
実行してみるまでエラーになるかどうか分からないものです。

コンパイルエラーの例

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

クラス宣言は省略しています。
Javaでは、文末にはセミコロン(;)が必要ですが、
それがないため、コンパイルエラーになります。
文法上のミスなのでエラーになるのは想像しやすいですね。

実行時エラーの例

public static void main(String[] args) {
    int n = 0;
    System.out.println(10 / n);
}

このソースは実行時エラーになります。
数学の世界では、0による割り算はできません。
なので、Javaでも0による割り算を行うと、エラーになります。

少しJava勉強したことのがる人間が見ると、実行すると0で割り算されることは明らかなので、
コンパイルエラーにしてもいいのでは?と思う人もいます。
でも実際にはコンパイルエラーにはならないのです。
文法上、割り算の書き方としては間違っていないからです。

以下のソースを見てみると、コンパイルエラーにならない理由が分かります。

public static void test(int n) {
    System.out.println(10 / n);
}

これは、メソッドの引数でint型の変数を受け取り、
それを割り算に使用しています。
この場合、エラーが発生する可能性もありますが、
その可能性はこの処理を呼び出す側に依存します。
そのためこのソースだけを見ても、
エラーが発生するかしないかは実行してみるまで判断できません。
ここからわかることは、コンパイラは変数の型はチェックできるます、
値まではチェックできないという事です。

このように、人間の目で見たら明らかにエラーになるのが分かる場合でも、
コンパイラは実際の値までをチェックすることはできないため、
実行時エラーというものがあります。

人の目で明らかにエラーになるのが分かることでも、
それは文法上のエラーなのか、
それともコンパイラには見つけられないエラーなのか、
を判断できるようにしましょう。

JavaDocコメントって何?

Javaではコメントの書き方が3種類あります。

  • 1行コメント(//)
  • 複数行コメント(/ /)
  • JavaDocコメント(/* /)

の3つです。
この中で最初の2つは分かりやすいです。
単にソースコードを無効にするために使用します。
3つ目のJavaDocコメントに関しては、何のことかよく分からない人が多いようなので、簡単に解説。
JavaDocのDocは、「Document」の略です。
Documentは、文書のこと。
つまり、ソースコードからドキュメント(文書)を作成するためのコメントです。

Java API リファレンス を見てみましょう。
Oracleが提供しているJavaのマニュアルです。
Javaが標準で用意しているクラスの詳細な説明などが書かれています。
このリファレンスこそが、JavaDocから生成されたドキュメントです。
Javaソースコードに、JavaDocコメントのルールにのっとってソースの説明文を書いておけば、
こんな感じのhtml文書を簡単に作成することができるわけです。

JavaDocを使うかどうかはプロジェクトによって異なります。
よほど大きなプロジェクトか、きっちりしたプロジェクトでないとJavaDocでドキュメントを作ることはないと思いますが、
JavaDocコメントがどんな意味を持つかのかを理解しておきましょう。

jarファイルとは

jarファイルというファイルについて理解しておきましょう。
jarファイルは、拡張子が.jar(xxx.jar)となっているファイルです。
一言でいうと、javaのクラスファイルをまとめた圧縮ファイルです。
Javaのライブラリとも言われます。

Javaでプログラムを開発するときは、
既に用意されているクラスを利用して開発していくことになります。
それらのクラスを利用できるようにするためには、
開発している環境でそのクラスが「分かる」状態にしなければいけません。

eclipseを使って開発をする場合、
Javaで最初から用意されているクラスは特に意識しなくても利用することが可能ですが、
他のベンダー企業が作成したクラスを利用する場合は、
そのクラスが含まれるjarファイルを入手して、
そのjarファイルを利用できる状態にしてあげる必要があります。

設定方法などはここでは細かく触れませんが、
他のベンダーが作成したクラスを利用するには、
jarファイルが必要になるということを理解しておきましょう。

圧縮ファイルなので、拡張子を「.zip」などに変更すれば、
解凍して中身を確認することもができます。