1.克隆对象
编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同
public class MethodExercise02 {
public static void main(String[] args) {
Person p = new Person();
p.name = "logic";
p.age = 18;
Mytools tools = new Mytools();
Person p2 = tools.copyPerson(p);
System.out.println("p.name = " + p.name);
System.out.println("p2.name = " + p2.name);
//可以通过对象比较看看是不是同一个对象
System.out.println(p == p2);
}
}
class Person {
String name;
int age;
}
class Mytools {
public Person copyPerson(Person p) {
Person p2 = new Person();
p2.name = p.name;
p2.age = p.age;
return p2;
}
}
2.方法递归调用
递归能解决什么问题
- 各种数学问题:8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题
- 各种算法中也要用到递归,如 快排 归并排序 二分查找 分治算法
- 用栈解决的问题 递归代码比较简洁
递归举例
public class Recursion01 {
public static void main(String[] args) {
T myT = new T();
myT.test(4);
}
}
class T {
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n = " + n);
}
}
阶乘举例
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
递归的重要规则
- 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
- 方法的局部变量是独立的,不会相互影响,比如n变量
- 如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据
- 递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟
- 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