[关闭]
@zhangyy 2017-09-08T10:47:48.000000Z 字数 6596 阅读 151

Java 的异常与包

Java基础系列



一: 知识回顾:

  1. 面向接口编程:
  2. Object
  3. -------
  4. 降低耦合度。
  5. 接口是最低标准。
  6. 多重继承。
  7. 方法可以覆盖
  8. 属性无法覆盖

二: java的异常:

2.1 异常:

  1. 异常的体系:
  2. - Throwable
  3. - Error
  4. - 通常出现重大问题如: 运行的类不存在或者内存溢出等。
  5. - 不编写针对代码对其处理
  6. - Exception
  7. - 在运行时运行出现的一起情况,可以通过try catch finally
  8. - Exception Error 的子类名都是以父类名作为后缀。
  9. Throwable 中的方法:
  10. - getMessage()
  11. - 获取异常信息,返回字符串
  12. - toString()
  13. - 获取异常类名和异常信息,返回字符串
  14. - printStackTrace()
  15. - 获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void
  16. - printStackTrace(PrintStream s)
  17. - 通常用该方法将异常内容保存在日志文件中,以便于查阅。
  18. 异常:
  19. -----
  20. Exception.
  21. java.lang.NullPointerException
  22. .... ArryIndexOutOfBoundsException.
  23. ClassCastException,
  24. runtimeExcetpion // 运行时异常不需要在方法的定义中进行声明
  25. java.lang.Object
  26. --- java.lang.Throwable
  27. ---java.lang.Error // 硬伤
  28. --- java.lang.Exception // 异常
  29. Exception
  30. ------
  31. 通过 try-catch-finally 语句解决
  32. try{
  33. 需要检测的代码;
  34. }
  35. catch(异常类 变量){
  36. 异常处理代码;
  37. }
  38. finally{
  39. 一定会执行的代码;
  40. }
  41. finally 代码块只有一种情况不会被执行,就是在执行了System.exit(0)
  42. 可以有多个catch语句,catch 的顺序需要注意。
  43. 子类异常需要先行catch,否则不可达,编译也无法通过。
  44. 方法重写时,不能什么抛出新的异常类型。只能是原有异常类型体系(异常子类)。
  45. Throwable
  46. ----------------------
  47. 可以抛出的
  48. 是所有异常和错误的超类
  49. throw // 抛出异常对象的指令
  50. throws // 在方法中声明抛出异常的关键字
  51. throws throw
  52. ---------------------
  53. - throws 用于标识函数暴露出的异常。
  54. - throw 用于抛出异常对象。
  55. - throws throw 的区别
  56. - throws 用在函数上,后面跟异常类名
  57. - throw 用在函数内,后面跟异常对象。
  1. package com.learnjava.day07;
  2. public class ExceptionDemo01 {
  3. public static void main(String[] args) {
  4. Exception e = new Exception();
  5. Exception e2 = new Exception("出错了");
  6. // System.out.println(arr.length);
  7. // 打印异常信息
  8. // System.out.println(e2.getMessage());
  9. // System.out.println(e2.getStackTrace());
  10. // 打印栈跟踪信息
  11. // e2.printStackTrace();
  12. // System.out.println(1/0);
  13. test();
  14. }
  15. public static void test() {
  16. try {
  17. throw new Exception("出错了");
  18. } catch (Exception e) {
  19. System.out.println(e.getMessage());
  20. }
  21. finally {
  22. System.out.println("搞定了");
  23. }
  24. }
  25. }

image_1bpdfm3j016mfpoe1388b1otmt9.png-45.2kB

  1. package com.learnjava.day07;
  2. public class ExceptionDemo02 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. int [] arr = null; // {1,2,3,4,5};
  6. outArr(arr);
  7. }
  8. public static void outArr(int [] arr) {
  9. try {
  10. for (int i = 0 ; i < arr.length ; i++) {
  11. System.out.println(arr[i]+ " ");
  12. }
  13. } catch (Exception e) {
  14. System.out.println("数组有问题。。。。");
  15. }
  16. }
  17. }

