一、方法
public static 返回值类型 方法名{
方法体;
}
1)修饰符:public static
2)形参返回值类型和实参返回值类型一致
3)方法名字:小驼峰
4)参数列表:如果方法没有参数就不写,需要指定参数类型,多个参数之间用逗号隔开。
5)方法必须写在类当中
6)方法不能嵌套定义:不能在一个方法的内部再定义另一个完整的方法
7)没有方法声明一说
二、方法调用怎样开辟栈帧的
当方法函数结束(大括号结束或者return结束) 为调用的方法创建的栈帧将会回收
三、方法重载
一个必须一样(方法名) 、一个必须不一样(参数)、 一个不做要求 (返回值)
四、递归
如果是void无返回值,则“归”以大括号结束来往回传递;
若是int这样有返回值,则“归”以return结束来往回传递 ;
递归过程就是先调用方法函数创建栈帧连续压栈,然后走到结束判断那一步再连续出栈。
斐波那契数列递归画成图是树形,有大量重复计算,效率不高。
具体题目已上传码云
五、数组
1. 基本数据类型数组
- 整数类型(
byte
、short
、int
、long
):默认值为0
。 - 浮点类型(
float
、double
):默认值为0.0
。 - 字符类型(
char
):默认值为'\u0000'
,即空字符。 - 布尔类型(
boolean
):默认值为false
。
2. 引用数据类型数组
引用数据类型数组的元素默认值为 null
,表示不引用任何对象。
重点,数组的创建和初始化必须一步呵成,不然会报错
六、数组字符串
1. 使用 Arrays.toString()
方法(适用于基本数据类型数组和对象数组)
import java.util.Arrays;public class ArrayToStringExample {public static void main(String[] args) {// 基本数据类型数组int[] intArray = {1, 2, 3, 4, 5};String intArrayString = Arrays.toString(intArray);System.out.println("基本数据类型数组转换结果: " + intArrayString);// 对象数组String[] stringArray = {"apple", "banana", "cherry"};String stringArrayString = Arrays.toString(stringArray);System.out.println("对象数组转换结果: " + stringArrayString);}
}
2. 多维数组使用 Arrays.deepToString()
方法
import java.util.Arrays;public class MultiDimensionalArrayToStringExample {public static void main(String[] args) {int[][] multiArray = {{1, 2}, {3, 4}, {5, 6}};String result = Arrays.deepToString(multiArray);System.out.println("多维数组转换结果: " + result);}
}
方法名称格式均采用小驼峰,即第一个单词首字母小写其他单词首字母大写。
七、数组拷贝
1. 手动遍历拷贝
public class ManualCopyExample {public static void main(String[] args) {int[] originalArray = {1, 2, 3, 4, 5};int[] copiedArray = new int[originalArray.length];for (int i = 0; i < originalArray.length; i++) {copiedArray[i] = originalArray[i];}// 验证拷贝结果for (int num : copiedArray) {System.out.print(num + " ");}}
}
2. 使用 System.arraycopy()
方法
System.arraycopy()
是 Java 提供的一个高效的数组拷贝方法,它是一个本地方法native(查看源码时看不到具体的实现),底层由 C 或 C++ 实现。
public class SystemArrayCopyExample {public static void main(String[] args) {int[] originalArray = {1, 2, 3, 4, 5};int[] copiedArray = new int[originalArray.length];// 参数解释:原数组, 原数组起始位置, 目标数组, 目标数组起始位置, 要复制的元素个数System.arraycopy(originalArray, 0, copiedArray, 0, originalArray.length);// 验证拷贝结果for (int num : copiedArray) {System.out.print(num + " ");}}
}
3. 使用 Arrays.copyOf()
方法
Arrays.copyOf()
是 java.util.Arrays
类提供的一个静态方法,它可以创建一个新数组,并将原数组的元素复制到新数组中。
import java.util.Arrays;public class ArraysCopyOfExample {public static void main(String[] args) {int[] originalArray = {1, 2, 3, 4, 5};int[] copiedArray = Arrays.copyOf(originalArray, originalArray.length);// 验证拷贝结果for (int num : copiedArray) {System.out.print(num + " ");}}
}
Arrays.copyOf()
方法接受两个参数,原数组和新数组的长度。如果新数组长度大于原数组长度,会用默认值填充剩余部分;如果小于原数组长度,则只复制前一部分元素。
4. 使用 clone()
方法
数组对象可以调用 clone()
方法来创建一个新的数组,该数组包含与原数组相同的元素。
public class CloneExample {public static void main(String[] args) {int[] originalArray = {1, 2, 3, 4, 5};int[] copiedArray = originalArray.clone();// 验证拷贝结果for (int num : copiedArray) {System.out.print(num + " ");}}
}
clone()
方法会创建一个新的数组对象,新数组的元素与原数组相同。对于基本数据类型数组,这是一种浅拷贝;对于对象数组,同样是浅拷贝,即只复制对象的引用,而不是对象本身。
浅拷贝和深拷贝的区别
- 浅拷贝:只复制对象的引用,而不复制对象本身。对于基本数据类型数组,浅拷贝会复制元素的值;对于对象数组,浅拷贝只会复制对象的引用,多个引用指向同一个对象。
- 深拷贝:会创建一个新的对象,而不是复制引用。对于对象数组的深拷贝,需要手动复制每个对象,而不是仅仅复制引用。
例如,对于对象数组的深拷贝,需要在拷贝过程中为每个对象创建新的实例:
import java.util.Arrays;class Person {String name;public Person(String name) {this.name = name;}@Overridepublic String toString() {return name;}
}public class DeepCopyExample {public static void main(String[] args) {Person[] originalArray = {new Person("Alice"), new Person("Bob")};Person[] copiedArray = new Person[originalArray.length];for (int i = 0; i < originalArray.length; i++) {copiedArray[i] = new Person(originalArray[i].name);}// 修改原数组中的元素originalArray[0].name = "Charlie";// 验证深拷贝结果System.out.println(Arrays.toString(copiedArray));}
}
在这个示例中,通过手动为每个 Person
对象创建新的实例,实现了对象数组的深拷贝。修改原数组中的元素不会影响到拷贝数组中的元素。
八、二维数组