java学习笔记(十)-- java新特性 (枚举 & 注解 & 接口定义加强 & Lambda表达式)

本文深入探讨Java中的枚举(enum)与注解(annotation)特性,解析枚举的多例模式、Enum类的使用及枚举对象的声明规则。同时,介绍了三种注解类型:准确覆写(@Override)、声明过期处理(@Deprecated)和压制警告(@SuppressWarnings),并讲解了JDK1.8中接口的新特性及Lambda表达式的应用。
摘要由CSDN通过智能技术生成

枚举 (enum)

高级的多例模式

java中枚举使用enum关键字定义枚举

枚举就是一种多例设计模式

enmu Color{

    RED,BLUE,GREEN;    

}

enum Color{
    RED,BULE,GREEN;
}
public class Test {
    public static void main(String[] args) {
        System.out.println(Color.GREEN);
    }
}

1 . 枚举类(Enum类)

JDK 1.5 新增的enum枚举结构并不是新的结构。

使用enum定义的枚举本质上是一个类,默认继承java.lang.Enum父类。

取得枚举名称:

    public fianl String name()

取得枚举编号:

    public final int ordinal()

取得所有枚举对象(静态方法)

    枚举类.values(): Enum[]

enum Color{
    RED,BULE,GREEN;
}
public class Test {
    public static void main(String[] args) {
        System.out.println(Color.GREEN);
        System.out.println(Color.GREEN.ordinal()+"="+Color.GREEN.name());
        for(Color temp:Color.values()){
            System.out.println(temp.ordinal()+"="+temp.name());
        }
    }
}

面试:请解释enum与Enum区别:

enum是一个关键字,使用enum定义的枚举类本质上就相对于一个类继承了Enum这个抽象类而已。

 

2 . 枚举中定义其他结构,枚举对象必须放在首行声明(语法要求)

构造方法使用private修饰私有化(相当于多例模式,构造方法必须私有化,)

enum Color{
    RED("红色"),BULE("蓝色"),GREEN("绿色");
    private String title;
    private Color(String title){
        this.title=title;
    }
    @Override
    public String toString() {
        return this.title;
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(Color.GREEN);
    }
}

枚举可以实现接口,此时枚举中的每个对象都成为接口对象;

interface IColor{
    public String getColor();
}
enum Color implements IColor{
    RED("红色"),BULE("蓝色"),GREEN("绿色");
    private String title;
    private Color(String title){
        this.title=title;
    }
    @Override
    public String toString() {
        return this.title;
    }
    @Override
    public String getColor() {
        return this.title;
    }
}
public class Test {
    public static void main(String[] args) {
        IColor iColor=Color.GREEN;
        System.out.println(iColor.getColor());
    }
}

 

注解(Annotation)

1 . 准确覆写(@Override)

检查当前类中的覆写方法与父类定义的方法是否相同,如果有任何一个地方不相同,编译报错

2 . 声明过期处理(@Deprecated)

原有类或者方法在旧版本没有问题,但是在新版本不推荐使用,可以加上@Deprecated注释,明确表示不建议用户使用此类,方法

package www.Dyson.java;
class Person{
    @Deprecated //表明该方法已经不建议使用,但是使用了也并不会出错
    public Person(){};
    public Person(String name){};
}
public class Test {
    public static void main(String[] args) {
        Person per1=new Person(); //标记处过期方法
        Person per2=new Person("Dyson");
    }
}

3 . 压制警告(@SuppressWarnings)

当调用某些操作可能产生问题的时候就会产生警告信息,警告信息并不是异常(Exception)

使用之前:

使用之后:


 

JDK1.8接口定义加强(了解)

JDK1.8开始接口允许出现以下两种方法

1 . 可以使用default来定义普通方法,需要同过对象来调用

2 . 可以使用static来定义静态方法,同过接口名就可以定义

package www.Dyson.java;
interface IMessage{
    //追加普通方法
    public default void fun(){
        System.out.println("Hello IMessage");
    }
    //定义一静态方法,由接口名称直接调用
    public static IMessage getInstance(){
        return new MessageImpl();
    }
        public void print();
}
class MessageImpl implements IMessage{
    @Override
    public void print() {
        System.out.println("Hello MessageImpl");
    }
}
public class Test {
    public static void main(String[] args) {
        IMessage message=IMessage.getInstance();
        System.out.println(message);
        message.print();
        message.fun();
    }
}

函数式编程 Lambda表达式

要是用函数式编程有一个前提:接口必须有一个方法。如果接口中存在两个以上的方法,无法使用函数式编程!

如果现在某个接口为了函数式编程而生,@FunctionalInterface定义在接口上,检查此接口是否只存在一个方法

lambda表达式语法:

单行无返回值,单行有返回值:

()->  ... 方法代码;

多行有返回值:

()->  {

        ...

        ...

        return 返回值语句;

  }

范例:传统面向对象开发

package www.Dyson.java;
interface IMessage{
    public void print();
}
public class Test {
    public static void main(String[] args) {
        IMessage message=new IMessage(){ //匿名内部类
            @Override
            public void print(){ //必须编写完整语法
                System.out.println("Hello world");
            }
        };
        message.print();
    }
}

范例:函数式编程

package www.Dyson.java;
interface IMessage{
    public void print();
}
public class Test {
    public static void main(String[] args) {
        IMessage message=()-> System.out.println("Hello world");
        message.print();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值