栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础09

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础09

枚举、注解、异常
  • 一、枚举和注解
    • 枚举实现方式
      • 自定义类实现枚举
        • 四步走
      • 使用enum关键字实现枚举
        • 特点
        • 五步走
        • enum关键字实现枚举的注意事项
        • 枚举常用方法
        • enum实现接口
  • 二、注解
    • 基本注解介绍
      • @Override
      • @Deprecated
      • @SuppressWarnings
    • 元注解的介绍
      • @Retention
      • @Target
      • @Documented
      • @Inherited
  • 三、异常
    • 入门案例
    • 介绍
    • 异常体系图(重要)
      • 小结
    • 五大运行时异常
      • 空指针异常
      • 算术异常
      • 数组下标越界异常
      • 类型转换异常
      • 数字格式不正确异常
        • NumberFormatException和InputMismatchException区别
    • 编译异常
    • 异常处理
      • try-catch-finally
        • 注意细节(注意:4,5)
        • 重要习题:
        • 小结
      • throws
        • throws 介绍
        • throws的使用细节(注意:3)
    • 自定义异常
      • 基本概念
      • 基本步骤
    • throw和throws的区别

一、枚举和注解

引出:

分析:

解决方案:枚举

枚举实现方式 自定义类实现枚举

四步走

package com.bijing.enum_;


public class Enumeration01 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}

class Season {
    public static final Season SPRING = new Season("春天", "温暖");
    public static final Season WINTER = new Season("冬天", "寒冷");
    public static final Season AUTUMN = new Season("秋天", "凉爽");
    public static final Season SUMMER = new Season("夏天", "炎热");
    private String name;
    private String desc;

    // 1.私有化构造器
    // 2.去掉set方法
    // 3.在Season内部直接创建固定对象
    // 4.加入final修饰符,final修饰的对象只是引用值不可更改,但是它里面的属性可以通过set进行更改 
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + ''' +
                ", desc='" + desc + ''' +
                '}';
    }
} 
使用enum关键字实现枚举 特点
  1. 枚举类的对象默认都是public
  2. 枚举类的构造器都是 private ,故无法在外部创建其实例,这也决定了枚举类实例的个数的确定性
  3. enum类不可被继承。
  4. enum类默认extends java.lang.Enum,所以无法再继承其他类
五步走
    // 1.使用关键字 enum替代class
    // 2.public static final Season02 SPRING = new Season02("春天", "温暖");直接使用
    //  SPRING("春天","温暖");代码要在属性上面写
    // 3.有多个常量(对象),使用,间隔即可
    // 4.如果使用enum来实现枚举,要把定义的常量对象写在最前面
    // 5.如果我们使用的是无参构造器,创建常量对象,则可以省略(〕
enum Season02 {
    SPRING("春天", "温暖"), SUMMER("夏天", "炎热");

    
    private String name;
    private String desc;

    
    private Season02(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season02{" +
                "name='" + name + ''' +
                ", desc='" + desc + ''' +
                '}';
    }
}

enum关键字实现枚举的注意事项


6.枚举的toString()方法返回的是name

枚举常用方法

enum继承了Enum


Season02 season = Season02.SPRING;
        //name()方法输出常量的名称,即SPRING
        System.out.println(season.name());
        //ordinal()方法输出的是该枚举对象的次序/编号 ,下标从0开始
        System.out.println(season.ordinal());
        // values()方法返回一个season02数组
        Season02[] seasons = Season02.values();
        for (Season02 season02 : seasons) {
            System.out.println(season02);
        }
        //valueOf() 将字符串转换成枚举对象,要求字符串必须为己有的常量名,否则报异常
        //1.根据你输入的 "AUTUMN" 到 Season2的枚举对象去查找
        //2.如果找到了,就返回,如果没有找到,就报错
        Season02 autumn1 = Season02.valueOf("AUTUMN");
        System.out.println("autumn1=" + autumn1);
        System.out.println(Season02.AUTUMN == autumn1);
        //compareTo()方法比较的是两个枚举常量,比较它们的编号 
        //返回SPRING的编号 - AUTUMN的编号
        System.out.println(Season02.SPRING.compareTo(Season02.AUTUMN));
    }
enum实现接口



enum Spring implements Season03 {
    SPRING();

    @Override
    public void show() {
        System.out.println("我是春天");
    }
}

