包装类
包装类的主要功能主要是针对基本数据类型的对象转换而实现的。在JDK0时就提供了八种包装类对应八种基本数据类型
可以发现在Java中包装类提供有两种类型:
对象型包装类:Boolean、Character数值型包装类:Byte、Short、Integer、Long、Float、Double
Number是一个抽象类,以后只要是看见了Number都应该明确的表示它是一个数字的概念,这个类定义有如下方法:
public byte byteValue() | 普通 | 从包装类中获取byte数据 |
public short shortValue() | 普通 | 从包装类中获取short数据 |
public abstract int intValue() | 普通 | 从包装类中获取int数据 |
public abstract long longValue() | 普通 | 从包装类中获取long数据 |
public abstract float floatValue() | 普通 | 从包装类中获取float数据 |
public abstract double doubleValue() | 普通 | 从包装类中获取double数据 |
装箱与拆箱
数据装箱:将基本数据类型保存到包装类中,一般可以用构造方法完成
Integer类:publicInteger(intvalu;Double类:publicDouble(doublevalu;Boolean类:publicBoolean(booleanvalu;
数据拆箱:从包装类中获取基本数据类型
数值型包装类已经有Number类定义了拆箱方法Boolean型:publicbooleanbooleanValue();
public class JavaDemo {//int和Integer为例
public static void main(String args[]) {
Integer obj = new Integer(10); // 装箱. .
int num = obj.intValue() ;//拆箱。
System.out.println(num*num);
}
}
而JDK5之后提供了自动的拆箱与装箱操作
public class JavaDemo{
public static void main (String args []) {
Integer obj = 10 ; //自动装箱,此时不再关心构造方法了
int num=obj;//自动拆箱
obj ++ ; //包装类对象可以直接参与数学运算
System.out.println(num *obj) ; // 直接参 与数学运算
}
}
注意一点:在进行包装类相等判断的时候使用equals()完成,而包装类本身也需要考虑占位的长度,如果不超过一位的内容,可以使用“==”判断。
Integerx=128;Integery=128;Systeout.println(x==y)//输出打印falseSysteout.println(x.equals(y));//输出打印true
接口
抽象类与普通类相比最大的优势在于:可以实现对子类覆写方法的控制,但是在抽象类里面可能依然会保留有一些普通方法,而普通方法里面可能会涉及到一些安全或者隐私的操作问题,那么这样在进行开发的过程之中,如果想要对外部,隐藏全部的实现细节,则就可以通过接口来进行描述。接口可以理解为一个纯粹的抽象类(最原始的定义接口之中是只包含有抽象方法与全局常量的),但是从JDK8之后开始犹豫引入了Lambda表达式的概念,所以接口的定义也得到了加强,除了抽象方法与全局常量之外,还可以定义普通方法或静态方法。如果从设计本身的角度来讲,接口之中的组成还是应该以抽象方法和全局常量为主。
接口的定义
在Java中主要使用interface关键字来进行定义
//由于类名称与接口名称的定义要求相同,所以为了区分普通类在接口类名称前一般加一个“I”interfaceIMessage{//定义了一个接口publicstaticfinalStringINFO=“www.scdcom”;//全局常量publicabstractStringgetInfo();//抽象方法}
使用接口的原则如下:
接口需要被子类实现,一个子类可以实现多个父接口子类那么一定要覆写接口之中的全部抽象方法接口对象可以利用子类对象的向上转转型进项实例化
interface IMessage {//定义了一个接口
public static final String INFO = 'www.csdn.com' ; // 全局常量
public abstract String getInfo() ; // 抽象方法
}
interface IChannel {//定义了另一个接口
public abstract boolean connect() ; //定义抽象方法
}
class MessageImpl implements IMessage,Ichannel { //实现了接口
public String getInfo() {
if(this.connect()) {
return '通道建立成功,得到一个秘密消息';
}
return '有内鬼,终止通道建立';
}
public boolean connect () {
System.out.println('消息发送通道正在建立。') ;
return true ;//或者false
}
}
public class JavaDemo {
public static void main (String args[]) {
IMessage msg = new MessageImpl ();
System.out.println(msg.getInfo() );
System.out.println(IMessage.INFO); //直接输出全局常量
}
}
此时MessageImpl子类的对象可以任意的实现父接口的转换。由于MessageImpl子类实现了Message与IChannel两个接口,所以这个子类可以是这两个接口任意一个接口的实例,那么就可以表示此时这两个接口实例之间是可以转换的。
publicclassJavaDemo{publicstaticvoidmain(Stringargs[]){IMessagemsg=newMessageImpl();IChannelchl=(IChannemsg;Systeout.println(chconnect());//可以实现转化}}
在java程序里面接口是不允许去继承父类的,所以接口绝对不会是Object的子类,但是根据之前分析可以发现,MessageImpl是Obiect子类,所以接口一定可以通过Obiect接收。
publicclassJavaDemo{publicstaticvoidmain(Stringargs[]){IMessagemsg=newMessageImpl();Objectobj=msg;//向上转型IChannelchan=(IChanneobjSystemoutprintln(chaconnect());}}
抽象类实现一个接口,一般是一个普通类去继承这个抽象类,然后这个普通类再去实现接口
接口的多继承:接口无法继承一个类,但却可以继承多个接口接口的使用:
进行标准设置表示一种操作的能力暴露远程方法视,这个一般都在RPC分布式开发中使用
接口定义的加强:可以在接口中定义普通方法和static方法,普通方法必须追加default的声明(一种挽救手段)
工厂设计模式
在进行子类扩充的时候只需要修改Factory程序类计科实现:
class Bread implements IFood{//定义一种食物
public void eat() {
Sys tem . out . println('吃面包。') ;
}
}
class Milk implements IFood { //定义一-种食物
public void eat() {
System . out . println('喝牛奶。') ;
}
}
class Factory {
public static IFood getInstance(String ClassName) {
if ('bread' . equals(className) ) {
return new Bread () ;
} else if ('milk' . equals(className)) {
return new Milk() ;
} else {
return null ;
}
}
}
public class JavaDemo {
public static void main (String args []) {
IFood food = Factory.getInstance(args[0]) ; //初始化参数
food.eat() ;// 吃面包
}
}
在本程序之中,客户端程序类与IFood接口的子类没有任何的关联,所有的关联都是通过Factory类完成的,而在程序运行的时候可以通过初始化参数进行要使用的子类定义。
代理设计模式
代理设计模式的主要功能是可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上,例如:肚子饿了,思考的是如何可以吃到东西。
interface IEat {
public void get();
}
class EatReal implements IEat {
public void get() {
System.out.println('[真实主题]得到一份食物,而后开始品尝美食');
}
}
class EatProxy implements IEat { // 服务代理
private IEat eat ; //为吃而服务
public EatProxy(IEat eat) { //一定要有一个代理项
this.eat = eat ;
}
public void get(){
this.prepare();
this.eat.get();
this.clear();
}
public void prepare() { //准备过程
System.out.println(' [代理主题] 1、精心购买食材。') ;
System.out.println(' [代理主题] 2、小心的处理食材。') ;
}
public void clear() {
System.out .println(' [代理主题] 3、收拾碗筷。') ;
}
}
public class JavaDemo {
public static void main (String args []) {
IEat eat = new EatProxy (new EatReal()) ;
eat.get() ;
}
}
代理设计模式的主要特点是:一个接口提供有两个子类,其中一个子类是真实业务操作类,另外一个主题是代理业务操作类,没有代理业务操作,真实业务无法进行。
抽象类和接口的区别
定义关键字 | abstract class抽象类名称{} | interface接口名称{} |
组成 | 构造、普通方法、静态方法、全局常量、普通成员、static方法 | 抽象方法、全局常量、普通方法、static 方法 |
权限 | 可以使用各种权限定义 | 只能够使用public |
子类使用 | 子类通过extends关键字可以继承一个抽象类 | 子类使用implements关键字可以实现多个接口 |
两者关系 | 抽象类可以实现若干个接口 | 接口不允许继承抽象类,但是允许继承多个父接口 |
使用:
抽象类或接口必须定义子类;子类一定要覆写抽象类或接口中的全部抽象方法:。通过子类的向上转型实现抽象类或接口对象实例化。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点