image_1bpdg6djs16n61fv8llr16p59hfm.png-38.8kB

  1. package com.learnjava.day07;
  2. public class ExceptionDemo03 {
  3. public static void main(String[] args) throws AgeTooSmailExpection, AgeTooBigExpection {
  4. // TODO Auto-generated method stub
  5. Person p = new Person();
  6. p.setAge(100);
  7. System.out.println(p.getAge());
  8. }
  9. }
  10. class Person{
  11. private int age ;
  12. public int getAge() {
  13. return age;
  14. }
  15. public void setAge(int age) throws AgeTooSmailExpection, AgeTooBigExpection {
  16. if(age < 0) {
  17. throw new AgeTooSmailExpection("年龄太小,不合法");
  18. }
  19. if(age > 200) {
  20. throw new AgeTooBigExpection("年龄太大,不合法");
  21. }
  22. this.age = age;
  23. }
  24. }
  25. @SuppressWarnings("serial")
  26. class AgeTooSmailExpection extends Exception{
  27. public AgeTooSmailExpection() {
  28. }
  29. public AgeTooSmailExpection(String msg) {
  30. super(msg);
  31. }
  32. }
  33. @SuppressWarnings("serial")
  34. class AgeTooBigExpection extends Exception {
  35. public AgeTooBigExpection() {
  36. }
  37. public AgeTooBigExpection(String msg) {
  38. super(msg);
  39. }
  40. }

image_1bpdirp7r86m1a7t6hctb6n8713.png-38.6kB

  1. package com.learnjava.day07;
  2. public class ExceptionDemo03 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Person p = new Person();
  6. try {
  7. p.setAge(-100);
  8. } catch (Exception e) {
  9. // TODO Auto-generated catch block
  10. System.out.println(e.getMessage());
  11. }
  12. System.out.println(p.getAge());
  13. }
  14. }
  15. class Person{
  16. private int age ;
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) throws AgeTooSmailExpection, AgeTooBigExpection {
  21. if(age < 0) {
  22. throw new AgeTooSmailExpection("年龄太小,不合法");
  23. }
  24. if(age > 200) {
  25. throw new AgeTooBigExpection("年龄太大,不合法");
  26. }
  27. this.age = age;
  28. }
  29. }
  30. @SuppressWarnings("serial")
  31. class AgeTooSmailExpection extends Exception{
  32. public AgeTooSmailExpection() {
  33. }
  34. public AgeTooSmailExpection(String msg) {
  35. super(msg);
  36. }
  37. }
  38. @SuppressWarnings("serial")
  39. class AgeTooBigExpection extends Exception {
  40. public AgeTooBigExpection() {
  41. }
  42. public AgeTooBigExpection(String msg) {
  43. super(msg);
  44. }
  45. }

image_1bpdj3uosjff6oe12bl5dn113i1g.png-62.7kB

2.2 异常的处理细节 

  1. 1. RuntimeException 以及其子类如果在函数中被throw 抛出,可以不用在函数上声明。
  2. 2.一个方法被覆盖时,覆盖他的方法必须抛出相同的异常或异常的子类
  3. 3.如果父类抛出多个异常,那么重写(覆盖)方法必须抛出那些异常的一个子集,不能抛出新的异常。
  4. 4.介绍异常在分层设计时的层内封装。
  5. 5.例程。
  1. package com.learnjava.day07;
  2. public class ExceptionDemo03 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Person p = new Person();
  6. try {
  7. p.setAge(-100);
  8. } catch (Exception e) {
  9. // TODO Auto-generated catch block
  10. System.out.println(e.getMessage());
  11. }
  12. System.out.println(p.getAge());
  13. }
  14. }
  15. class Person{
  16. private int age ;
  17. public int getAge() {
  18. return age;
  19. }
  20. class student extends Person {
  21. public void setAge(int age) throws AgeTooSmailExpection, AgeTooBigExpection {
  22. if (age < 6 || age > 15) {
  23. throw new InvalidAgeException("年龄超出小学的年龄。。。");
  24. }
  25. super.setAge(age);
  26. System.out.println("设置年龄over。。。。");
  27. }
  28. }
  29. public void setAge(int age) throws AgeTooSmailExpection, AgeTooBigExpection {
  30. if(age < 0) {
  31. throw new AgeTooSmailExpection("年龄太小,不合法");
  32. }
  33. if(age > 200) {
  34. throw new AgeTooBigExpection("年龄太大,不合法");
  35. }
  36. this.age = age;
  37. }
  38. }
  39. @SuppressWarnings("serial")
  40. class AgeTooSmailExpection extends Exception{
  41. public AgeTooSmailExpection() {
  42. }
  43. public AgeTooSmailExpection(String msg) {
  44. super(msg);
  45. }
  46. }
  47. @SuppressWarnings("serial")
  48. class AgeTooBigExpection extends Exception {
  49. public AgeTooBigExpection() {
  50. }
  51. public AgeTooBigExpection(String msg) {
  52. super(msg);
  53. }
  54. }
  55. @SuppressWarnings("serial")
  56. // 自定义异常
  57. class InvalidAgeException extends AgeTooSmailExpection{
  58. private String info ;
  59. public InvalidAgeException(String info) {
  60. this.info = info;
  61. }
  62. public void outInfo() {
  63. System.out.println(info);
  64. }
  65. }

