zoukankan      html  css  js  c++  java
  • 2017年3月31号课堂笔记

    2017年3月31号 晴 空气质量:优

    内容:接口的打印机案例,异常,log4j简述

     补充:硕哥在u2讲jdbc时候提到,自定义异常时,如果子类抛出或者处理异常,父类也需要抛出异常

    所以通常在书写父类时会预防性地抛出异常先

    一、接口的打印机案例

    老师代码:

    1、打印机类:

    package cn.bdqn.bean;

    import cn.bdqn.dao.InkBox;
    import cn.bdqn.dao.Paper;

    /**
    *
    *打印机
    */
    public class Printer {
    /**
    * 打印机具有的属性
    * 不能写生 A4 B5 Black Color
    * 为什么?
    * 如果我们写成了具体的一个!那么用户没有选择的权利!
    *
    */
    private Paper paper; // 纸张
    private InkBox box; // 墨盒

    public Paper getPaper() {
    return paper;
    }

    public void setPaper(Paper paper) {
    this.paper = paper;
    }

    public InkBox getBox() {
    return box;
    }

    public void setBox(InkBox box) {
    this.box = box;
    }

    // 打印的方法
    public void print() {
    System.out.println("使用的纸张是:" + paper.getPage());
    System.out.println("墨盒的颜色是:" + box.getColor());
    }

    }

    2、墨盒接口:

    package cn.bdqn.dao;
    /*
    * 墨盒接口
    */
    public interface InkBox {
    // 得到具体的颜色
    String getColor();
    }

    3、纸张接口:

    package cn.bdqn.dao;

    /*
    * 纸张接口
    */
    public interface Paper {

    // 得到具体的纸张
    String getPage();

    }

    4、A4纸类:

    package cn.bdqn.dao.impl;
    //A4纸
    import cn.bdqn.dao.Paper;

    public class A4 implements Paper {

    @Override
    public String getPage() {
    return "A4";
    }

    }

    5、B5纸类:

    package cn.bdqn.dao.impl;

    //B5纸
    import cn.bdqn.dao.Paper;

    public class B5 implements Paper {

    @Override
    public String getPage() {
    return "B5";
    }

    }

    6、黑白墨盒类:

    package cn.bdqn.dao.impl;
    //黑白墨盒
    import cn.bdqn.dao.InkBox;

    public class Black implements InkBox {

    @Override
    public String getColor() {
    return "黑白";
    }

    }

    7、彩色墨盒类:

    package cn.bdqn.dao.impl;

    //彩色墨盒
    import cn.bdqn.dao.InkBox;

    public class Color implements InkBox {

    @Override
    public String getColor() {
    return "彩色";
    }

    }

    8、测试类:

    package cn.bdqn.test;

    import cn.bdqn.bean.Printer;
    import cn.bdqn.dao.InkBox;
    import cn.bdqn.dao.Paper;
    import cn.bdqn.dao.impl.A4;
    import cn.bdqn.dao.impl.Color;

    public class PrinterTest {

    /**
    *打印机的测试类
    */
    public static void main(String[] args) {

    /**
    * 01.实例化打印机
    * 打印机有了?
    * 纸张??墨盒呢???
    * 02.实例化对应的纸张和墨盒
    */
    Paper paper = new A4();
    InkBox box = new Color();

    Printer printer = new Printer();
    // 给我们的纸张和墨盒 赋值 不赋值 必须空指针异常 NullPointException
    printer.setBox(box);
    printer.setPaper(paper);
    // 打印的时候需要 纸张和墨盒
    printer.print();

    }

    }

    二、异常讲解(1)Demo(try,catch,finally):

     老师代码:

    package cn.bdqn.test;
    /**
    * 异常讲解(1)
    */
    import java.util.InputMismatchException;
    import java.util.Scanner;

    public class ExceptionTest {

    /**
    * 生活中的异常:---》摔跤
    * 下楼梯的时候,我也不想摔跤,但是确实摔了!
    * 然后呢??难道后半辈子就不过了??
    * 之后的生活肯定还得继续!!!
    *
    * 程序中的异常 : 在程序运行期间,发生了不正常的事件(代码的问题),中断了程序执行!
    * 从出现异常的地方,之后的代码都不会执行!
    * 显然不符合我们的需求!
    * 我们的需求---》继续执行后续的代码!
    * 怎么执行后续的代码?
    * 使用异常处理机制:
    * 给程序提供了一种处理错误的能力! 出现异常之后,程序还能运行!
    *
    *
    * int num = 5.0; 这行代码不能编译成功! 5.0是double类型 不能自动转换成int
    * Type mismatch: cannot convert from double to int
    * 这时候出现的问题,我们称之为 编译时异常!
    *
    *
    *
    * 异常处理机制中:常用的五个关键字!
    * 1.try:
    01.把可能会出现异常的代码块 放在try中 程序就可以继续执行
    02.try不可以单独使用!必须和catch/finally 联合使用
    03.try代码块中声明的变量,仅限于本代码块中!
    * 2.catch:
    * 01.捕捉try代码块中出现的异常信息
    * 02.如果在catch的参数中写的是具体的某个异常
    * 那么catch块只能捕获这一个具体的异常
    * 03.如果想同时捕捉多个异常,我们可以书写多个catch代码块
    * 04.多个catch并存的时候!有书写顺序! 类型必须是 由小到大!
    * 父类异常只能放在最后!
    * 3.finally:
    * 01.无论如何都要执行的代码块
    * 02.System.exit(0); 正常退出
    * 如果参数是非0!代表异常退出!
    */
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    try {
    System.out.println("请您输入第一个数字:");
    int num1 = scanner.nextInt();
    System.out.println("请您输入第二个数字:");
    int num2 = scanner.nextInt();
    /**
    *java.lang.ArithmeticException: / by zero 算术异常
    */
    System.out.println("两个数字的商是:" + (num1 / num2));
    } catch (ArithmeticException e) {
    System.out.println("除数不能为0!");
    System.exit(0); // 正常退出
    } catch (InputMismatchException e) {
    System.out.println("亲!输入格式有误!");
    } catch (Exception e) {
    e.printStackTrace(); // 打印出捕获到的异常信息
    } finally {
    System.out.println("这是finally代码块!");
    }
    System.out.println("程序结束");
    }
    }

    三、异常讲解(2)Demo(throw,throws):

     老师代码:

    package cn.bdqn.bean;

    /**
    * 异常讲解(2)
    *
    *4.throw
    * 01.抛出异常
    * 02.必须位于方法体内
    * 03.只能抛出一个异常
    *5.throws
    * 01.声明异常 出现在声明方法的后边(参数列表之后)
    * 02.可以有N个
    * 03.多个异常之间使用,隔开
    *
    */
    public class Student {

    private String name; // 姓名
    private String sex; // 性别
    private int age; // 年龄

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getSex() {
    return sex;
    }

    public void setSex(String sex) {
    this.sex = sex;
    }

    public int getAge() {
    return age;
    }

    /**
    * 如果年龄不在0-150之间 我们就抛出异常
    * @param age 用户传递过来的参数
    * @throws Exception 声明的异常
    * 01.声明的异常类 必须是抛出的异常类 或者其父类
    * 02.小例子:
    * 比如说,我们去买一辆自行车!
    * 本身整个车都有问题,然后卖家说 之后车轮有毛病! 不行!
    * 本身车轮有毛病! 卖家说车有毛病! 行!
    * 整个车以及车轮 我们理解成 抛出异常!
    * 卖家说的 都是 声明的异常!
    *
    * 03.别人都给我们说有毛病了!
    * 然后我们必须去解决这个问题!
    */
    public void setAge(int age) throws Exception {
    if (age < 0 || age > 150) {
    // 抛出异常
    throw new Exception("年龄不合法!");
    }
    this.age = age;
    }

    public Student(String name, String sex, int age) {
    super();
    this.name = name;
    this.sex = sex;
    this.age = age;
    }

    public Student() {
    super();
    }

    // 测试方法
    public static void main(String[] args) {
    // 创建学生对象
    Student stu = new Student();
    // 给对象的 属性赋值
    try {
    stu.setAge(-100);// 不健康的输入
    } catch (Exception e) {
    e.printStackTrace();
    }
    /**
    * 对于我们调用的方法 有异常需要处理!
    * 两种方式:
    * 01.我们自己使用异常处理机制解决
    * 02.继续抛出异常,最后是交给了JVM来处理!
    */
    }

    }

    四、自定义异常类

     老师代码:

    1)学生的实体类:

    package cn.bdqn.exception;

    /**
    *学生的实体类
    *
    */
    public class Student {

    private String name; // 姓名
    private String sex; // 性别
    private int age; // 年龄

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getSex() {
    return sex;
    }

    /**
    * 性别只能是男和女
    * @param sex 性别
    * @throws StudentException
    */
    public void setSex(String sex) throws StudentException {
    if (sex.equals("男") || sex.equals("女")) {
    this.sex = sex;
    } else {
    throw new StudentException("性别输入异常!");
    }
    }

    public int getAge() {
    return age;
    }

    /**
    * 使用我们自定义的异常类 来处理
    * @throws StudentException
    */
    public void setAge(int age) throws StudentException {
    if (age < 0 || age > 150) {
    throw new StudentException("年龄异常!");
    }
    }

    public Student(String name, String sex, int age) {
    super();
    this.name = name;
    this.sex = sex;
    this.age = age;
    }

    public Student() {
    super();
    }

    // 测试方法
    public static void main(String[] args) {
    // 创建学生对象
    Student stu = new Student();
    try {
    stu.setAge(-90);
    stu.setSex("小人");
    } catch (StudentException e) {
    e.printStackTrace();
    }
    }
    }

    2)自定义异常类:

    package cn.bdqn.exception;

    /**
    * 自定义异常类 ----》针对于Student
    * 01.继承RunTimeException
    * 02.继承Exception
    * 03.继承Throwable
    */
    public class StudentException extends Exception {

    // 给用户一个提示信息
    public StudentException(String msg) {
    super(msg);
    }

    public StudentException() {
    }

    }

    五、关于异常的一道面试题

     老师代码:

    package cn.bdqn.exam;

    public class ExceptionTest {

    /**
    * 面试题:
    * 存在return的时候,finally的执行顺序!
    * 01.首先会执行finally中的代码块
    * 02.执行完毕之后再去执行return
    *
    *
    * 想把某段代码块进行 try catch:快捷键
    * 01.选中需要捕获的代码块
    * 02.shift +alt +z
    *
    */
    public static void main(String[] args) {

    try {
    System.out.println(111);
    System.out.println(222);
    System.out.println(333);
    return;
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    System.out.println("finally代码块!");
    }
    System.out.println("程序结束");
    }

    }

    六、简述log4j:

    log4j--log for java(java的日志)

    配置:

    第一步:

    加入log4j-1.2.8.jar(可以选择log4j的更高版本)到lib下。
    bulid path成奶瓶图标,可应用

    第二步:

    在某包下建立log4j.properties。内容如下:(记不太准确,大概是类似下面这样的)

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %C.%l%m%n

    七、常见异常类型(图解)背下来!

      

    八、作业

    1、多看视频(下周开始讲高级了)

    2、做题

    九、考试

    2017.03.31
    15: 02开始,15:47结束;答题时间:43分钟;检查时间:2分钟;
    成绩:86 分


    封装继承多态这部分还是比较吃力,回去总结错题,把相关不牢固的知识点真正的弄懂,不能似是而非。
    最近题目练习的少,要多做题,做错题,找做题感觉。

    十、老师辛苦了!

  • 相关阅读:
    [剑指Offer] 59.按之字形顺序打印二叉树
    [剑指Offer] 58.对称的二叉树
    [剑指Offer] 57.二叉树的下一个结点
    [剑指Offer] 56.删除链表中重复的结点
    [剑指Offer] 55.链表中环的入口结点
    [计算机网络] C++模拟telnet登陆SMTP服务发送邮件过程
    [计算机网络-应用层] 因特网中的电子邮件
    [计算机网络-应用层] DNS:因特网的目录服务
    [剑指Offer] 54.字符流中的第一个不重复的字符
    [剑指Offer] 53.表示数值的字符串
  • 原文地址:https://www.cnblogs.com/wsnedved2017/p/6650602.html
Copyright © 2011-2022 走看看