2.1笔记

5.6 枚举

5.6.1 枚举的定义
一一列举,用于列举一组固定的离散值。
比如:性别【男女】、月份【1-12】、星期【1-7】、人种【黑白黄】、交通灯【红黄绿】...
上传类型【doc、txt】
5.6.2 枚举的作用
1.代码可读性增强,更加方便
2.枚举可以限制类型,提高安全性
3.职责解耦,方便代码维护
5.6.3 枚举的声明
控制权限 enum 枚举名{
     //枚举成员
}
注意:
1.权限 public 默认
2.枚举名 同类型 XXType
5.6.4 枚举的成员
枚举中只有:枚举型常量,可以直接定义常量名,本身自己就是值
控制权限 enum 枚举名{
//枚举成员
XXX.XXX.XX;
}

实例:

public enum LighrType{
    RED,GREEN,YELLOW;
}

枚举常量调用:

枚举名.枚举常量

练习:定义一个枚举,上传图片类型【.png\.jpg\.gif】

public enum Picture {
    png,jpg,gif;
}
5.6.5 枚举的使用
public enum GlassType {
    OPAQUE,//不透明
    TRANSPARENT,//透明    
    TRANSLUCENT;//半透明
}
public interface Transparency {
    void getTransparency();
}
public class Glass implements Transparency{
    private GlassType gt;

    public Glass(GlassType gt) {
        super();
        this.gt = gt;
    }

    @Override
    public void getTransparency() {
        // TODO Auto-generated method stub
        switch (gt) {
        case OPAQUE:
            System.out.println("卫生间玻璃不透明"+GlassType.OPAQUE);
            break;
        case TRANSPARENT:
            System.out.println("厨房玻璃透明"+GlassType.TRANSLUCENT);
            break;
        case TRANSLUCENT:
            System.out.println("客厅玻璃半透明"+GlassType.TRANSPARENT);
            break;
        }
    }
}
public class TestG {
    public static void main(String[] args) {
        Glass g1 =new Glass(GlassType.OPAQUE);
        g1.getTransparency();
        Glass g2 =new Glass(GlassType.TRANSLUCENT);
        g2.getTransparency();
        Glass g3 =new Glass(GlassType.TRANSPARENT);
        g3.getTransparency();
    }
}

设计模式【23种:单例模式、静态工厂模式、代理模式...】

静态工厂模型

根据需求的类型,对应返回对象。

public enum MedicinalType {
    Fever,//发烧
    Antiphlogistic,//消炎
    Relievepain;//止痛
}
public interface Pill {
    void make();
}
public class Fevar implements Pill  {

    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("布洛芬");
    }
}

class Antiphlogistic implements Pill{

    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("青霉素");
    }
    
}

class Relievepain implements Pill{

    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("对乙酰氨基酚");
    }
    
}
public class MedicinalFactory {
    private static Pill p;
    
    public static Pill getPill (MedicinalType mt) {
        switch (mt) {
        case Fever:
            p = new Fevar();
            break;

        case Antiphlogistic:
            p = new Antiphlogistic();        
            break;
                    
        case Relievepain:
            p = new Relievepain();
            break;
        }
        
        return p;
    }

}
public class TestM {
    public static void main(String[] args) {
        MedicinalFactory.getPill(MedicinalType.Fever).make();
        MedicinalFactory.getPill(MedicinalType.Antiphlogistic).make();
        MedicinalFactory.getPill(MedicinalType.Relievepain).make();
    }

}

5.7 内部类

类里面定义的类
5.7.1 内部类的分类
1.静态内部类
2.实例内部类
3.局部内部类【方法内部的类】
public class in {
    //静态内部类
    static class a{
        static int i=10;
        int j=20;
    }
    //实例内部类
    class b{
        int k=30;
    }
    //局部内部类
    public void test() {
        class c{
            int m=40;
        }
        System.out.println(new c().m);
    }
}

public class Testin {
    public static void main(String[] args) {
        //局部内部类调用
        new in().test();
        
        //静态内部类调用
        System.out.println(in.a.i);//调用静态属性
        in.a a=new in.a(); //调用实例属性
        System.out.println(a.j);
        
        //实例内部类调用
        in.b b =new in().new b();
        System.out.println(b.k);
    }

}
5.7.2 匿名内部类【※】
没有名字的内部类

语法规则:

接口 对象名 = new 接口(){
    //接口的某实现类类体
}

实例:

public interface Amimal {
    void eat();
}

class Tiger implements Amimal{

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("老虎吃肉");
    }
    
}

public class niming {
    public static void main(String[] args) {
        //传统写法
        Amimal t =new Tiger();
        t.eat();
        
        //匿名内部类
        (new Amimal() {
            
            @Override
            public void eat() {
                // TODO Auto-generated method stub
                System.out.println("兔子吃年糕");
            }
        }).eat();
        
        //jdk8+ lamba
        Amimal cat = ()->{System.out.println("兔子吃年糕");};
        cat.eat();
    }
}

改写工厂:

    switch (mt) {
        case Fever:{
            p=()->{System.out.println("布洛芬");};
        }
            break;

        case Antiphlogistic:{
            p=()->{System.out.println("布洛芬");};
        }        
            break;
                    
        case Relievepain:{
            p=()->{System.out.println("布洛芬");};
        }
            break;
        }

第六章 JAVA API

java.lang 异常类 String Math StringBuilder StringBuffer Object 包装类 Class 【核心包,不需要手动导入】
java.util 集合类 Date ...【工具包】
java.io 输入输出流【读写文件、流】
多线程 高并发 线程池
6.1 异常类 【java.lang】
异常是程序编写中遇到的问题,称之为异常。异常根类【Throwable】
异常 Exception类 程序员写程序是的疏忽,逻辑问题导致的问题,需要解决
错误 Error类 一般致命问题:比如内存溢出,虚拟机问题。。。不需要程序员解决
6.1.1 Exception类

异常类分类:

  1. 编译时异常 编译时发生,不解决无法编译

编译时异常

含义

IOException

输入输出异常

SQLException

数据库异常

FileNotFoundException

文件找不到异常

  1. 运行时异常 编译正常通过,运行时抛出异常

运行时异常

含义

ArrayIndexOutOfBoundsException

数组下标越界异常

RuntimeException

运行时异常根类

NullPointerException

空引用

ArithmeticException

数学异常

ClassCastException

类型转化异常

NumberFormatException

数字转化异常

6.1.2 异常发生后的反应
1.对象创建保留,可能资源信息泄露
2.程序意外终止,导致其他模块无法运行
6.1.3 异常捕获机制

6.1.4 异常抛出

6.1.5 自定义异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值