命令行传参
-
命令行参数给main方法实现
-
public class HelloWorld { /** * @param args */ public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "=" + args[i]); } } }
可变参数
-
这个方法在接收参数的时候,个数是不定的。
-
在方法声明中,在指定参数类型后面加...
-
public class TestVarArgus { public static void dealArray(int... intArray) { for (int i : intArray) System.out.print(i + " "); System.out.println(); } public static void main(String args[]) { dealArray(); dealArray(1); dealArray(1, 2, 3); } }
-
可变参数既可以是没有参数(空参数),也可以是不定长的。
-
一个方法只能有一个可变参数,只能放在最后
-
可变参数与数组是冲突的,编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。
public class TestVarArgus {
public static void dealArray(int... intArray) {
for (int i : intArray)
System.out.print(i + " ");System.out.println();
}
public static void dealArray(int[] intArray) {
// 会有Duplicate method dealArray(int[]) in type TestVarArgus的错误
for (int i : intArray)
System.out.print(i + " ");System.out.println();
}
public static void main(String args[]) {
dealArray();
dealArray(1);
dealArray(1, 2, 3);
} -
可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数。
public class TestVarArgus {
public static void dealArray(int... intArray) {
for (int i : intArray)
System.out.print(i + " ");
System.out.println();
}
public static void main(String args[]) {
int[] intArray = { 1, 2, 3 };
dealArray(intArray);// 通过编译,正常运行
}
public class TestVarArgus {
public static void dealArray(int[] intArray) {
for (int i : intArray)
System.out.print(i + " ");
System.out.println();
}
public static void main(String args[]) {
dealArray(1, 2, 3);// 编译错误
}
}
- 能匹配定长的方法,那么优先匹配该方法。含有不定参数的那个重载方法是最后被选中的
Java内存分析
-
堆
- 存放new的对象和数组
- 可以被所有线程共享,不会存放别的对象引用
-
栈
- 存放基本变量类型(包含具体数值)
- 引用对象的变量(存放这个引用在堆里面的具体地址)
-
方法区
- 可以被所有的线程共享
- 包含了所有的class和staic变量
数组
-
数组是相同类型数据的有序
-
4个基本特点
- 长度确定
- 元素类型相同
- 元素可以是任何数据类型(基本类型和引用类型)
- 数组变量是引用类型,数组可以看成对象,数组的每个元素相当于对象的成员变量。数组本身就是对象,Java中
-
数组的声明与创建
-
dataType[] a; //首选的方法 dataType a[]; //数据的创建 dataType[] a=new dataType[size];
-
-
元素通过索引访问,从0开始
-
获取数据的长度
a.length
-
初始化方法
-
静态初始化(创建+赋值)
-
int[] a={1,2,3}
-
-
动态初始化
-
int[] b=new[10]b[0]=1
-
-
默认初始化
- 数组一旦分配空间,会分配默认值
-
-
数组越界会产生nArrayIndexOutBoundsException
-
Array类
-
数组的工具类Java.util.Arrays
-
包含操作数组的各种方法(搜索和排序)
-
有一个静态工厂,可以将数组视为列表
-
如果指定的数组为空,会抛出异常
-
int[] a={1,2,3,4,5};System.out.println(a); //打印对象的哈希codeSystem.out.println(Arrays.toString(a));
-
常用的方法
- 给数组赋值:fill
- 排序:sort
- 比较数组:equals
- 查找数组元素:binarySearch可以进行二分法查找
-
-
稀疏数组
-
当数组中大部分元素为0或者为同一值时,可以使用稀疏数组来保存
-
稀疏数组的处理方式
- 记录数组有几行几列,有多少个不同的值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模。
- 例子
- 左边是原始数组,右边是稀疏数组,6,7,8其中8为8个有效数字
-