JAVA进阶17

---恢复内容开始---

间歇性混吃等死,持续性踌躇满志系列-------------第17天

1、递归结构

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是自己就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

递归结构包括两个部分

①定义递归头。解答:什么时候不调用自身方法。如果没有头,会陷入死循环,就是递归的条件

②递归体。解答:什么时候需要调用自身方法

 1 public class TestRecursion01 {
 2     public static void main(String[] args) {
 3         long d1 = System.currentTimeMillis();
 4         System.out.printf("%d阶乘的结果:%s%n", 15, factorial(15));
 5         long d2 = System.currentTimeMillis();
 6         System.out.printf("递归费时:%s%n", d2 - d1);
 7     }
 8 
 9     //求阶乘的方法
10     static long factorial(int n) {
11         if (n == 1) {//递归头
12             return 1;
13         } else {
14             //递归体
15             return n * factorial(n - 1); //n!=n*(n-1)
16         }
17     }
18 }
View Code

运行结果图

2、Java的垃圾回收机制

①发现无用对象

②回收无用对象占用的内存空间

相关算法:引用计数法、引用可达法

3、静态初始化块

 1 public class TestRecursion01 {
 2     int id;
 3     String name;
 4     String pwd;
 5     static String company;
 6 
 7     static {
 8         System.out.println("执行类的初始化工作");
 9         company = "后天科技";
10         printCompany();
11     }
12 
13     public static void printCompany() {
14         System.out.println(company);
15     }
16 
17     public static void main(String[] args) {
18     }
19 }
View Code

运行结果图

4、方法重写

 1 package cn.oob;
 2 
 3 public class TestOverride {
 4     public static void main(String[] args) {
 5         Hourse h = new Hourse();
 6         h.run();
 7     }
 8 }
 9 
10 class Vehicle{
11     public void run(){
12         System.out.println("跑》。。。");
13     }
14     public void stop(){
15         System.out.println("停。。。");
16     }
17 }
18 
19 class Hourse extends Vehicle{
20     public void run(){
21         //方法重写
22         System.out.println("慢慢跑。。。");
23     }
24 }
View Code

运行结果图

5、super父类对象的引用

 1 package cn.oob;
 2 
 3 public class TestOverride {
 4     public static void main(String[] args) {
 5         new ChildClass().f();
 6     }
 7 }
 8 
 9 class FatherClass {
10     public int value;
11 
12     public void f() {
13         value = 100;
14         System.out.println("FatherClass.value=" + value);
15     }
16 }
17 
18 class ChildClass extends FatherClass {
19     public int value;
20 
21     public void f() {
22         //调用父类对象的普通方法
23         super.f();
24         value = 200;
25         System.out.println("ChildClass.value=" + value);
26         System.out.println(value);
27         //调用父类对象的成员变量
28         System.out.println(super.value);
29     }
30 }
View Code

运行结果图

猜你喜欢

转载自www.cnblogs.com/Anemia-BOY/p/10650784.html