第五部分 Java新特性

5.1注解

JDK中提供了三个内置注解@Override、@Deprecated、@SuppressWarnings

5.1.1 准确覆写

提供一个标识符,表明下面的方法是一个覆写方法,一旦覆写失败则会直接认为是语法错误。

package www.bit.java.testdemo;

class Person {

    @Override // 追加了此注解后将明确的表示该方法是一个覆写的方法,如果覆写错误会出现语法错误

    public String tostring() {

        return "ABCED" ;

    }

}

public class TestDemo {

    public static void main(String[] args) {

        System.out.println(new Person());

    }

}

在很多开发工具中,覆写的方法会帮你直接添加@Override标记。

5.1.2 声明过期

在多个版本更新中,如果发现后续你的某些方法不再使用,但是为了保持和前面版本的兼容性而不能删除的时候,则可以加入@Deprecated表明这个方法不建议使用,但是即使你使用了也不会出错。

5.1.3 压制警告

当调用了某些操作可能产生问题的时候就会出现警告进行,但是警告信息并不是错,这个时候又不想总提示警告,这个时候可以使用压制警告。

5.2 lambda表达式

JDK1.8 开始支持lambda表达式。

语法:(参数)->单行语句;或者 (参数) -> {} ;

lambda表达式使用了函数式编程思想,简单来说就是定义一个函数式编程接口。然后再其它方法调用的时候可以简化操作。定义函数式编程接口的时候要使用@FunctionalInterface注解来说明,此时这个接口中就只能拥有一个方法。

@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法

interface IMessage {

    public void print() ; // 这是一个接口,接口中的抽象方法必须由子类覆写。

}

 

public class TestDemo {

    public static void main(String[] args) {

        // 函数式编程的使用,目的还是输出一句话

        IMessage message = () -> System.out.println("Hello World");

        message.print();

    }

}

 

5.3 方法引用

JDK1.8开始引入方法引用的概念,类似于别名,常与函数式编程使用。方法引用的类型有四种形式:

1. 引用静态方法:类名称::static 方法名称 ;

2. 引用某个对象的方法:实例化对象 :: 普通方法 ;

3. 引用某个特定类的方法: 类名称 :: 普通方法 ;

4. 引用构造方法: 类名称 :: new 。

package www.bit.java.testdemo;

@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法

interface IUtil<P,R> {

    public R switchPara(P p) ;

}

 

public class TestDemo {

    public static void main(String[] args) {

        IUtil<Integer,String> iu = String :: valueOf ; //进行方法引用

        String str = iu.switchPara(1000) ; // 相当于调用了String.valueOf(1000)

        System.out.println(str.length());

    }

}

 

5.4 枚举

enum(枚举)本质上相当于Class定义的类,继承了java.lang.Enum父类。

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

1.构造方法:protected Enum(String name, int ordinal)

2.取得枚举名字:public final String name()

3.取得枚举序号:public final int ordinal()

4.取得所有的枚举数据:values()

 

enum Sex {

    MALE("男"),FEMALE("女") ;

    private String title ;

    private Sex(String title) {

        this.title = title ;

    }

    @Override

    public String toString() {

        return this.title ;

}

}

class Person {

    private String name ;

    private int age ;

    private Sex sex ;

    public Person(String name, int age, Sex sex) {

        super();

        this.name = name;

        this.age = age;

        this.sex = sex;

    }

    @Override

    public String toString() {

        return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";

    }

   

}

public class TestDemo {

    public static void main(String[] args) {   

        Person per = new Person("张三", 20, Sex.MALE) ;

        System.out.println(per);

    }

}

 

 

5.5 接口定义加强

对于接口来说,一旦缺少了某个方法的声明,那么和他相关的子类就需要实现这个方法,当这个类数量特别大的时候,编程就变得很麻烦。在JDK1.8之后,可以使用两种新的结构:

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

可以使用static来定义静态方法,通过接口名就可以调用

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 TestDemo {

    public static void main(String[] args) {

        IMessage message = IMessage.getInstance() ;

        System.out.println(message);

        message.print();

        message.fun();

    }

}

 

5.6 内建函数式接口

java.util.function 实际上函数式编程分为以下四种接口:

1. 功能型函数式接口:public interface Function<T, R> R apply(T t);

2. 供给型函数式接口: public interface Supplier T get();

3. 消费型函数式接口:public interface Consumer void accept(T t);

4. 断言型接口:public interface Predicate boolean test(T t);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值