韩顺平11、12章学习

本文详细介绍了Java中的枚举类型,包括自定义枚举和使用enum关键字创建枚举,以及枚举的成员方法。同时,探讨了JDK内置的基本注解及其元注解的作用。此外,文章还涉及了异常处理机制,包括异常的概念、分类、处理方式,并给出了自定义异常的示例。最后,通过代码示例展示了如何在实际编程中应用这些概念。
摘要由CSDN通过智能技术生成

11.2 p425-429(5p)今天做了咨询。我觉得,触碰到我最内心深处的东西了。洗衣服的时候emo了
11.3 p430-435(6p)下组会就九点了。。。尽力了。
11.4 p436-440(5p)…确实是最空闲的周四…我反省
11.5-11.6 啥都没看,科研也没弄,太冷了,北京初雪给我惊到了
11.7 p441-449(9p)待在寝室效率确实好低
11.8p450-465(16p)同上
总结:这周状态很差劲。。。emo对我学习状态影响特大,不过我决定不苛责自己,允许这么一周失控的存在。

11章 枚举和注解

枚举介绍

设置个性化文件头
在这里插入图片描述
引入—>创建一个类season,但是其实其固定name只有四个?只读而不需更改
—>用枚举,即把具体的对象一个个列出来

  • 枚举:enumeration 即一组常量的集合,属于一种特殊类,包含一组有限特定对象
  • 实现方式:自定义或enum关键字

自定义枚举

//1.私有化构造器
//2.去掉set方法
//3.内部创建对象,可加public static final

enum枚举

1.使用enum替代class
2.创建对象改为spring(",") 常量名(实参列表)(调用的是有参构造器)
3.如果有多个常量,使用,分隔
4.要将枚举对象写在最前面(甚至在定义的参数前面)
5.当使用无参构造器,可以省略括号或实参列表

用javap证明继承了enum类
在这里插入图片描述
发现可以直接open in terminal,跟在命令行是一样的,用javap看继承类
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7391b32af1b439484c989e1779c4d5f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAc29va2llX18=,size_20,color_FFFFFF,t_70,g_se,x_16

enum Gender{
GOY,GIRL;
}//是对的,枚举类Gender无属性调用无参构造器

enum成员方法

 System.out.println(winter.name());//1.输出常量名
        System.out.println(winter.ordinal());//2.输出枚举对象的次序或编号
        //3.从反编译看出values可返回Season2[],即返回所有常量
        System.out.println(Season2.values());
        Season2[] values =Season2.values();
        for (Season2 season:values) {//增强for循环 像python的lambda
            /*相当于for(int i,i<values.length(),i++){
                    Season2 season = values[i]
            }*/
            System.out.println(season);//SPRING, WINTER

        }
        Season2 s=Season2.valueOf("WINTER");
        //4.('')是否在season2中,若有则返回,无则报错
        System.out.println(s);//WINTER
        //5.比较枚举常量(根据编号)返回值=前编号-后编号
        System.out.println(Season2.WINTER.compareTo(Season2.SPRING));

注意:enum不能继承其他类(已隐形继承enum类),但可以实现接口

JDK内置基本注解

注解:修饰解释包,方法等数据信息
public @interface xx{
//看见@interface,这是一个注解类
}
@override 重写父类方法 只是编译器会对语法校验:父类是否真的有这个方法
//源码 @target(elementtype.method)即说明只能修饰方法
//target是修饰注解的注解:即元注解

@deprecated 某个类or方法or字段or参数过时了 不再推荐使用,但可以使用,即java版本升级的过渡

@suppresswarnings 抑制编译器警告
即有洁癖的不希望看到warning,@suppresswarnings ({“rawtypes”,“unchecked”})//未指定泛型,没检查的警告,或直接写个all
作用范围与放置位置有关,想全部抑制放在类上
在这里插入图片描述

元注解

retention //指定注解作用范围(编译、class、jvm)
target//指定注解修饰范围(类、方法…)
documented//在javadoc生成文档时可以看到该注解(retention必为runtime)
inherited//被修饰的类,则其子类自动有这个注解

在这里插入图片描述
作业:

匿名内部类还是得看看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package Homework;

/**
 * @version 1.0
 * @ author sookie
 */
public class h06 {
    public static void main(String[] args) {
        Person person = new Person("唐僧", new Horse());//不要浪费对象
        person.common();
        person.passRiver();

    }
}

interface Vehicles{
    void work();
}

class Horse implements Vehicles{
    @Override
    public void work() {
        System.out.println("horse work...");
    }
}
class Boat implements Vehicles{
    @Override
    public void work() {
        System.out.println("boat work...");
    }
}
/*
class VehiclesFactory{
    Horse horse=new Horse();
    Boat boat = new Boat();
    public Horse getHorse(){ return horse};
    public Boat getBoat(){return boat};
太冗余,直接return
}*/
class VehiclesFactory{
    //不想再创建对象,用static
    //再优化:白龙马只有一匹,可以不用new,一直一匹马---->用饿汉式
    //改前:
    // public static Horse getHorse(){ return new Horse();}
    //改后:
    private static Horse horse=new Horse();
    private VehiclesFactory() {}//构造器也要私有化
    public static Horse getHorse(){ return horse;}
    public static Boat getBoat(){return new Boat();}
}
class fly{}

class Person{
    private String name;
    private Vehicles vehicles;//接口可以作为属性?
    // 接口like父类,可以接收实现了该接口的类的对象

    public Person(String name, Vehicles vehicles) {
        this.name = name;
        this.vehicles = vehicles;
    }
    //要求5:具体要求封装成方法
    public void passRiver(){
//        Boat boat = VehiclesFactory.getBoat();
//        boat.work();//重复了,用vercile,且不能浪费构造器的vehicle
        if (!(vehicles instanceof Boat)){
            //重要!if(vehicles==null),则如果是马也判断不出来
            vehicles= VehiclesFactory.getBoat();
        }
          vehicles.work();


    }
    public void common(){
        if (!(vehicles instanceof Horse)){
            vehicles=VehiclesFactory.getHorse();
        }
        vehicles.work();
    }
}
package Homework;

/**
 * @version 1.0
 * @ author sookie
 */
/*
car类有温度,有air类,air类有flow可通过温度来吹不同的风
实例化多种温度的car
 */
public class h07 {
    public static void main(String[] args) {
        Car car = new Car(20);
        car.getAir().flow();//改后
        Car car1 = new Car(60);
        car1.getAir().flow();
    }
}
class Car{
    private double temperature;

/*改前:很奇怪,不知道new car的时候怎么写
    private Air air;
    public Car(double temperature, Air air) {
        this.temperature = temperature;
        this.air = air;
    }*/
    //改后,
// 不要将air私有化一个属性,创建一个可以返回air的方法,
// 构造器只有温度一个参数,在main里也是调用getair
    public Air getAir(){
        return new Air();
    }

    public Car(double temperature) {
        this.temperature = temperature;
    }

    class Air{
        public void flow(){
            if (temperature>40) System.out.println("cold....");
            else if (temperature<0) System.out.println("hot....");
            else System.out.println("close");
        }
    }



}

完全不记得switch
在这里插入图片描述

12章 异常(Exception)

当出现错误程序,即停住不再执行,报错,如果这个错误影响不大,仍希望程序继续跑起来?----->对异常捕获,用异常处理机制
选中代码块—ctrl+alt+t

异常的概念

异常:程序执行的不正常情况(不包括语法和逻辑错误)
可分两类:
error:如栈溢出oom等,程序崩溃无法解决
exception:运行时|编译时,由编程错误或外在因素导致一般性问题,可处理,如空指针访问

异常体系图(!)

idea中:throwable ,ctrl+b,进入后show diagram,ctrl+alt+b选择相应子类显示
在这里插入图片描述
在这里插入图片描述

常见异常

常见运行异常(5)
在这里插入图片描述

在这里插入图片描述
常见编译异常

异常处理概念

两种方式:(二选一)
(1)trycatchfinally(即自己处理)

  • 异常发生,直接跳过后面代码进入catch
  • 异常未发生,try执行完跳过catch
  • 无论异常是否发生,执行finally代码块
  • 可多个catch(子类异常在前)
  • 可以tryfinally,即不处理异常,程序会崩溃(finally之后的语句都不会被执行),eg不管是否发生异常,必须释放资源挂掉程序等

(2)throws(即丢给调用者处理)(默认都是throws,所以其实会层层上升给jvm,直接报错退出)
在这里插入图片描述
在这里插入图片描述

  • p451多看看 catch和finally都有return,returnfinally1的;只有catch有但是finally对它进行处理,catch会有临时变量,仍返回未操作的值

异常处理分类

  • 编译异常也可以直接trycatch或抛出,即可正常运行
  • 运行异常默认throws
    在这里插入图片描述
    在这里插入图片描述

自定义异常

自定义异常类继承exception或者runtimeException(一般是这个,可以使用默认处理机制)

throw与throws

在这里插入图片描述
在这里插入图片描述

注意2,3顺序

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值