interface Season03 {
    void show();
}

public class EnumDetail {
    public static void main(String[] args) {
        Spring.SPRING.show();
        System.out.println(Spring.SPRING);
    }
}
二、注解

基本注解介绍

@Override

主要是语法校验看你是否真的重写了

Override使用说明

@Deprecated


@SuppressWarnings


关键字用途
allto suppress all warnings (抑制所有警告)
boxingto suppress warnings relative to boxing/unboxing operations (抑制装箱、拆箱操作时候的警告)
castto suppress warnings relative to cast operations (抑制映射相关的警告)
dep-annto suppress warnings relative to deprecated annotation (抑制启用注释的警告)
deprecationto suppress warnings relative to deprecation (抑制过期方法警告)
fallthroughto suppress warnings relative to missing breaks in switch statements (抑制确在switch中缺失breaks的警告)
finallyto suppress warnings relative to finally block that don’t return (抑制finally模块没有返回的警告)
hidingto suppress warnings relative to locals that hide variable(抑制相对于隐藏变量的局部变量的警告)
incomplete-switchto suppress warnings relative to missing entries in a switch statement (enum case)(忽略没有完整的switch语句)
nlsto suppress warnings relative to non-nls string literals( 忽略非nls格式的字符)
nullto suppress warnings relative to null analysis( 忽略对null的操作)
rawtypesto suppress warnings relative to un-specific types when using generics on class params( 使用generics时忽略没有指定相应的类型)
restrictionto suppress warnings relative to usage of discouraged or forbidden references( 抑制禁止使用劝阻或禁止引用的警告)
serialto suppress warnings relative to missing serialVersionUID field for a serializable class( 忽略在serializable类中没有声明serialVersionUID变量)
static-accessto suppress warnings relative to incorrect static access( 抑制不正确的静态访问方式警告)
synthetic-accessto suppress warnings relative to unoptimized access from inner classes( 抑制子类没有按最优方法访问内部类的警告)
uncheckedto suppress warnings relative to unchecked operations( 抑制没有进行类型检查操作的警告)
unqualified-field-accessto suppress warnings relative to field access unqualified( 抑制没有权限访问的域的警告)
unusedto suppress warnings relative to unused code( 抑制没被使用过的代码的警告)

元注解的介绍

用来修饰注解的

@Retention

表示注解作用范围,(源码中,class文件中,jvm中)

@Target

表示注解可以在哪里使用

@Documented

表示javadoc生成文档时能看到该注解

@Inherited

表示子类可以继承该注解

三、异常 入门案例


tips:mac 中try-catch快捷键是option+command+t

介绍

错误Error
异常Exception:运行时异常、编译时异常 ,编译时异常必须要处理,运行时异常不处理会默认throws方式处理

异常体系图(重要)


小结

五大运行时异常 空指针异常

算术异常

数组下标越界异常

类型转换异常

数字格式不正确异常

NumberFormatException和InputMismatchException区别

在scanner接收到输入后,如果输入类型不对会报InputMismatchException异常
在把输入到的内容进行类型转换成数字时如果不对会报NumberFormatException异常

编译异常

异常处理 try-catch-finally

注意细节(注意:4,5)
  1. 如果异常发生了,则异常发生的代码到catch之间的代码不会执行,直接进入到catch块
  2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
  3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用如下代码- finally
  4. 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception 在后,NullPointerException 在前,如果发生异常,只会匹配一个catch
    案例演示:
  5. 可以进行 try-finally 配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉 (finally执行完毕后退出程序,不执行后面的代码)。
    (应用场景:执行程序,不管是否发生异常,都必须要执行一段业务逻辑)
  6. try-catch-finally处理运行时异常时没有catch该类会默认throws Exception

重要习题:
  1. null没有equals方法,所以发生异常
  2. finally必须执行,所以会覆盖return 3

  1. try中有个return 1,所以不会报错
  2. return ++i后会把结果保存在临时变量temp中
  3. 继续执行finally中的++i,但是最后会return temp中的值
小结 throws

throws 介绍


throws的使用细节(注意:3)


3. 子类抛出的异常不能比父类抛出异常的辈分更大

自定义异常 基本概念

基本步骤



throw和throws的区别


throws一般在方法的声明处,表示要抛出什么类型的异常,而throw在方法体中,抛出一个异常的对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号