Java学习笔记(三十三)

在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理Java知识点的第三十三篇博客。

本篇博客介绍了Java的方法引用。

本系列博客所有Java代码都使用IntelliJ IDEA编译运行,版本为2022.1。所用JDK版本为JDK11

目录

方法引用

体验方法引用

Lambda表达式支持的方法引用

引用类方法

引用对象的实例方法

引用类的实例方法

引用构造器


方法引用

体验方法引用

public interface quoteinterface {
    public void showstring(String s);
}

这是quoteinterface接口,有抽象方法showstring,接受一个String类型s。

public class usequote {
    public static void main(String[] args){
        test((String s) -> {
            System.out.println(s);
        });
        test(System.out::println);
    }
    public static void test(quoteinterface qi){
        qi.showstring("Hello quote");
    }
}

test函数接收一个quoteinterface的实现类qi,并调用其showstring方法。在main方法内用了Lambda表达式和方法引用。

程序的输出是:

Hello quote
Hello quote

::为引用运算符,所在表达式为方法引用。

Lambda表达式支持的方法引用

常见的引用方式有引用类方法,引用对象的实例方法,引用类的实例方法,引用构造器。

引用类方法

引用类方法就是引用类的静态方法。格式是:

类名::静态方法

Lambda表达式被类方法替代的时候,形式参数全部传递给静态方法作为参数。

public interface quoteinterface1 {
    public int tran(String s);
}

quoteinterface1接口的tran抽象方法接受一个String类参数s,返回一个int值。

public class quote1 {
    public static void main(String[] args){
        quotetest((String s) -> {
            return Integer.parseInt(s);
        });
        quotetest(Integer::parseInt);
    }
    public static void quotetest(quoteinterface1 qi){
        int num = qi.tran("10");
        System.out.println(num);
    }
}

Integer类的静态方法public static int parseInt(String s)将s转换为int类型数据。

quotetest方法接受一个quoteinterface1的实现类对象qi,并执行其tran方法,输出结果。main方法使用Lambda表达式和引用类方法。

程序的输出是:

10
10

引用对象的实例方法

引用对象的实例方法就是引用类中的成员方法。格式是:

对象::成员方法

public interface quoteinterface2 {
    public void tran(String s);
}

这是quoteinterface2接口,有成员方法tran,接受一个String类型变量s,无返回值。

public class quoteonetwo {
    public void transtring(String s){
        s = s.toUpperCase();
        System.out.println(s);
    }
}

这是quoteonetwo类,transtring方法接受一个String类型变量,将所有字符转换成大写后输出。

String类的方法public String toUpperCase()将此String的所有字符转化为大写。

public class quote2 {
    public static void main(String[] args){
        test((String s) ->{
            s = s.toUpperCase();
            System.out.println(s);
        });

        quoteonetwo qot  = new quoteonetwo();
        test(qot::transtring);
    }
    public static void test(quoteinterface2 qi){
        qi.tran("Helloworld");
    }
}

test类接受一个quoteinterface2的实现类qi,并执行tran方法。main方法通过Lambda表达式和引用对象的实例化方法实现。

程序的输出是:

HELLOWORLD
HELLOWORLD

引用类的实例方法

引用类的实例方法,就是引用类中的成员方法,格式是:

类名::成员方法

Lambda表达式被类的实例方法替代的时候,第一个参数作为调用者,其余参数传递给该方法作为参数。

public interface quoteinterface3 {
    public String trans(String s,int a,int b);
}

quoteinterface3接口的trans方法接受一个String字符串s,和两个int类型变量a b,返回一个String字符串。

public class quote3 {
    public static void main(String[] args){
        test((String s,int a,int b)->{
            return s.substring(a,b);
        });
        test(String::substring);
    }
    public static void test(quoteinterface3 qi){
        String s = qi.trans("use quote",2,5);
        System.out.println(s);
    }
}

String类的方法public String substring(int beginIndex,int endIndex)将从beginIndex开始,到endIndex结束的内容截取并返回,长度为endIndex-beginIndex。

test方法接受一个quoteinterface3的实现类,调用其trans方法,输出结果。main方法通过Lambda表达式和引用类的实例化方法实现。

程序的输出是:

e q
e q

引用构造器

引用构造器就是引用构造方法,格式是:

类名::new

Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数。

public class student {
    private String name;
    private int age;
    public student(){}
    public student(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String getname(){
        return name;
    }

    public void setname(String name){
        this.name = name;
    }

    public int getage(){
        return age;
    }
    public void setage(int age){
        this.age = age;
    }

    public String toString(){
        return "the name is " + name + " and the age is " + age;
    }
}

这是一个学生类,有String类型变量name和int类型变量age。

public interface quoteinterface4 {
    public student make(String s,int i);
}

这是quoteinterface4接口,make抽象方法接受一个String类型参数和一个int类型参数,返回一个student类对象。

public class quote4 {
    public static void main(String[] args){
        test((String s,int i)->{
            student stu = new student(s,i);
            return stu;
        });

        test(student::new);
    }

    public static void test(quoteinterface4 qi){
        student stu = qi.make("Enrique",21);
        System.out.println("The name is " + stu.getname() + " and the age is " + stu.getage());
    }
}

test类接受一个quoteinterface4的实现类对象qi,调用其make方法得到一个student类对象,随后输出相关信息。

main方法使用了Lambda表达式和引用构造器。

程序的输出是:

The name is Enrique and the age is 21
The name is Enrique and the age is 21

你可能感兴趣的:(Java学习笔记,学习,java)