java面向对象基础增强.docx
- 文档编号:9402893
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:16
- 大小:20.33KB
java面向对象基础增强.docx
《java面向对象基础增强.docx》由会员分享,可在线阅读,更多相关《java面向对象基础增强.docx(16页珍藏版)》请在冰点文库上搜索。
java面向对象基础增强
1JDK5新特性
●自动装箱和拆箱
●泛型
●增强for循环
●静态导入
●可变参数
●枚举
2枚举
●枚举概述
•是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
举例:
一周只有7天,一年只有12个月等。
•回想单例设计模式:
单例类是一个类只有一个实例
•那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。
这才能是枚举类。
●通过自己定义一个枚举类来演示案例
•第一版
•第二版
•第三版
•发现自己定义一个枚举类,比较麻烦,所以,java就提供了枚举类供我们使用。
•格式是:
只有枚举项的枚举类
●publicenum枚举类名{
枚举项1,枚举项2,枚举项3…;
●}
●注意事项
●定义枚举类要用关键字enum
●所有枚举类都是Enum的子类
●枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。
建议不要省略
●枚举类可以有构造器,但必须是private的,它默认的也是private的。
枚举项的用法比较特殊:
枚举(“”);
●枚举类也可以有抽象方法,但是枚举项必须重写该方法
枚举在switch语句中的使用
//第一版
//这就是枚举类
//publicenumDirection{
////枚举项
//FRONT,BEHIND,LEFT,RIGHT;
//}
//第二版
//publicenumDirection{
////枚举项
//FRONT("前"),BEHIND("后"),LEFT("左"),RIGHT("右");
//
//privateStringname;
//
////默认是private的
//privateDirection(){
//}
//
//privateDirection(Stringname){
//this.name=name;
//}
//
//publicStringgetName(){
//returnname;
//}
//}
//第三版
publicenumDirection{
//枚举项
FRONT("前"){
@Override
publicvoidshow(){
System.out.println("前");
}
},
BEHIND("后"){
@Override
publicvoidshow(){
System.out.println("后");
}
},
LEFT("左"){
@Override
publicvoidshow(){
System.out.println("左");
}
},
RIGHT("右"){
@Override
publicvoidshow(){
System.out.println("右");
}
};
privateStringname;
//默认是private的
privateDirection(){
}
privateDirection(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicabstractvoidshow();
}
Directiond=Direction.FRONT;
System.out.println(d.getName());
d.show();
3枚举类中的几个常见方法
●intcompareTo(Eo)
●Stringname()
●intordinal()
●StringtoString()
●
●values()
•此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
4JDK7新特性
●二进制字面量
●数字字面量可以出现下划线
●switch语句可以用字符串
●泛型简化
●异常的多个catch合并
●try-with-resources语句
8二进制字面量
●JDK7开始,终于可以用二进制来表示整数(byte,short,int和long)。
使用二进制字面量的好处是,可以使代码更容易被理解。
语法非常简单,只要在二进制数值前面加0b或者0B
●举例:
•intx=ob110110
9数字字面量可以出现下划线
●为了增强对数值的阅读性,如我们经常把数据用逗号分隔一样。
JDK7提供了_对数据分隔。
●举例:
•intx=100_1000;
●注意事项:
•不能出现在进制标识和数值之间
•不能出现在数值开头和结尾
•不能出现在小数点旁边
●inta=0b100_100;
●intb=0b_100_100;
●intc=0b100_100_;
●floatd=12.34_56f;
●floate=12._34_56f;
10switch语句可以用字符串
●switch语句可以用字符串
在switch语句中已经演示过了,还可以继续演示一次
11泛型简化
●泛型简化
•在集合中讲解泛型的时候已经演示过了,还可以在演示一下
12异常的多个catch合并
●异常的多个catch合并
•在异常的时候,已经讲演示了,还可以在演示一下
13try-with-resources语句
●格式:
•try(必须是java.lang.AutoCloseable的子类对象){…}
•好处:
•资源自动释放,不需要close()了
•把需要关闭资源的部分都定义在这里就ok了
•主要是流体系的对象是这个接口的子类(看JDK7的API)
14面向对象思想设计原则
•在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则
•单一职责原则
•开闭原则
•里氏替换原则
•依赖注入原则
•接口分离原则
•迪米特原则
15面向对象思想设计原则
●单一职责原则
•其实就是开发人员经常说的”高内聚,低耦合”
•也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个。
在设计模式中,所有的设计模式都遵循这一原则。
●开闭原则
•核心思想是:
一个对象对扩展开放,对修改关闭。
•其实开闭原则的意思就是:
对类的改动是通过增加代码进行的,而不是修改现有代码。
•也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去,如何能够做到这一点呢?
这就需要借助于抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现则是可以改变和扩展的。
●里氏替换原则
•核心思想:
在任何父类出现的地方都可以用它的子类来替代。
•其实就是说:
同一个继承体系中的对象应该有共同的行为特征。
●依赖注入原则
•核心思想:
要依赖于抽象,不要依赖于具体实现。
•其实就是说:
在应用程序中,所有的类如果使用或依赖于其他的类,则应该依赖这些其他类的抽象类,而不是这些其他类的具体类。
为了实现这一原则,就要求我们在编程的时候针对抽象类或者接口编程,而不是针对具体实现编程。
●接口分离原则
•核心思想:
不应该强迫程序依赖它们不需要使用的方法。
•其实就是说:
一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中。
●迪米特原则
•核心思想:
一个对象应当对其他对象尽可能少的了解
•其实就是说:
降低各个对象之间的耦合,提高系统的可维护性。
在模块之间应该只通过接口编程,而不理会模块的内部工作原理,它可以使各个模块耦合度降到最低,促进软件的复用
16设计模式
●设计模式概述
•设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
•设计模式不是一种方法和技术,而是一种思想
•设计模式和具体的语言无关,学习设计模式就是要建立面向对象的思想,尽可能的面向接口编程,低耦合,高内聚,是设计的程序可复用
•学习设计模式能够促进对面向对象思想的理解,反之亦然。
它们相辅相成
●设计模式概述
•设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
•设计模式不是一种方法和技术,而是一种思想
•设计模式和具体的语言无关,学习设计模式就是要建立面向对象的思想,尽可能的面向接口编程,低耦合,高内聚,是设计的程序可复用
•学习设计模式能够促进对面向对象思想的理解,反之亦然。
它们相辅相成
●创建型模式:
简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式。
(6个)
●结构型模式:
外观模式、适配器模式、代理模式、装饰模式、桥接模式、组合模式、享元模式。
(7个)
●行为型模式:
模版方法模式、观察者模式、状态模式、职责链模式、命令模式、访问者模式、策略模式、备忘录模式、迭代器模式、解释器模式。
(10个)
17简单工厂模式
●简单工厂模式概述
•又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
●优点
•客户端不需要在负责对象的创建,从而明确了各个类的职责
●缺点
这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
动物抽象类:
publicabstractAnimal{publicabstractvoideat();}
具体狗类:
publicclassDogextendsAnimal{}
具体猫类:
publicclassCatextendsAnimal{}
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
publicclassAnimalFactory{
privateAnimalFactory(){}
//publicstaticDogcreateDog(){returnnewDog();}
//publicstaticCatcreateCat(){returnnewCat();}
//改进
publicstaticAnimalcreateAnimal(StringanimalName){
if(“dog”.equals(animalName)){}
elseif(“cat”.equals(animale)){
}else{
returnnull;
}
}
}
18工厂方法模式
●工厂方法模式概述
•工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
●优点
•客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
●缺点
●动物抽象类:
publicabstractAnimal{publicabstractvoideat();}
●工厂接口:
publicinterfaceFactory{publicabstractAnimalcreateAnimal();}
●具体狗类:
publicclassDogextendsAnimal{}
●具体猫类:
publicclassCatextendsAnimal{}
●开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
发现每次修改代码太麻烦,用工厂方法改进,针对每一个具体的实现提供一个具体工厂。
●狗工厂:
publicclassDogFactoryimplementsFactory{
●publicAnimalcreateAnimal(){…}
●}
●猫工厂:
publicclassCatFactoryimplementsFactory{
●publicAnimalcreateAnimal(){…}
●}
16单例设计模式
●单例设计模式概述
•单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
●优点
•在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
●缺点
•没有抽象层,因此扩展很难。
职责过重,在一定程序上违背了单一职责
17模版设计模式
●模版设计模式概述
•模版方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现
●优点
•使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求
●缺点
•如果算法骨架有修改的话,则需要修改抽象类
18装饰设计模式
●装饰设计模式概述
•装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。
是继承的替代方案
●优点
•使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能
●缺点
•正因为可以随意组合,所以就可能出现一些不合理的逻辑
●手机添加新功能
●1:
继承版
●2:
装饰模式版
●最后说说IO中的装饰模式应用
19适配器设计模式
●适配器设计模式概述
•将一个类的接口转换成另外一个客户希望的接口。
从而使原来不能直接调用的接口变的可以调用。
●优点
•让本来不适合使用的接口变得适合使用
●缺点
一次只能适配一个类,使用有一定的局限性
20构造私有
Direction.java
packagecn.itcast_01;
publicclassDirection{
//创建几个实例
publicstaticfinalDirectionFRONT=newDirection();
publicstaticfinalDirectionBEHIND=newDirection();
publicstaticfinalDirectionLEFT=newDirection();
publicstaticfinalDirectionRIGHT=newDirection();
//构造私有,别人就不能无限的创建了
privateDirection(){
}
}
Direction2.java
packagecn.itcast_01;
publicclassDirection2{
//创建几个实例
publicstaticfinalDirection2FRONT=newDirection2("前");
publicstaticfinalDirection2BEHIND=newDirection2("后");
publicstaticfinalDirection2LEFT=newDirection2("左");
publicstaticfinalDirection2RIGHT=newDirection2("右");
//构造私有,别人就不能无限的创建了
//privateDirection2(){
//}
//加入成员变量,并去掉无参构造
privateStringname;
privateDirection2(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
}
Direction3.java
packagecn.itcast_01;
publicabstractclassDirection3{
//创建几个实例
publicstaticfinalDirection3FRONT=newDirection3("前"){
@Override
publicvoidshow(){
System.out.println("前");
}
};
publicstaticfinalDirection3BEHIND=newDirection3("后"){
@Override
publicvoidshow(){
System.out.println("后");
}
};
publicstaticfinalDirection3LEFT=newDirection3("左"){
@Override
publicvoidshow(){
System.out.println("左");
}
};
publicstaticfinalDirection3RIGHT=newDirection3("右"){
@Override
publicvoidshow(){
System.out.println("右");
}
};
//构造私有,别人就不能无限的创建了
//privateDirection2(){
//}
//加入成员变量,并去掉无参构造
privateStringname;
privateDirection3(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
//加入抽象方法
publicabstractvoidshow();
}
DirectionDemo.java
packagecn.itcast_01;
publicclassDirectionDemo{
publicstaticvoidmain(String[]args){
Directiond=Direction.FRONT;
System.out.println(d);//cn.itcast_01.Direction@175078b
System.out.println("------------------------------------");
Direction2d2=Direction2.FRONT;
System.out.println(d2);//cn.itcast_01.Direction2@11563ff
System.out.println(d2.getName());
d2=Direction2.RIGHT;
System.out.println(d2);
System.out.println(d2.getName());
System.out.println("------------------------------------");
Direction3d3=Direction3.FRONT;
System.out.println(d3);
System.out.println(d3.getName());
d3.show();
d3=Direction3.LEFT;
System.out.println(d3);
System.out.println(d3.getName());
d3.show();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 面向 对象 基础 增强