JDK8新特性详细介绍
函数式编程
面向对象强调“一切皆对象”,如果想要做事情,必须要找到对象来做。函数式编程思想强调“做什么”,而不是“怎么做”。
普通的开启线程
// 匿名内部类对象 Runnable task = new Runnable() { @Override public void run() { System.out.println("乌鸦坐飞机"); } }; new Thread(task).start();
更多java相关免费视频教程:java在线教程
函数式编程开启线程
new Thread(() -> System.out.println("龙卷风摧毁停车场")).start();
前面的小括号:方法参数,没有参数时就写(),箭头指向后面要做的事情,箭头后面就好比是方法体大括号,代表具体要做的内容。
Lambda表达式
Lambda表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。
三要素:参数、箭头 、代码
格式:(参数类型 参数名称) -> { 一些代码 }
使用Lambda表达式的前提:必须要有接口并且接口中有且只有一个抽象方法
演示:编写一个Cook接口,接口中有一个makeFood()方法
public static void main(String[] args) { method(() -> { System.out.println("闪刀启动!"); }); } private static void method(Cook cook) { cook.makeFood(); }
Lambda表达式省略规则:
参数类型可以省略。但是只能同时省略所有参数的类型,或者干脆都不省略如果参数有且仅有一个,那么小括号可以省略如果大括号内的语句有且仅有一个,那么无论有没有返回值,return、大括号、分号都可以省略。
public static void main(String[] args) { method((a, b)-> a + b); } private static void method(Calculator calculator) { int result = calculator.sum(1234, 9876); System.out.println(result); }
在new一个接口时,也可以使用lambda表达式来代替匿名内部类
Runnable task = () -> System.out.println("闪刀启动!"); new Thread(task).start();
函数式接口
接口当中有且仅有一个抽象方法,叫做函数式接口。
JDK8中新增了注解@FunctionalInterface
,用于检测一个接口是否为函数式接口。如果不是函数式接口,编译时会报错。@FunctionalInerface注解是可选的,就算不用这个注解,只要保证接口满足函数式接口的定义要求,也一样是函数式接口。
@FunctionalInterface public interface MyInterface { void method(); }
方法引用
Printer printer = (str) -> System.out.println(str);
这段代码实际上可以简写。
只要是可推导的,就是可引用的,因此传参其实并没有意义,因此这里其实可以使用方法引用来简写 System.out::println
从java8开始,引入了一个全新的运算符,方法引用符(两个冒号连着写),所在的表达式就是一个方法引用,方法引用和Lambda本质是完全一样的,目的就是简化Lambda表达式的写法。
Lambda的写法:s->System.out.println(s)
方法引用写法:System.out::println
两种写发完全等效
public static void main(String[] args) { method(System.out::println); } private static void method(Printer printer) { printer.print("hello"); }
接口
default方法
接口本来是两个抽象方法,现在需要变成三个抽象方法,这个时候它的实现类也需要实现新的方法。
当实现类太多时,操作起来很麻烦,JDK之前是使用开闭设计模式:对扩展开放,对修改关闭。即:创建一个新的接口,继承原有的接口,定义新的方法,但是这样的话,原本的那些实现类并没有新的方法,这时候可以使用接口默认方法。
关键字使用default进行修饰, 方法需要方法体。这样的方法所有的子类会默认实现(不用自己写),如果想要覆盖重写,也可以在实现类中覆盖重写
/** * 从java8开始,接口当中允许定义default默认方法 * 修饰符:public default(public可以省略,default不能省略) */ public interface MyInterface { void method1(); void method2(); default void methodNew() { System.out.println("接口默认方法执行"); } }
注意:接口中的default方法相当于是一个新的关键字,和四种修饰符的“default”并非一个概念。
活用default关键字,可以使程序达到“多继承”的效果。
static方法
从java8开始,接口当中允许定义静态方法,用法与一般类的静态方法相同。
public interface Animal { void eat(); static Animal getAnimal() { return new Cat(); } }
流式操作
流式处理给开发者的第一感觉就是让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。
比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现:
对于一个nums的集合:
List<Integer> evens = new ArrayList<>(); for (final Integer num : nums) { if (num % 2 == 0) { evens.add(num); } }
通过java8的流式处理,我们可以将代码简化为:
List<Integer> evens = nums.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
先简单解释一下上面这行语句的含义,stream()操作将集合转换成一个流,filter()执行我们自定义的筛选处理,这里是通过lambda表达式筛选出所有偶数,最后我们通过collect()对结果进行封装处理,并通过Collectors.toList()指定其封装成为一个List集合返回。
常用操作案例:
//初始化list集合 List<String> list = new ArrayList<String>(); list.add("测试数据1"); list.add("测试数据2"); list.add("测试数据3"); list.add("测试数据12"); //使用λ表达式遍历集合 list.forEach(s -> System.out.println(s)); //结合Predicate使用和过滤条件筛选元素 Predicate<String> contain1 = n -> n.contains("1"); Predicate<String> contain2 = n -> n.contains("2"); //根据条件遍历集合 list.stream().filter(contain1).forEach(n -> System.out.println(n)); list.stream().filter(s -> contain1.test(s)).forEach(s -> System.out.println(s)); list.stream().filter(contain1.and(contain2)).forEach(n -> System.out.println(n)); list.stream().filter(contain1.or(contain2)).forEach(n -> System.out.println(n)); //将过滤后的元素重新放到一个集合中 List<String> newList = list.stream().filter(contain1.and(contain2)).collect(Collectors.toList()); 集合中decimal求和 BigDecimal sum = list .stream() .map(Person::getAmount) .reduce(BigDecimal::add) .get(); //排序 , 也需要新的集合接收 List<Student> resultList = new ArrayList<Student>(); resultList = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList())
推荐java相关文章:java零基础入门
欢迎大家一起来学习!
Atas ialah kandungan terperinci JDK8新特性详细介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP8.3 dikeluarkan: Gambaran keseluruhan ciri baharu Memandangkan teknologi terus berkembang dan memerlukan perubahan, bahasa pengaturcaraan sentiasa dikemas kini dan dipertingkatkan. Sebagai bahasa skrip yang digunakan secara meluas dalam pembangunan web, PHP sentiasa bertambah baik untuk menyediakan pembangun alat yang lebih berkuasa dan cekap. Versi PHP 8.3 yang dikeluarkan baru-baru ini membawakan banyak ciri dan penambahbaikan baharu yang telah lama ditunggu-tunggu Mari kita lihat gambaran keseluruhan ciri baharu ini. Permulaan sifat bukan nol Dalam versi PHP yang lalu, jika harta kelas tidak diberikan nilai secara eksplisit, nilainya