image_1bpdmbkq4rnv1jn3n41fipedh1t.png-42.9kB

三:java 的包

3.1 包的管理

  1. 1. 对类文件进行分类管理
  2. 2. 对类提供多层命名空间
  3. 3. 写在程序文件的第一行
  4. 4. 类名的全称的是包名.类名。
  5. 5. 包也是一种封装形式。
  6. package ---
  7. ---------
  8. 包: 
  9. 类似于文件夹,组织管理的结构。
  10. www.sina.com
  11. www.baidu.com
  12. com.sina.weibo.
  13. com.sina.weixin.
  14. 完整的类名:
  15.  包名 + . + 类名:
  16.  如: com.learnjava.day07.PackageDemo
  17.  mkdir classes
  18.  javac -d classes PackageDemo.java
  19.  // -d 指定存放classes 文件的位置。
  20.  java -cp classes com.learnjava.day07.PackageDemo
  1. package com.learnjava.day06;
  2. public class Package01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. System.out.println("hello package06");
  6. }
  7. public static void sayHello(String msg) {
  8. System.out.println(msg);
  9. }
  10. }
  1. package com.learnjava.day07;
  2. import com.learnjava.day06.Package01;
  3. public class PackageDemo {
  4. public static void main(String[] args) {
  5. Package01.sayHello("how are you!!!!");
  6. System.out.println("hello world");
  7. }
  8. }

image_1bpdopa5es01bd3tbe1e8961c2a.png-39.7kB

  1. javac -d classes Package01.java
  2. javac -cp classes -d classes packageDemo01.java
  3. java -cp classes com.learnjava.day07.PackageDemo01

3.2 包的之间的访问

  1. 1. 被访问的保重类权限必须是public.
  2. 2. 类中的成员权限:public 或者 protected
  3. 3. protected 是为其他包中的子类提供一种权限
  4. 4. 例程
  5.  权限 (可见性):
  6.  -----
  7.   public //公有的
  8.   protected //受保护的
  9.   default  //默认的
  10.   private   //私有的
  11.  
  12. 5. 关系:
  13. 同类 > 同包 > 子类 > 不同包
  14. 6.import 导入:
  15. - 简化类名:
  16. - 一个程序文件中只有一个package 也可以有多个import
  17. - 用来导包中的类,不导入包中的包。
  18. - 通常写 import mypacke.Demo;
  19. 而不写import mypacke.*;
  20. 6. jar
  21. - java archieve,java归档,打包
  22. - jar war ear har
  23. - Java文件进行归档。
  24. - jar cvf xxx.jar -C foo/ . // 将fool 全部打包。
  25. // 归档时,指定入口点:
  26. - jar cvfe xx.jar com.learnstudy.e.EE -C foo/ .
  27. // 归档时,指定入口点,会在清挡文件中添加Main-class 属性。
  28. jar cvfe xx.jar com.learnjava.
  29. - 通过jar 文件执行程序
  30. java -cp xxx.jar com.learnstady.e.EE
  31. java -jar xxx.jar

image_1bpdpreo1sls1e9r7qo1em5rdj2n.png-282.4kB

  1. package com.learnjava.day07;
  2. public class PackageDemo01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. A a = new A();
  6. a.sayHello("say hello");
  7. B b = new B();
  8. b.bayHello("hahaha");
  9. }
  10. }
  11. class A {
  12. protected void sayHello(String msg) {
  13. System.out.println(msg);
  14. }
  15. }
  16. class B extends A {
  17. protected void bayHello(String msg) {
  18. System.out.println(msg);
  19. }
  20. }

image_1bpfhbe8619181mv76mp6tt1po79.png-44.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注