1、方法的重载
在一个类中有相同的函数名称,但是形参不同
(1)参数类型
(2)参数个数
(3)参数位置
(4)方法名必须相同
(5)参数列表必须不同
2、可变参数
在方法声明中,在指定参数类型后加一个省略号(…)
注意:一个方法中只能指定一个可变参数,他必须是方法的最后一个参数,任何参数需要在他之前声明
3、递归
递归结构包含两个部分:
(1)递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
(2)递归体:什么时候需要调用自身方法。
(3)能不能尽量不用,存到栈中,占用大量内存
4、数组
(1)相同类型的有序数据
例:
int[] nums = new int[10];
(2)数组如何获取长度
int length = nums.length;
(3)内存分析
堆:用于存放new出来的对象和数组
栈:存放基本变量类型(包含基本变量的值)
引用对象及引用对象的地址值
(4)定义数组的三种形式
//静态初始化
int[] num = {1,2,3,4,5};
//动态初始化,在堆中开辟空间
int[] nums = new int[2];
nums[0] = 1;
nums[1] = 2;
//默认初始化,初始值为0
(5)数组的四个特点
a.数组的长度是确定。一旦被创建是不能被改变的
b.元素必须是相同类型,不允许是混合类型
c.数组的元素可以是任何类型,包括引用数据类型
d.数组变量属于引用类型,可以堪称是对象,存在于堆内存中
(6)Arrays数组工具类
a. 打印数组
int[] nums = {1,2,3,4};
System.out.println(Arrays.toString(nums));
b. 数组排序—升序
int[] nums = {1,2,3,4};
System.out.println(Arrays.sort(a));
(7)冒泡排序
class test{
public static void main(String[] args){
int[] nums = {};
}
//定义冒泡排序方法
public static int[] sort(int[] nums){
//首先定义一个临时tmp用于存储数组
int[] temp;
//遍历传过来的数组
for(int i = 0 ; i < nums.length -1 ; i++){
boolean flag = flase;
for(int j = 0; j < nums.length -1 -i ; j++){
if(nums[j+1] < nums[j]){
temp = nums[j+1];
nums[j] = nums[j+1];
nums[j+1] = temp;
flag = true;
}
}
if(flag == false){
break;
}
}
return nums;
}
}
5、面向对象
(1)方法的定义
- 修饰符
- 返回值类型
- 方法名
- 参数列表
- 异常抛出
(2)方法的调用
- 静态方法
- 非静态方法
- 形参和实参
- 值传递和引用传递
- this关键字
(3)break和return的区别
return代表一个方法的结束,可以返回空也可以返回各种数据类型
而break需要和switch一起用代表结束循环
(4)不同类想要调用方法,需要先实例化类在进行调用
(5)static:当一个类中有一个静态方法和一个非静态方法,静态方法调用非静态化方法会提示报错,因为静态方法是和类一起进行加载的,而非静态方法是类实例化后才存在的,所以静态方法想要调用非静态方法有两种,第一种:需要把非静态方法修改成静态方法 ;第二种:需要实例化类在调用非静态方法。
(6)对象是具体的事物。类是抽象的是对象的模板
态方法和一个非静态方法,静态方法调用非静态化方法会提示报错,因为静态方法是和类一起进行加载的,而非静态方法是类实例化后才存在的,所以静态方法想要调用非静态方法有两种,第一种:需要把非静态方法修改成静态方法 ;第二种:需要实例化类在调用非静态方法。
(6)对象是具体的事物。类是抽象的是对象的模板