Analisis mendalam tentang ciri baharu PHP8 untuk membantu anda menguasai teknologi terkini Seiring berjalannya waktu, bahasa pengaturcaraan PHP sentiasa berkembang dan bertambah baik. Versi PHP8 yang dikeluarkan baru-baru ini menyediakan pembangun dengan banyak ciri dan penambahbaikan baharu yang menarik, membawa lebih banyak kemudahan dan kecekapan kepada kerja pembangunan kami. Dalam artikel ini, kami akan menganalisis ciri baharu PHP8 secara mendalam dan memberikan contoh kod khusus untuk membantu anda menguasai teknologi terkini ini dengan lebih baik. Pengkompil JIT PHP8 memperkenalkan kompilasi JIT (Just-In-Time).

Ciri baharu php8 termasuk pengkompil JIT, potongan jenis, parameter bernama, jenis kesatuan, sifat, penambahbaikan pengendalian ralat, sokongan pengaturcaraan tak segerak, fungsi perpustakaan standard baharu dan sambungan kelas tanpa nama. Pengenalan terperinci: 1. Pengkompil JIT, PHP8 memperkenalkan pengkompil JIT, yang merupakan peningkatan prestasi yang penting Pengkompil JIT boleh menyusun dan mengoptimumkan beberapa kod pelaksanaan frekuensi tinggi dalam masa nyata, dengan itu meningkatkan kelajuan larian , PHP8 memperkenalkan fungsi inferens jenis, membenarkan pembangun menyimpulkan secara automatik jenis pembolehubah apabila mengisytiharkan pembolehubah, dsb.

