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 枚举的使用
![](https://i-blog.csdnimg.cn/blog_migrate/4557ff63830f235472cc676f55e93176.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a5f1b787b481debbde6e3db4d66c8b29.jpeg)
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();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/f0aa4a60c58696feed38aafa722118b1.png)
设计模式【23种:单例模式、静态工厂模式、代理模式...】
静态工厂模型
根据需求的类型,对应返回对象。
![](https://i-blog.csdnimg.cn/blog_migrate/6ff641cc854cdf252e17befcbdeb0165.jpeg)
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();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/9142ac1b23ca27ccd8840f68ba388ab6.png)
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类
异常类分类:
编译时异常 编译时发生,不解决无法编译
编译时异常 | 含义 |
IOException | 输入输出异常 |
SQLException | 数据库异常 |
FileNotFoundException | 文件找不到异常 |
运行时异常 编译正常通过,运行时抛出异常
运行时异常 | 含义 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
RuntimeException | 运行时异常根类 |
NullPointerException | 空引用 |
ArithmeticException | 数学异常 |
ClassCastException | 类型转化异常 |
NumberFormatException | 数字转化异常 |
6.1.2 异常发生后的反应
1.对象创建保留,可能资源信息泄露
2.程序意外终止,导致其他模块无法运行