包装类
    概念:将八大基本数据类型 转为 对应的引用数据类型
    基本数据类型 使用起来 效率高 但是没有对象 没有方法可用
    byte———Byte
    short——-Short
    int———-Integer
    long———Long
    double——Double
    float——-Float
    boolean—-Boolean
    char———Character

    装箱:把一个数据从基本数据类型 转成对应的引用数据类型 获取其对象
    拆箱:从包装类对象 转换为对应的基本类型

    手动装箱:
    int num = 50;
    Integer i2 = Integer.valueOf(num);//手动装箱
    Integer i1 = num; //自动装箱 jdk1.5后

    int num2 = (int)i2; //手动拆箱
    int num3 = i1; //自动拆箱 jdk1.5后
    Date对象 = SimpleDateFormat对象.parse(String) //需要抛异常

    String s = “123”;
    // Integer parseInt = Integer.parseInt(s);
    int num4 = Integer.parseInt(s); //边转边拆箱

    都是将String转为基本数据类型的方法
    byte b = Byte.parseByte(String);
    short s = Short.parseShort(String);
    int i = Integer.parseInt(String);
    long l = Long.parseLong(String);
    float f = Float.parseFloat(String);
    double d = Double.parseDouble(String);

    boolean bool = Boolean.parseBoolean(String);
    参数赋值为true 则返回真 其他任何字符串都返回false
    char c = n.charAt(int);

    异常类
    概念:指程序在运行过程中出现的非正常情况 导致虚拟机非正常停止
    Throwable异常最高级父类 有两个子类 Error Exception
    Error:错误 指的是非常严重的错误 抛异常不能处理 NoClassDeFoundError
    Exception 编译期异常 运行时异常 ClassNotFoundException

    Exception类
    编译期异常(检查时异常):属于必须要处理的异常 不处理编码不通过 不能执行
    运行时异常RuntimeException:可处理可不处理的异常 即使代码将会错误 编译依然正常通过 在运行过程中判断错误

    这两种异常都可采用两种方案处理
    处理方案二:
    throws
    是发生编译期异常时 编码人员认定抛异常概率很低 选择此种方案 代码更整洁
    特点:使用throws放置在方法名参数列表的后面 可以跟多个异常类 只放异常类名 用,隔开 没有先后顺序 不能单独设置某个异常的提示内容 都是展示系统标准的e.printStackTrace();
    1.父类通过throws抛出了异常 则子类重写这个方法时
    子类可以不抛异常
    如果子类也要抛异常 则只能抛小于等于父类的异常
    2.如果子类必须抛一个编译期异常 要么去父类中抛相同或者更大的异常 要么子类中使用try catch

    处理方案一:
    try{
    怀疑会报错的代码
    }catch(异常类的对象 e){
    e.printStackTrace(); 打印栈信息
    System.out.println(e.getMessage()); 错误代码
    System.out.println(e.toString()); 异常类名+代码
    当异常匹配成功后执行的代码
    }catch(下一个异常类对象 e){

    }
    。。。
    catch(Exception e){
    放在最后一个 所有异常都能匹配进来的父类异常模块
    }finally{
    //无论代码正确与否都要执行的代码 放在此处
    }

    当try模块中有多个错误时 会拿取第一个异常 去匹配下面的catch模块 匹配成功则执行
    不再匹配其他catch模块 执行完后执行finally模块
    因此也要求如果放置Exception异常模块 要做最后一个catch模块使用

    自定义异常类
    自定义编译异常类 继承:Exception
    自定义运行时异常 继承:RuntimeException

    //定义一个类 继承自Exception 这个类就是一个编译异常类
    public class LoginException extends Exception {
    一般提供一个带String类型参数的构造方法 将创建异常对象时的提示信息传入并保存
    public LoginException(String image) {
    super(image);
    }
    }

    测试类中 在希望抛出异常的情况下编写 通过关键字throw
    throw 只管抛不管处理
    throw new LoginException(“登陆失败”);

    如果是编译异常类 一定要通过throws或者try..catch去处理 否则报错
    如果是运行时异常类 可处理(通过throws或者try..catch去处理) 可不处理

    总结
    try..catch
    处理异常的两种方案之一 在方法内部使用 可以自定义错误提示
    catch模块有循序性 catch模块使用异常类的对象
    throws
    处理异常的两种方案之一 在方法参数列表的后面 后面抛异常类的名称
    可抛多个 没有顺序性
    throw
    只负责抛出某个异常 不管处理 放在方法中某种情况之下 后面跟要抛的异常类的对象
    如果抛编译异常 依然要通过以上两种方案之一去处理 如果运行时异常 则可处理可不处理

    练习:
    自定义编译异常 LoginException 他有一个子类异常ChildLoginException
    自定义类型父类User 有一个抽象方法login()
    子类Student实现父类方法 并完成登陆功能 功能使用子类异常提示用户 登录名只能是张三 否则抛异常