配列の添字は 0からはじまる正整数で int によって参照されるので、最大 2147483647 です。
配列の要素数は宣言時ではなく、new による生成時に決定されます。 従って配列オブジェクトの長さは、生成時に固定され変更できません。 配列の添字による参照は、すべて実行時にチェックされます。 添字が配列の要素外を参照しようとすると、 ArrayIndexOutOfBoundsException 例外が起こり、プログラムの実行を止めます。
配列には、以下のオブジェクトらしい点がありますが、 クラスではないのでオブジェクトではありません。
配列は、[] をつければ宣言できます。 サイズを指定しないことに注意してください。
[] のペアは、要素の型の次にあってもよいし、変数名の次にあってもよいです。
もし括弧が型の次にあればそれは型の一部であり、 その宣言にあるすべての変数に適応されます。
次の2行は同じです。
String [] a,b,c[]; String a[],b[],c[][];
配列の要素数は、宣言時ではなく new による生成時に決定されます。 サイズが決定すると、以降は配列名.length で配列サイズがえられます。
配列を初期化するには、中括弧でまとめて値を宣言時に代入します。
それぞれの次元を別々にインスタンシエイトするには、 最高位の次元を最初にインスタンシエイトしなければなりません。
ただし java では、これを配列の配列とよびます。
java.lang.System.arraycopy() メソッドを使うと、 配列の一部または全部をコピーできます。
int beer[] = {11,12,13,14,15,16,17,18,19}; int cpyto[]; cpyto = new int[beer.length]; System.arraycopy(beer,0,cpyto,0,beer.length);
int a[]={0,1,2,3,4,5}; int [] b = {a.length,2,3,}; char c[][]= new char[12][31]; char [] d [] = {{1,1,1,1},{2,2,2,2}}; // creates d[2][4] char [][] e; short[] h,i[],j,k[][]; // all varibales are array // h[] // i[][] // j[] // k[][][] int aaa[][] = new int[5][]; // OK int bbb[][] = new int[5][3]; // OK int ccc[][] = new int[][3]; // NG
class Ary { public static void main(String[] a) { int eggs[]={1,2,3,4,}; int hams[]={10}; hams = eggs; hams[3] = 1; // OK,because hams now has 4 elements System.out.println("Length of hams =" + hams.length); String s = "Soft cream"; String s1= new String("Banana"); StringBuffer sb= new StringBuffer(); sb = sb.append("Rock ").append("Ice"); System.out.println("Length of String s =" + s.length()); System.out.println("Length of StringBuffer sb=" + sb.length()); } }
// array declarations, simple and exotic class test5a { public static void main (String [] ar) { int a [] = {'a'} ; System.out.println("a.length=" + a.length ); int b [] = new int[100]; int c [] = {b.length, b.length } ; char d[]; char [] e; byte [] [] []f1; byte [] []f2[]; byte [] f3 [] []; byte f4 [] [] []; System.out.println("int a = "+a[0]); } }
// show the "floating" array brackets // show how to return an array from a method. // show a runtime array bounds exception class test5b { public static void main (String [] ar) { int a [] = {'a'} ; int [] b = { a.length, 2, 3 } ; char c [][] = new char[12][31]; char[] d [] = { {1,1,1,1}, {2,2,2,2} }; // creates d[2][4] char[][] e = { {1,1,1,1}, {2,2,2,2} }; // creates e[2][4] byte f [][][] = new byte [3][3][7]; byte [][] g[] = new byte [3][3][7]; System.out.println("a.length=" + a.length ); b= ginger(); b[19] =0; System.out.println("b.length=" + b.length ); b[20] =0; // causes a runtime exception } static int garlic () [][] { return new int[5][2]; } static int [] ginger () { return new int[20]; } static int [] gruel () [] { return new int[20][3]; } }
例1から3を作って実行してみましょう。 |
まとめ |
配列の宣言 | タイプ [] 配列名 または タイプ 配列名 [] |
---|---|
配列の初期化 | タイプ [] 配列名 = { 初期値 } |
配列の生成 | タイプ [] 配列名 = new タイプ [ サイズ ] |
配列のサイズ | 配列名.length |
配列の例外 | ArrayIndexOutOfBoundsException |