【Java进阶】Lambda的方法引用
方法引用是JDK8的一个新的特性,Lambda是用来简化匿名代码的书写格式的,而方法引用是用来进一步简化Lambda表达式的,它简化的更加过分。
方法引用有:
静态方法引用
实例方法引用
特殊类型的方法引用
构造方法引用
其中使用场景会比较多的是前两个,后面的两个倒是不怎么常见。
静态方法引用使用场景当别人提前写好的功能放在了一个静态方法中的时候,可以采用这种语法;
语法格式类名::方法名
实例方法引用使用场景当别人提前写好的功能放在了一个成员方法中的时候,可以采用这种语法;
语法格式对象::方法名
静态&实例方法引用代码案例12345678910111213141516171819202122232425262728293031323334353637// 接口Apublic interface A { void abc(String s);}// 已经被别人实现的类zhangsanpublic class Zhangsan { public static void printString(String s){ ...
【Java进阶】Lambda表达式
什么是Lambda表达式:用于简化匿名内部类代码的书写。
Lambda表达式基本使用
Lamdba是有特有的格式的,按照下面的格式来编写Lamdba。
123(被重写方法的形参列表) -> { 被重写方法的方法体代码;}
需要给说明一下的是,在使用Lambda表达式之前,必须先有一个接口,而且接口中只能有一个抽象方法。(注意:不能是抽象类,只能是接口)
像这样的接口,我们称之为函数式接口,只有基于函数式接口的匿名内部类才能被Lambda表达式简化。
像这样
123public interface Swimming{ void swim();}
代码案例123456789101112131415161718192021222324public interface Swimming { void swim();}public class LambdaTest { public static void main(String[] args) { // 想要调用 ...
【Java进阶】查找&排序算法(附Arrays工具类)
这里再补充一条本博客的方法论:精简
只有精简才能一语中的,描绘出事物的本质,过于冗长的博客是谁不不愿意看的。
SearchAlgorithm查找算法
算法其实都是有固定模版的,至少从我考研到现在看来。以及工作之后的一些应用场景,好记性不如烂笔头,拿一些好用算法模版写到自己能随时看到的地方比自己工作胡乱在网上找,或者自己凭感觉写要好的多。
二分查找算法
精华:求mid = left + right / 2, 如果mid > key 则 right = mid - 1, 反之left = mid + 1
代码案例123456789101112131415161718192021222324252627/* 二分查找算法 精华:求mid = left + right / 2, 如果mid > key 则 right = mid - 1, 反之left = mid + 1 */public class BinarySearchAlgorithm { public static void main(String[] args) ...
【Java进阶】JDK7,8日期类
上篇说了JDK7的Calendar以及SimpleDateFormat等相关日期类,其实最好还是使用JDK8中的日期类,安全且支持更加丰富。
JDK7和8日期类比较
JDK8新增的日期类分得更细致一些,比如表示年月日用LocalDate类、表示时间秒用LocalTime类、而表示年月日时分秒用LocalDateTime类等;除了这些类还提供了对时区、时间间隔进行操作的类等,用起来特别方便。
详细说明
JDK8日期
Notes: 这里part1,2,3,4是上图中的四大模块。
PART1
LocalDate、LocalTime、以及LocalDateTime类。这三个类的用法基本大同小异,由于我之前偷懒就写了一个Demo,这里就copy一下别人的代码。
LocalDate类的基本使用1234567891011121314151617181920212223242526272829303132333435363738394041public class Test1_LocalDate { public static void main(String[] args ...
【Java进阶】Java常用API
StringBuilder概述
是java编写的一个专门用于字符串拼接的类,可以当成一个字符串拼接的容器使用,提供了对容器中的数据进行增删改的功能,并提升了字符串的拼接效率;
作用
提供了字符串拼接,反转,修改内容的方法,弥补了字符串对象不能修改内容的缺点;
提升了字符串拼接的效率;
使用方式
由于类中的方法都是非静态的,而且字符串工具,你没有个对象调什么方法,所以还是老老实实造对象吧。
利用构造方法创建对象;
面向创建好的对象直接调用类中的方法即可;
常用方法
方法介绍
空参,全参构造
append(任意类型):将任意的数据类型追加到StringBuilder对象的末尾并返回对象本身
reverse():反转sb对象
对象名.length():返回对象的长度
对象名.toString():将StringBuilder对象转为String基本数据类型
代码案例12345678910111213141516171819/* 练习 StringBuilder入门 */public class StringBuilderCourse { public ...
【Java进阶】包装类
包装类概述
在开发中,经常使用包装类对字符串和基本类型数据进行相互转换。- 想想为什么不用强制(隐式)类型转换
就是8个基本数据类型所对应的引用数据类型;
在玩包装类时候,有两点比较重要的东西
创建包装类的对象方式、自动装箱和拆箱的特性;
利用包装类提供的方法对字符串和基本类型数据进行相互转换
作用
因为包装类中提供了一些方法和属性,供程序员可以调用这些方法和属性直接操作数据;
对应关系
规律:
Int类型的包装类是Integer
char 类型的包装类是Character
其他类型的包装类都是首字母大写
自动拆装箱学习Example123456789101112131415161718//1.创建Integer对象,封装基本类型数据10Integer a = new Integer(10);//2.使用Integer类的静态方法valueOf(数据)Integer b = Integer.valueOf(10);//3.还有一种自动装箱的写法(意思就是自动将基本类型转换为引用类型)Integer c = 10;//4.有装箱肯定还有拆箱(意思就是自动将引用类型转换为基 ...
【Java进阶】内部类&枚举&泛型
交友须带三分侠气,作人要存一点素心。——《小窗幽记》
[译文] :交朋友应该带着三分侠义气,做人要保存一点素净心。
内部类
内部类的精华: 匿名内部类, 而匿名内部类的作用恰恰就是简化了代码, 让我们可以少些一个类(实现类)
内部类说白了, 就是类中嵌套定义一个类.虽然方法与方法之间不能嵌套定义, 但是类却能够嵌套, 类似于
123456public class Car{ //内部类 public class Engine{ }}
成员内部类
就是在类中成员变量/成员方法的位置, 定义了一个内部类, 类似于成员变量、成员方法。
代码举例:12345678910111213141516171819202122232425262728293031323334353637public class Outer { private int age = 99; public static String a="小王"; // 成员内部类 publi ...
【Java进阶】接口和多态(附JDK8和9新特性)
接口概述接口是java中的一种引用数据类型,使用interface关键字表示,里面可以写常量和抽象方法;
在JDK7及以前只能写常量及抽象
可以简单的把接口理解成一种规范, 谁实现了这个接口就要遵守该规范
JDK7以前1只能写常量和抽象方法;
JDK7以后1234jdk8新增了默认方法和静态方法,jdk9新增了私有方法;默认方法,是为了让所有的实现类对象,直接调用;静态方法,是为了让调用者通过接口直接调用方法;(接口中的静态方法,不能通过实现类对象调用)私有方法,是为了提升多个默认方法或多个静态方法中出现的共性内容的复用性;
为什么使用接口1接口相当于是"规范",让实现类实现接口之后,相当于"满足了某种规范",让调用者可以根据接口规范,调用实现类中的具体内容;
什么时候可以使用接口1任意类中只要有"方法",就可以针对方法,设计出接口;
如何编写接口12定义接口使用 interface;类实现接口使用 implements;
CodeDemo1234567891011121314151617181920212 ...
【Java进阶】模板设计模式
模版设计模式概述1设计了一个固定的开头和结尾的内容,正文内容由子类负责填充;
为什么使用模版1使用模版可以将通用的代码提前设计到模版中,从而提升代码的复用性;
在哪里使用1在一些框架或特定的技术中可以使用;
如何编写
写了一个模版方法,需要使用final修饰,目的是让子类直接使用,而不能重写;
写了一个抽象方法,目的是为了让子类重写,填充内容;
CodeDemo1234567891011121314151617181920212223242526272829public abstract class Zwmb { /* 创建一个作文模板 */ public final void write(){ System.out.println("这是我的爸爸!"); this.content(); System.out.println("啊!这就是我的爸爸!"); } public abstract void content(); ...
【Java进阶】final及抽象类
final关键字(※)final可以修饰类、修饰方法、修饰变量。
被final修饰的类,不能被其他类继承;
被final修饰的方法,不能被子类重写;
重写了父类就会报错
final修饰变量
如果修饰的是基本数据类型: 数据值不能改变
如果修饰的是引用数据类型: 地址值不能改变,但是地址值中的数据内容可以改变;
Examples
123456789101112131415// 1, 父类的方法用final修饰,子类就不能重写// 创建子类对象,调用final的abc方法, abc方法是父类的Zi z = new Zi();z.abc();// 2, final修饰的变量,不能改变值final int a = 5;// a = 6;// 3, final修饰的引用数据类型(数组, 集合等),不能修改地址值final int[] arr = {2, 5, 8};// arr = new int[3]; 报错,因为对象变化了,地址值也会变化,跟final违背// 但是可以更改地址值内的数据arr[1] = 10;System.out.println ...
