Java方法(重载→递归)+数组
Java方法
重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数
规则
方法的名称必须相同
参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
方法的返回类型可相同可不同
仅返回类型不同不能成为方法的重载
public static double max(double num1,double num2){
...
}
public static int max(int num1,int num2){
...
}
方法名称相同时,编译器会根据调用方法的参数个数、参数类型去逐个匹配选择对应的方法。如果匹配失败,则编译器报错
命令行传参
希望运行一个程序时再给他传递消息,依靠命令行参数给main()函数实现
public class Demo{
public static void main(String[] args){
for(int i = 0;i < args.length;i++){
System.out.println("args[" + i + "]:" +args[i]);
}
}
}
然后在cmd里javac,java
可变参数
jdk1.5开始,Java支持传递同类型的可变参数给一个办法
在方法声明中,在指定参数类型后加省略号(...)
一个方法只能指定一个可变参数,必须是方法的最后一个参数,任何普通参数都必须在它之前声明
public static void printMax(double x,double... numbers){
...
}
递归
递归:方法a调用方法a,自身调用自身
递归只需少量程序便可描述解决过程中的多次重复计算,大大减少代码量。用有限的语言来定义对象的无限集合
结构包括递归头(什么时候不调用自身,没有头则进入死循环)和递归体(什么时候调用)
//阶乘计算
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n);
}
}
小计算可用递归,大计算尽量避免
数组
概述
数组是相同类型数据的有序集合,描述的是相同类型的若干个数据按先后次序排列组合
每一个数据称作一个数组元素,每个元素可以通过下标访问
基本特点
长度是确定的。数组一旦被创建,其大小不可被改变
元素必须为相同类型,不允许出现混合类型
元素可以是任何数据元素(包括基本类型和引用类型)
数组变量属于引用类型,数组本身就是对象,每个元素相当于对象的成员变量。数组对象本身是在堆中的
数组声明创建
声明
dataType[] arrayRefVar; //首选方法
int[] nums1;
dataType arrayRefVar[]; //效果相同,但不是首选
int nums2[];
创建(使用new)
dataType[] arrayRefVar = new dataType[arraySize];
int[] nums = new int[10];
数组元素通过索引进行访问,数组索引从0开始。没赋值的默认是0
获取数组长度
arrays.length
内存分析
堆:
可存放new的对象和数组
可被所有线程共享,不会存放别的对象引用
栈:
存放基本变量类型(会包括基本类型的具体数据)
引用对象的变量(会存放这个引用在堆里面的具体地址)
方法区:
可被所有线程共享
包含了所有class和static变量
三种初始化
静态初始化:创建+赋值
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
动态初始化:包括默认初始化
int[] a = new int[10];
a[1] = 1;
默认初始化:
数组是引用类型,其元素相当于类的实例变量
所以一经分配空间,每个元素按实例变量被隐式初始化
数组边界
下标合法区间:[0,length-1]
ArrayIndexOutOfBoundsException:数组下标越界异常
数组使用
for-each循环
int[] arrays = {1,2,3,4,5};
//普通for循环
for(int i = 0;i < arrays.length;i++){
...
}
//for-each
for(int array : arrays){
System.out.println(array);
}
数组作方法入参
public class Demo{
public static void main(String[] args){
int[] arrays = {1,2,3,4,5};
printArray(arrays);
}
public static printArray(int[] arrays){
...
}
}
数组作返回值
public class Demo{
public static void main(String[] args){
int[] arrays = {1,2,3,4,5};
int[] reverse = reverse(arrays);
}
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
for(int i = 0;j = result.length-1;i < arrays.length;i++,j--){
result[j] = arrays[i];
}
}
}
多维数组
可视作数组的数组,二维数组是特殊的一维数组
int[][] array = {{1,2},{2,3},{3,4}};
Arrays类
数组的工具类java.util.Arrays(可用JDK帮助文档查看
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而”不用“使用对象来调用(注意:是“不用”而不是“不能”)
常用:
数组赋值:fill
打印数组元素:toString(a)
数组排序(升序):sort(a)
比较数组元素:equals
查找数组元素(对排序好的数组进行二分法查找):binarySearch
冒泡排序
八大排序之一
两层循环,外层冒泡轮数,里层依次比较
稀疏数组
当一个数组大部分元素是0,或者为同一值的数组时,可以用稀疏数组保存
处理方法
-
记录数组一共行列,有多少不同值
-
把具有不同值的元素及其行列记录在小规模数组中从而减小数组规模

浙公网安备 33010602011771号