1. /*
  2. * try-catch-finally中finally的使用
  3. *
  4. * 1.finally是可选的
  5. * 2.finally中声明的一定会被执行的代码。即使catch中又出现异常了,try中有return语句,catch中有
  6. * return语句的情况。
  7. *
  8. * 3.像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的
  9. * 释放。此时的资源释放,就需要声明在finally中。
  10. *
  11. */

 
 
 
  1. /*
  2. * 异常处理的方式二:throws + 异常类型
  3. *
  4. * 1."throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。
  5. * 一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常异常类的对象,此对象满足throws后异常
  6. * 类型时,就会被抛出。异常代码后续的代码,就不再执行!
  7. *
  8. * 2.体会:try-catch-finally:真正的将异常给处理掉了。
  9. * throws的方式只是将异常抛给了方法的调用者。并没有真正将异常处理掉。
  10. *
  11. * 3.开发中如何选择使用try-catch-finally还是使用throws?
  12. * 3.1如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也甭能使用throws,意味着如果
  13. * 子类重写的方法中有异常,必须使用try-catch-finally方式处理。
  14. * 3.2执行的方法中,先后调用了另外的几个方法,这几个方法时递进关系执行的。我们建议这几个方法使用throws
  15. * 的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方法进行处理。
  16. *
  17. */

 
 
 
  1. /*
  2. * 一、异常的处理:抓抛模型
  3. *
  4. * 过程一:抛:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。
  5. * 并将此对象抛出。
  6. * 一旦抛出对象后,其后的代码就不再执行。
  7. *
  8. *
  9. * 过程二:抓:可以理解为异常的处理方式:① try-catch-finally ② throws
  10. *
  11. *
  12. * 二、try-catch-finally的使用
  13. * 说明:
  14. * 1.finally是可选的。
  15. * 2.使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象
  16. * 的类型,去catch中进行匹配。
  17. * 3.一旦try中的异常对象匹配到某一个catch时,就进入catch中进行有异常的处理。一旦处理完成,就跳出当前的
  18. * try-catch结构(在没有写finally的情况下)
  19. * 4.catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。
  20. * catch中的异常类型如果满足子父类关系,则要求子类一定要声明在父类的上面。否则,报错
  21. * 5.常用的异常对象处理的方式:① String getMessage() ② printStackTrace
  22. * 6.在try结构中声明的变量,在出了try结构以
 

  1. * 一、异常体系结构
  2. *
  3. * java.lang.Throwable
  4. * |------java.lang.Errow:一般不编写针对性的代码进行处理。
  5. * |------java.lang.Exception:可以进行异常的处理
  6. * |------编译时异常(checked)
  7. * |------IOException
  8. * |------FileNotFoundException
  9. * |------ClassNotFoundException
  10. * |------运行时异常(unchecked,RuntimeException)
  11. * |------NullPointerException
  12. * |------ArrayIndexOutOfBoundsException
  13. * |------ClassCastException
  14. * |------NumberFormatException
  15. * |------InputMissmatchException
  16. * |------ArithmaticException
  17. *
  18. *
  19. * 面试题:常见的异常都有哪些?举例说明
 
 
 
  1. /*
  2. * 接口的使用
  3. * 1.接口使用interface来定义
  4. * 2.Java中,接口和类是并列的两个结构
  5. * 3.如何定义接口:定义接口中的成员
  6. *
  7. * 3.1 JDK7及以前:只能定义全局常量和抽象方法
  8. * >全局常量:public static final的.但是书写时,可以省略不写
  9. * >抽象方法:public abstract的
  10. * 3.2 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
  11. *
  12. * 4.接口中不能定义构造器的!意味着接口不可以实例化
  13. *
  14. * 5.Java开发中,接口都通过让类去实现(implements)的方式来使用
  15. * 如果实现类覆盖了接口中的所有抽象方法,则此实现类可以实例化
  16. * 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
  17. *
  18. * 6.Java类可以实现多个接口 --->弥补了Java单继承的局限性
  19. * 格式:class AA extends BB implements CC,DD,EE
  20. *
  21. * 7.接口与接口之间可以继承,而且可以多继承
  22. *
  23. * 8.接口的具体实现,体现多态性
  24. *
  25. * 9.接口,实际上可以看作是一种规范
  26. *
  27. * 面试题:抽象类与接口有哪些异同?
 
 
 
  1. /*
  2. * 接口的使用
  3. * 1.接口使用上也满足多态性
  4. * 2.接口,实际上就是定义了一种规范
  5. * 3.开发中,体会面向接口编程!
  6. *
  7. */
 
 
 /*
  1. * 抽象类的匿名子类
  2. *
  3. *
  4. *
  5. */
  6. method(new Student());// 匿名对象
  7. Worker worker = new Worker();
  8. method1(worker);// 非匿名的类非匿名的对象
  9. method1(new Worker());// 非匿名的类匿名的对象
 
 
 
  1. /*
  2. * abstract关键字的使用
  3. * 1.abstract:抽象的
  4. * 2.abstract可以用来修饰的结构:类、方法
  5. *
  6. * 3.abstract修饰类:抽象类
  7. * > 此类不能实例化
  8. * > 抽象类中一定有构造器:便于子类实例化时调用(涉及:子类对象实例化的全过程)
  9. * > 开发中,都会提供抽象类的子类,让子类对象实例化
  10. *
  11. * 4.abstract修饰方法:抽象方法
  12. * > 抽象方法只有方法的声明,没有方法体
  13. * > 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。
  14. * > 若子类重写了父类中的所有抽象方法后,此子类方可实例化
  15. * 若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰
  16. */


