配列の添字は 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 |