[Tafsiran ciri baharu bahasa Go: Untuk menjadikan pengaturcaraan lebih cekap, contoh kod khusus diperlukan] Dalam beberapa tahun kebelakangan ini, bahasa Go telah menarik banyak perhatian dalam bidang pembangunan perisian, dan konsep reka bentuknya yang ringkas dan cekap telah menarik lebih banyak lagi. pemaju. Sebagai bahasa pengaturcaraan yang ditaip secara statik, bahasa Go terus memperkenalkan ciri baharu untuk meningkatkan kecekapan pembangunan dan memudahkan proses penulisan kod. Artikel ini akan memberikan penjelasan mendalam tentang ciri terbaharu bahasa Go dan membincangkan cara merasai kemudahan yang dibawa oleh ciri baharu ini melalui contoh kod tertentu. Pembangunan modular (GoModules) Bahasa Go daripada 1

Gambaran keseluruhan ciri baharu CSS3: Cara menggunakan CSS3 untuk mencapai kesan peralihan CSS3 ialah versi terbaru CSS Di antara banyak ciri baharu, yang paling menarik dan praktikal ialah kesan peralihan. Kesan peralihan boleh menjadikan halaman kami lebih lancar dan cantik semasa interaksi, memberikan pengguna pengalaman visual yang baik. Artikel ini akan memperkenalkan penggunaan asas kesan peralihan CSS3, dengan contoh kod yang sepadan. atribut transition-property: Tentukan kesan peralihan sifat CSS yang perlu dialihkan

Sambungan Redis baharu yang diperkenalkan dalam PHP8.1 Dengan perkembangan pesat Internet, sejumlah besar data perlu disimpan dan diproses. Untuk meningkatkan kecekapan dan prestasi pemprosesan data, caching telah menjadi bahagian yang sangat diperlukan. Dalam pembangunan PHP, Redis, sebagai sistem storan nilai kunci berprestasi tinggi, digunakan secara meluas dalam caching dan senario penyimpanan data. Untuk meningkatkan lagi pengalaman menggunakan Redis dalam PHP, PHP8.1 memperkenalkan sambungan Redis baharu Artikel ini akan memperkenalkan fungsi baharu sambungan ini dan menyediakan

Ciri-ciri baharu bahasa go ialah: 1. Modul Go, digunakan untuk menguruskan kebergantungan projek bahasa Go 2. Pengendalian ralat, menambah ralat jenis ralat baharu, menjadikan pengendalian ralat lebih fleksibel dan ringkas 3. Pakej konteks, digunakan Digunakan untuk lulus nilai julat permintaan antara goroutine; 4. Embedding, iaitu, satu struktur boleh dibenamkan dalam struktur lain 5. Pakej penyegerakan, untuk mengawal penyegerakan dan komunikasi antara goroutine dengan lebih baik; jenis ralat; 7. Generik membolehkan pembangun menulis dengan lebih fleksibel.

Gambaran keseluruhan ciri baharu CSS3: Cara menggunakan CSS3 untuk mencapai susun atur berpusat mendatar Dalam reka bentuk dan reka letak web, reka letak berpusat mendatar adalah keperluan biasa. Pada masa lalu, kami sering menggunakan helah JavaScript atau CSS yang kompleks untuk mencapai ini. Walau bagaimanapun, CSS3 memperkenalkan beberapa ciri baharu yang menjadikan reka letak berpusat mendatar lebih mudah dan lebih fleksibel. Artikel ini akan memperkenalkan beberapa ciri baharu CSS3 dan menyediakan beberapa contoh kod untuk menunjukkan cara menggunakan CSS3 untuk mencapai reka letak berpusat mendatar. 1. Gunakan flexbox untuk susun atur fle
