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

韩顺平11、12章学习

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

韩顺平11、12章学习

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-459(10p)同上
总结:这周状态很差劲。。。emo对我学习状态影响特大,不过我决定不苛责自己,允许这么一周失控的存在。

文章目录
  • 11章 枚举和注解
    • 枚举介绍
    • 自定义枚举
    • enum枚举
    • JDK内置基本注解
    • 元注解
  • 12章 异常(Exception)
    • 异常的概念
    • 异常体系图(!)
    • 常见异常
    • 异常处理概念
    • 异常处理分类
    • 自定义异常
    • throw与throws

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看继承类

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
            
            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;


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{
    //不想再创建对象,用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;



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;


    //改后,
// 不要将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顺序


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

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

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