精华内容
下载资源
问答
  • jdk1.8接口的新特性
    2019-11-14 09:58:29

    接口定义

    1、接口是用interface声明的,用来约束类的方法;
    2、接口没有构造函数,无法直接通过new创建,只可以被实现;
    3、接口可以被多实现;
    4、接口之间可以多继承;
    5、接口里的变量都是默认 public static final修饰的

    1.8以前

    • 接口中的方法都是默认public abstract修饰的,不可用其他修饰符
    • 接口中所有方法都不可实现
    public interface StandardInterface {
        int value=1;
        void test();
    }
    

    1.8以后

    • 接口中的抽象方法都是默认public abstract修饰的
    • 接口中可以存在非抽象方法,包括静态方法和非静态方法
    • 静态方法默认是public修饰的,不可用其他修饰符
    • 非静态方法必须用default修饰,代表接口中的默认实现
    public interface StandardInterface {
        int value = 1;
        void test();
        default void testDefault() {
        }
        static void testStatic() {
        }
    }
    

    与抽象类的区别

    抽象类是用abstract来声明的;抽象类只可以被单继承;抽象类的属性和方法修饰符不被限制;抽象类可以
    存在静态代码块,接口不行。

    更多相关内容
  • jdk1.8新特性

    千次阅读 2022-05-12 12:53:47
    文章目录jdk1.8新特性一、 Lambda 表达式二、 方法引用三、函数式接口四、 接口允许定义默认方法和静态方法五、Stream API六、日期/时间类改进七、Optional 类八、 Java8 Base64 实现 jdk1.8新特性 一、 ...


    jdk1.8 的新特性


    一、 Lambda 表达式

    Lambda 允许把函数作为一个方法的参数。

    new Thread (()-> System.out.println ("abc" ) ) .start() ;
    
    

    二、 方法引用

    方法引用允许直接引用已有 Java 类或对象的方法或构造方法。

    Arraylist<String> list = new ArrayList<>();
    	list.add("a");
    	list.add("b");
    	list.forEach(System.out::println);
    	//将 System.out::println 方法作为静态方法来引用。
    

    三、函数式接口

    有且仅有一个抽象方法的接口叫做函数式接口,函数式接口可以被隐式转换为Lambda 表达式。通常函数式接口上会添加@FunctionalInterface 注解

    四、 接口允许定义默认方法和静态方法

    从 JDK8 开始,允许接口中存在一个或多个默认非抽象方法和静态方法。

    五、Stream API

    新添加的 Stream API(java.util.stream)把真正的函数式编程风格引入到 Java中。这种风格将要处理的元素集
    合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。

    List<String> list = Arrays.asList("abc","","abc","bc","wqer");
    	list.stream()//获取集合的流对象
    		.filter(string -> !string.isEmpty())//对数据进行过滤操作,过滤掉空字符串
    		.distinct()//去重
    		.forEach(a -> System.out.println(a));
    

    六、日期/时间类改进

    之前的 JDK 自带的日期处理类非常不方便,我们处理的时候经常是使用的第三方工具包,比如 commons-lang
    包等。不过 JDK8 出现之后这个改观了很多,比如日期时间的创建、比较、调整、格式化、时间间隔等。
    这些类都在 java.time 包下,LocalDate/LocalTime/LocalDateTime。

    七、Optional 类

    Optional 类是一个可以为 null 的容器对象。如果值存在则 isPresent()方法会返回 true,调用 get()方法会返回该对象。

    String string ="abc";
    
    Optional<String> optional = Optional.of(string);
    boolean present = optional.isPresent();
    String value = optional.get();
    System.out.println(present+"/"+value);
    

    八、 Java8 Base64 实现

    Java 8 内置了 Base64 编码的编码器和解码器。

    展开全文
  • JDK1.8之前,接口中只有两部分内容: (1)常量:固定修饰符public static final (2)抽象方法:固定修饰符public abstract 在JDK1.8之后,接口新增非抽象方法 为什么接口中药增加默认方法和静态方法 如果接口中...

    接口的组成

    在JDK1.8之前,接口中只有两部分内容:
    (1)常量:固定修饰符public static final
    (2)抽象方法:固定修饰符public abstract
    在JDK1.8之后,接口新增非抽象方法:default方法和static方法

    为什么接口中药增加默认方法和静态方法

    如果接口中只能定义抽象方法,当修改接口时,该接口的所有实现类都会受到影响,为了减小这种影响,所以才采用了这种方式

    默认方法:被public default修饰的默认方法

    • 接口中public修饰符可以省略,default修饰符必须写
    • 接口的实现类中可以重写default方法,重写时default修饰符必须不能加
    • 接口的默认方法只能通过接口实现类或实现类的实例对象进行调用,调用方式见下面的代码:
    @FunctionalInterface
    public interface MyInterface {
        void go();
        
        default void defaultTest() {
            System.out.println("default方法");
        }
    }
    
    class MyInterfaceImpl implements MyInterface {
        @Override
        public void go() {
            System.out.println("抽象方法实现");
            
        }
    
        @Override
        public void defaultTest() {
        	System.out.println("覆写接口默认方法");
            //super.defaultTest(); 不可以直接调用默认方法
            MyInterface.super.defaultTest();//接口实现类的重写方法中,super不能直接调用接口默认方法,只能通过接口名.super.默认方法    
        }
    }
    public abstract class MainDemo{
        public static void main(String[] args) {
            MyInterface myInterface=()-> System.out.println("122");
            myInterface.defaultTest(); 
        }
    }
    

    静态方法:被public static修饰的静态方法

    public interface MyInterface {
        static void staticTest() {
            System.out.println("我是接口的静态方法");
        }
    }
    class MyInterfaceImpl implements MyInterface {
        //注意:这里不是重写接口的静态方法,只是定义了一个静态方法相同签名的方法而已
        static void staticTest() {
            System.out.println("我和接口的静态方法是两个不同的方法,接口静态方法不能被继承");
        }
    }
    class Demo {
        public static void main(String[] args) {
            MyInterface.staticTest();
        }
    }
    
    • 接口中public修饰符可以省略,static修饰符必须写
    • 接口的静态方法不能被接口实现类继承,只能通过如下方式调用:接口名.静态方法
    • 接口的实现类中可以写一个与静态方法相同的静态方法,互不影响
      注意:
      (1)方法的重写是对实例方法来说的,静态方法不存在重写的概念,因为静态方法是属于类级别的方法,所有实例对象都拥有该方法。
      (2)类的静态方法可以被继承,但接口的静态方法不能被继承,只能通过接口名.静态方名 进行调用

    接口易错问题

    • 当继承的父类和接口有相同签名的方法时,优先使用父类的方法,接口实现类中因为继承了父类的方法,甚至都可以不写重写该接口的方法
    public interface MyInterface {
        void go();
    }
    class MyInterfaceImpl extends Father implements MyInterface {
        
    }
    class Father {
        public void go() {
            System.out.println("我是父类");
        }
    }
    
    • 当接口的父接口中也有同样的默认方法时,就近原则调用子接口的方法
    • 当多个接口中有相同的方法签名,且被同一个类实现时,必须在实现类中通过重写方法解决冲突问题,重复方法中可以通过 接口名.super.方法名()的方式调用接口中的各默认方法

    接口和抽象类的区别

    • 接口使用interface修饰,抽象类使用abstract修饰
    • 接口可以继承多个接口,抽象类是单继承
    public interface MyInterface extends Runnable, RandomAccess {
    }
    
    • 一个类可以实现多个接口,但只能继承一个抽象类
    • JDK1.8之前,接口中必须只能有抽象方法,不能有方法体
      JDK1.8开始,接口中也可以有静态方法和默认方法,但接口的静态方法不能被继承,而抽象类的静态方法可以被继承
    展开全文
  • JDK1.8接口新特性

    2021-04-23 19:07:08
    JDK1.8接口新特性 JDK7及其之前 1、接口的变量都是public final static 全局静态常量,无变化。 2、接口中都是抽象abstract方法,不能有static方法(因为abstract和static、final、private不能共存) JDK...

    JDK1.8的接口新特性

    JDK7及其之前
    
    1、接口的变量都是public final static 全局静态常量,无变化。
    
    2、接口中都是抽象abstract方法,不能有static方法(因为abstract和static、final、private不能共存)
    
    
    
    JDK1.8及其之后
    
    1、接口中可以添加抽象方法(static),实现类不能重写,只能通过接口名调用。
    
    2、如果子类中定义了相同名字的静态方法,那就是完全不同的方法了,直接从属于子类。可以通过
    变量名直接调用。
    
    3、接口中可以添加非抽象方法(default),实现列可以重写,只能通过对象名来调用
    
    4、实现类可以直接使用default方法,可以重写default,但是必须去掉default。
    
    5、上级接口中default方法的调用:MyInterface.super.method2()
    
    
    
    提供非抽象方法的目的
    
    1、为了解决实现该接口的子类代码重复问题
    
    2、为了既有的的成千上万的Java类库增加的新功能,且不必对这些类重新进行设计。
    public interface MyInterface {
        public static final double PI = 3.14;
        public abstract void method1();
        public static void method2(){
            System.out.println("JDK1.8中的非抽象方法有两种,一种是static的");
        }
        public default void method3(){
            System.out.println("JDK1.8中的非抽象方法有两种,一种是default的");
        }
    
        public static void main(String[] args) {
            MyInterface.method2();
        }
    }
    
    public class MyClass implements MyInterface{
    
        @Override
        public void method1() {
            System.out.println("接口中的抽象方法,子类必须实现");
        }
    
        @Override
        public void method3() {
            MyInterface.method2();
            MyInterface.super.method3();
            System.out.println("重写接口中default方法,须将default去掉");
        }
    
        public static void main(String[] args) {
            MyInterface mi = new MyClass();
            mi.method1();
            MyInterface.method2();
            mi.method3();
        }
    }

    运行代码如下:

    展开全文
  • JDK1.8新特性接口

    2021-11-25 12:22:12
    JDK1.8之前:接口类只能定义方法名,返回类型和参数列表,不能有方法体。接口提供了规范,就像肯德基...JDK1.8中使用两个概念扩展了接口的含义:默认方法和静态方法,也就是说接口中可以有方法的具体实现。 ...
  • jdk1.8新特性.doc

    2020-04-01 13:23:33
    本文主要介绍了JDK1.8版本中的一些新特性,仅供参考。 jdk1.8新特性知识点: 1、Lambda表达式 2、函数式接口 3、方法引用和构造器调用 4、Stream API 5、接口中的默认方法和静态方法 6、新时间日期API
  • JDK1.8 接口新特性

    千次阅读 2018-12-22 10:20:21
    JDK1.8中对接口的一些改动。 函数式接口的注解@FunctionalInterface 接口内的default 方法和static 方法 函数式接口的概念:只有一个抽象方法的接口,其中抽象接口接口名不能和Object中的方法重名。 若...
  • JDK1.8 新特性(全)

    2021-09-20 14:51:01
    JDK1.8 新特性 本文主要介绍了JDK1.8版本中的一些新特性,乃作者视频观后笔记,仅供参考。 jdk1.8新特性知识点: Lambda表达式 函数式接口 方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期...
  • 概述 对于只有一个抽象方法的接口,需要这种接口的对象,就可以提供一个lambda表达式。这种接口称为函数式接口...JDK1.8常用函数式接口 函数式接口 参数类型 返回类型 抽象方法名 描述 其他方法 Rnnnable 无
  • JDK1.8接口特性对比

    2021-03-30 14:42:45
    JDK1.8之前的接口特性: 1.接口中的变量都是静态常量(public static final),必须显式初始化 2.接口中的所有方法默认都是public abstract 3.接口没有构造方法,不可以被实例化,但可以被实现 4.实现类必须实现接口...
  • JDK1.8新特性【之】接口默认方法、静态方法 1.接口默认方法、静态方法 2.代码示例(注意 类优先、冲突解决) 《目录:Java基础》 《目录:JDK1.8新特性》 《幕》 1.接口默认方法、静态方法 接口默认方法、静态方法 ...
  • JDK1.8新特性

    2022-01-23 18:30:01
    函数式接口 *方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期API Lambda表达式 Lambda表达式作为Java8语法糖,允许将函数作为参数传入到方法中,但是被传入的函数必须是函数式接口。 ...
  • JDK1.8新特性:JDK1.8究竟有那些新特性JDK1.8概述 JDK1.8,又称之为Java 8(我习惯叫它为JDK1.8,后续统一叫做JDK1.8),是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布,它支持函数式编程,的...
  • JDK1.8新特性详解

    千次阅读 2021-03-13 22:21:18
    现在开发用的最多的就是jdk1.8;因为它具备很多优点: 1、速度更快 由于底层结构和JVM的改变,使得JDK1.8的速度提高。 2、代码更少(增加了的语法 Lambda 表达式) 增加新特性Lambda表达式的内部类改造,使得代码...
  • jdk1.8新特性

    2022-02-04 20:19:57
    本质:作为接口的实例对象(函数式接口,有且仅有一个抽象方法) 1.举例:(o1,o2) -> Integer.compare(o1,o2);2.格式: ->:Lambda操作符或箭头操作符 ->左边: Lambda形参列表(其实就是接口中的抽象方法的...
  • JDK1.8新特性知识详解

    千次阅读 2022-03-23 11:36:47
    jdk 1.8 新特性知识详解
  • jdk1.8 新特性.docx

    2020-05-27 14:58:55
    jdk1.8新特性知识点: Lambda表达式 函数式接口 *方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期API
  • JDK 1.8 新特性

    2022-05-19 15:22:52
    Java在1.8版本的时候,引入了Lambda表达式,Lambda表达式指的是应用在单一抽象方法接口环境下的一种简化定义形式,可以用于解决匿名内部类的定义复杂问题。
  • 1.Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 2.Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 3.使用 Lambda 表达式可以使代码变的更加简洁紧凑。 以下是lambda...
  • JDK1.8 新特性

    2021-12-28 13:44:12
    jdk1.8新特性知识点: Lambda表达式 函数式接口 *方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期API
  • JDK1.8接口新特性

    2020-08-30 17:43:28
    JDK1.8之前接口: 常量(必须赋值) 抽象方法abstract(和final static private三个关键字冲突) interface Inter { //int a ; //编译报错 常量必须要赋值不能使用默认值。 int a = 10; // 前面有默认修饰符 ...
  • 1、lambda是什么? lambda 是一种编程思想,用于简化代码书写而...a、函数式接口,指的是接口内只有一个方法,在使用这个方法的时候我们可以使用lambda来进行。 b、基于线程的创建来使用lambda,如 Runable r = ()
  • jdk1.8新特性: 1.Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 2.新增lambda表达式 3.提供函数式接口 4.Java 8 允许你使用关键字来传递方法或者构造函数引用 5.我们可以直接在...
  • JDK1.8新特性【之】函数式接口(内置、自定义、参数传递) 1.函数式接口 2.形式1:只存在一个抽象方法 3.形式2:只存在一个必须实现的抽象方法 4.形式3:参数任意定制 5.应用示例 5.1.内置的四种类型应用(消费、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,790
精华内容 11,916
关键字:

jdk1.8接口的新特性