1 数组申明: double [] myList;
声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置
2 创建数组: myList = new double [3];
这条语句做了两件事情:1 ) 使用new elementType[arraySize]创建了一个数组;2 )把这个新创建的数组的引用陚值给变暈arrayRefVar(myList)。
3 结合:(1和2等价)
(1) .double [] myList = new double [3]; //只声明、创建,后续再赋值
myList[0] =1.0;
myList[1] =2.0;
myList[2] =5.5;
(2) .double [] myList = { 1.0 , 2.0 , 5.5 }; // 声明、创建、初始化一条语句完成了。
一个数组变量看起来似乎是存储了一个数组,但实际上它存储的是指向数组的引用。:myList 是一个含有3个double 型元素数组的引用变量
4.foreach
不使用下标变量就可以顺序地遍历整个数组
for (double e: myList)
System.out.println(e); //打印了myList的所有元素
5.数组的复制
不能和普通数据一样使用:list2 =list1; // 这只是将list1的引用复制给了list2,他俩指向了同一个数组。list2的原数据变成了垃圾
arraycopy(sourceArray, srcPos, targetArray, tarPos, length);
srcPos,tarPos:sourceArray 和targetArray 中的起始位置。复制的元素个数由参数length 指定(java.lang.System类)
System.arraycopy(souce,0,s1,0,2);
6.给方法传递数组/从方法中返回数组/可变长数组
类比C语言中指针学习,给函数传递数组的指针,在函数内改变数组的内容,函数外的数组内容也将改变。
和给方法传递基本数据类型不同。
可变长数组:只能给方法中指定一个可变长参数,同时该参数必须是最后一个参数
package basic_practice_002;
public class None_array {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] list1 = {1,3,6,7,9,25,98,63,7,0,5,11,77,62,34,0,5,77,6,5};
int [] list2 = new int [8];
System.arraycopy(list1,7,list2,0,8);
System.out.print("old list2 array: ");
for(int e:list2)
System.out.print(e + " ");
System.out.println();
change_1_2(list2);
System.out.print("After change_1_2: ");
for(int e:list2)
System.out.print(e + " ");System.out.println();
list2 = reversal(list2);
System.out.print("reversal list2: ");
for(int e:list2)
System.out.print(e + " ");
}
public static void change_1_2(int []m) { //传递数组给方法
int temp =m[1];
m[1] = m[0];
m[0] = temp;
}
public static int[] reversal(int []m) { //从方法中返回数组
int []y=new int[m.length];
for(int i=0;i<m.length;i++)
y[i]=m[m.length-1-i];
return y;
}
public static void printArray(int...m) { //可变长数组
if(m.length==0) return;
for(int i=0;i<m.length;i++)
System.out.print(m[i]);
}
}
计算随机生成的100位小写字母中,a~~~z的个数分别为多少
package basic_practice_002;
public class CountLetter {
public static void main(String[] args) {
// TODO Auto-generated method stub
final int LetterNumbers = 100;
char []letter = new char[LetterNumbers];
int []countLetter = new int[26];
for(int i=0;i<LetterNumbers;i++){
letter[i]=getRandomLowerCharacter();
int index=letter[i]-'a';
countLetter[index] += 1;
}
for (int i=0;i<LetterNumbers;i++) {
System.out.print(letter[i] + " ");
if((i+1)%25==0) System.out.println();
}
System.out.println();
for (int i=0;i<26;i++) {
System.out.print( (char)('a'+i) + " "+ countLetter[i] + " ");
if((i+1)%10==0) System.out.println();
}
}
public static char getRandomCharacter(char chl, char ch2){
return(char)(chl + Math.random()*(ch2 - chl + 1));}
public static char getRandomLowerCharacter(){
return getRandomCharacter('a','z');
}
}
命令行调用main函数的例子(简易计算器):
public class testMain { // 调用Main,传递参数args
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length!=3) {
System.out.println("Usage: java Calculator operandl operator operand2");
System.exit(0);
}
int result=0;
switch(args[1].charAt(0)) {
case '+' : result=Integer.parseInt(args[0])+Integer.parseInt(args[2]);break;
case '-' : result=Integer.parseInt(args[0])-Integer.parseInt(args[2]);break;
case '.' : result=Integer.parseInt(args[0])*Integer.parseInt(args[2]);break;
case '/' : result=Integer.parseInt(args[0])/Integer.parseInt(args[2]);break;
}
System.out.println(": " +Integer.parseInt(args[0])+ args[1].charAt(0) +Integer.parseInt(args[2]) +
"result is " + result);
}
}
结果如下: