調布で行われていた、有限会社ナレッジデザインの山本道子さんのJava言語セミナーに行ってきた話の続きです。
Javaにはデータ型が2種類ある
Javaにはデータ型が2種類あります。
- 基本データ型(プリミティブ型)
- 参照型
基本データ型 (プリミティブ型)
データ型 | 意味 | サイズ | 表現できる値 |
---|---|---|---|
byte | 符号付き整数 | 8bit | -27~27-1(-128~127) |
short | 符号付き整数 | 16bit | -215~215-1(-32768~32767) |
int | 符号付き整数 | 32bit | -263~263-1 |
long | 符号付き整数 | 64bit | -27~27-1 |
float | 浮動小数点数 | 32bit | IEEE754に基づく値 |
double | 浮動小数点数 | 64bit | IEEE754に基づく値 |
char | Unicodeで表現できる1文字 | 16bit | ¥u0000~¥uFFFF |
boolean | 論理値 | 1bit | true、false |
参照型
配列型、クラス型、インタフェース型
参照型の値は, オブジェクトへの参照となります。
オブジェクトとは, クラス型から動的に生成されるインスタンス、あるいは動的に作成される配列のことです。
参照値(しばしば単に参照(reference)とも呼ばれる)は、こういったオブジェクトへのポインタ(pointer)や, どのオブジェクトも参照しない特殊なnull参照となります。
文字列は参照型
String型は、参照型に含まれるクラスとして提供され、StringクラスはJavaのクラスライブラリです。(クラス型ということだと思います。)
基本データ型のchar型は、1文字しか扱えないのに対し、String型は複数文字列を扱えます。
String型は、内部的に見ると基本データ型のchar型を複数集めた配列のようなイメージで考えることができそうです。
参照型の変数は、値のかたまりを指し示す変数という意味で、参照変数とも呼ばれるそうです。
Stringクラスの機能としてメソッドがありますが、セミナーでは2つ紹介してくれました。
メソッドを使うには、参照変数名 . メソッド名( ); と記述します。
String s1 = "Hello"; //length()メソッドは、int型で文字数を返します。 int num = s1.length(); //charAt()メソッドは、()内の数の位置の文字を取得。 //ただし、最初の文字が0番目となるので、ここでは"Hello"の2文字目のeの文字が取得されます。 char c = s1.charAt(1);
配列
同じデータ型の値をまとめて扱う際に使用する仕組みです。
配列は同じ目的で使用したい変数が大量にある場合に便利です。
配列に格納する値は、基本データ型、参照型のいずれも可能です。
配列の作成
配列を使うには、
- 配列の宣言(データ型を決め、配列名をつける)
- 領域確保(配列に格納する要素の数を指定し、使用するメモリ領域を指定)
を行います。
データ型[] 配列名;
配列名 = new データ型[変数名];
データ型[] 配列名 = new データ型[変数名];
配列の宣言には3種類の書き方があり、どれを使ってもOKです。
int[] id; //データ型の直後に[]、配列名の前に空白 int id[]; //データ型の後ろに空白、配列名の直後に[] int []id; //データ型の後ろに空白、配列名の直後に[]
配列の初期化
宣言した配列を使い始める前に、領域の確保、値(初期値)の代入まで最初に行っておくことを、配列の初期化と呼ぶようです。
配列の要素数を確認するには、配列名.length を使用します。
int[] id = {100, 101, 102, 103, 104}; int size = id.length; //変数sizeには配列idの要素数5が格納される
配列の初期値
配列は生成されると、データ型にあわせて初期化が行われる仕組みになっているようです。
class Hairetu{ puvlic static void main(String[] args){ int[] array = new int[5]; System.out.println("array[0]の値:" + array[0]); } }
配列の要素に値を代入してませんが、配列を作成するとデフォルトの値が用意されるようです。上の例では『array[0]の値:0』と表示されます。
配列の初期値
データ型 | 値 |
---|---|
byte、short、int、long | 0 |
float、double | 0.0 |
char | ¥u0000 |
boolean | false |
参照型 | null |
配列のあるあるエラー
配列を使っていると出やすいエラーです。
class hairetu { public static void main(String[] args){ int i; //変数宣言 //基本データ型は配列と違い初期値をデフォルトで用意してくれてないので6行目でコンパイルエラー //変数宣言だけでなく、i = 10;のように変数に値を入れることでエラーが解消されます。 System.out.println("iの値:" + i); int[] array = new int[5]; //ArrayIndexOutOfBoundsExceptionという実行時エラーが9行目で起きます。 //ここでは配列の要素数が5であるのに、6番目の要素にアクセスしようとして起きたエラーです。 System.out.println("array[0]:" + array[5]); } }
コマンドライン引数
Javaコマンド実行時にプログラムへ渡すことができる値のことです。
これまで、public static void main(String[ ] args){ }というメソッドの中にでてきた引数『String[ ] args』をコマンドライン引数というようです。
java sample 引数0 引数1 低数2 ・・・・ 引数n
例えば、for文で配列を配列の要素数だけ繰り返すプログラムがあったとします。
class commandLine{ public static void main(String[] args){ for(int i=0; i<args.length; i++){ System.out.println(args[i]); } } }
コマンドプロンプト側で、javaコマンド実行時に引数を渡してあげると、データ型がStringの配列argsの0番目、1番目、2番目の要素に値を渡せます。
今回は要素数をargs.lengthとしてるので、やろうと思えば引数をいくらでも指定できると思われます。
値だけを変えたい時などは、コマンドライン引数で変えると再コンパイルせずに済むようです。
ちなみに、ファイル名(ここではcommand_sample.java)とクラス名(ここではcommandLine)を変えることもできるようですが、クラス名 = ファイル名 というように統一したほうがいまのところ良いような気がします。
コマンドライン引数はString型の配列なので、値は文字列として扱われるので数値として扱いたい場合は、Javaのクラスライブラリの1つIntegerクラスのparseInt()メソッドを利用します。
int num = Integer.parseInt(args[1]);
実際の使用例(文字列を数値にして計算)
class calc_sample{ public static void main(String[] args){ System.out.println("length:" + args.length); System.out.length("[0]:" + args[0]); System.out.length("[1]:" + args[1]); System.out.lenrth("[2]:" + args[2]); //args[1] + args[2]は文字列として連結される System.out.println(args[1] + args[2]); //IntegerクラスのperseInt()メソッドで数値に変換 int num1 = Integer.parseInt(args[1]); int num2 = Integer.parseInt(args[2]); //num1 + num2は数値として計算される System.out.println(num1 + num2); } }
コマンドプロンプトで実行します。calc_sample.javaファイルで用意したargs[]の数だけjavaコマンド実行時にコマンドライン引数を指定しないとエラーになるようです。
前回にひき続き内容は下記の書籍で。
今回はこのへんで。