/*
* abstract使用上的注意:
* 1.abstract不能用来修饰:属性、构造器等结构
*
* 2.abstract不能用来修饰私有方法、静态方法、final的方法、final的类
*
*
*/

 
 
 
 
  1. /*
  2. * static关键字的使用
  3. * 1. static:静态的
  4. * 2. static可以用来修饰:属性、方法、代码块、内部类
  5. *
  6. * 3. 使用static修饰属性:静态变量(或类变量)
  7. * 3.1 属性,按是否使用static修饰,又分为:静态属性 vs 非静态属性(实例变量)
  8. * 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的
  9. * 非静态属性时,不会导致其他对象中同样的属性值的修改。
  10. * 静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致
  11. * 其他对象调用此静态变量时,是修改过了的。
  12. * 3.2 static修饰属性的其他说明:
  13. * ①静态变量随类的加载而加载。可以通过"类.静态变量的方式进行调用
  14. * ②静态变量的加载要早于对象的创建。
  15. * ③由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
  16. *
  17. * ④ 类变量 实例变量
  18. * 类 yes no
  19. * 对象 yes yes
  20. *
  21. * 3.3 静态属性举例:System.out;Math.PI
  22. * 4. 使用static修饰方法:静态方法
  23. * ① 随着类的加载而加载,可以通过"类.静态变量"的方法进行调用
  24. * ② 静态方法 非静态方法
  25. * 类 yes no
  26. * 对象 yes yes
  27. * ③ 静态方法中,只能调用静态的方法或属性
  28. * 非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
  29. *
  30. * 5. static注意点:
  31. * 5.1 在静态方法内,不能使用this关键字、super关键字
 
 
 
  1. /*
  2. * 单例设计模式:
  3. * 1. 所谓的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
  4. *
  5. * 2. 如何实现?
  6. * 饿汉式 vs 懒汉式
  7. *
  8. * 3. 区分饿汉式和懒汉式
  9. * 饿汉式:
  10. * 坏处:对象加载时间过长。
  11. * 好处:饿汉式时线程安全的。
  12. *
  13. * 懒汉式:好处:延迟对象的创建。
  14. * 目前的写法坏处:线程不安全。 --->到多线程内容时,再修改o
  15. *
  16. */
 
    Page 1 of 2