29.方法引用

news2025/1/20 1:14:44

方法引用

    • 1. 概述
    • 2.引用静态方法
      • 2.1 概述
      • 2.2 代码示例
    • 3. 引用成员方法
      • 3.1 概述
      • 3.2 分类
        • 3.2.1 其他类
        • 3.2.2 本类
        • 3.2.3 父类
      • 3.3 代码示例
    • 4. 引用构造方法
      • 4.1 概述
      • 4.2 代码示例
    • 5. 使用类名引用成员方法
      • 5.1 概述
      • 5.2 代码示例
    • 6. 引用数组的构造方法
      • 6.1 概述
      • 6.2 代码示例
    • 7. 注意事项

1. 概述

方法引用是 Java 编程语言中的一种特性,它提供了一种简洁的语法来直接引用现有的方法。

方法引用可以被认为是 Lambda 表达式的一种缩写形式,用于将方法作为参数传递或在函数式接口中使用。

  • 方法引用:

    • 把已经存在的方法拿过来用,当做函数式接口中抽象方法的方法体
  • 方法引用符: ::

  • 方法引用的要求:

    1. 需要有函数式接口

    2. 被引用的方法必须已经存在

    3. 被引用的方法的形参和返回值需要跟抽象方法保持一致

    4. 被引用方法的功能要满足当前的需求

方法引用可以简化代码,使得代码更加易读和模块化。它经常用于函数式接口、流操作和方法链式调用等场景。

方法引用只能用于函数式接口,即只有一个抽象方法的接口。

  • 代码示例
    需求:创建一个数组,进行倒序排列

    package text.text02;
    
    import java.util.Arrays;
    import java.util.Comparator;
    
    /*方法引用:
        把已经存在的方法拿过来用,当做函数式接口中抽象方法的方法体
    
    方法引用符:  ::
    
    方法引用的要求:
        1.需要有函数式接口
        2.被引用的方法必须已经存在
        3.被引用的方法的形参和返回值需要跟抽象方法保持一致
        4.被引用方法的功能要满足当前的需求
    
     需求:创建一个数组,进行倒序排列
     */
    public class text73 {
        public static void main(String[] args) {
            Integer[] arr = {2, 5, 4, 6, 3, 1};
    
            //匿名内部类
            Arrays.sort(arr, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2 - o1;
                }
            });
            System.out.println("匿名内部类: " + Arrays.toString(arr));
    
    
            //Lambda表达式
            //因为第二个参数的类型Comparator是一个函数式接口
            Arrays.sort(arr, (Integer o1, Integer o2) -> {
                        return o2 - o1;
                    }
            );
            System.out.println("Lambda表达式: " + Arrays.toString(arr));
    
    
            //Lambda简写模式
            Arrays.sort(arr, (o1, o2) -> o2 - o1);
            System.out.println("Lambda简写模式: " + Arrays.toString(arr));
    
    
            //方法引用
            //方法引用的要求:
            //1.需要有函数式接口
            //2.被引用的方法必须已经存在
            //3.被引用的方法的形参和返回值需要跟抽象方法保持一致
            //4.被引用方法的功能要满足当前的需求
    
            //表示引用text73里面的order方法,把这个方法当做抽象方法compare的方法体
            Arrays.sort(arr, text73::order);
            System.out.println("方法引用: " + Arrays.toString(arr));
        }
    
        //被引用的方法
        public static int order(int i1, int i2) {
            return i2 - i1;
        }
    }
    
    
  • 输出结果
    在这里插入图片描述

2.引用静态方法

2.1 概述

引用静态方法是方法引用的一种形式,用于引用已定义的静态方法。

语法是 ClassName::staticMethodName

其中 ClassName 是包含静态方法的类名,staticMethodName 是要引用的静态方法的名称。

  • 方法引用的要求:

    1. 需要有函数式接口

    2. 被引用的方法必须已经存在

    3. 被引用的方法的形参和返回值需要跟抽象方法保持一致

    4. 被引用方法的功能要满足当前的需求

  • 格式:类名::静态方法

    示例:text73::order

2.2 代码示例

  • 代码示例
    练习:集合中含有以下数字,要求将他们都变成int类型
    package text.text02;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.function.Function;
    
    /*
    引用静态方法:
    格式:类名::静态方法
    示例:text73::order
    
    练习:集合中含有以下数字,要求将他们都变成int类型
    "1","2","3","4","5"
     */
    public class text74 {
        public static void main(String[] args) {
            //创建集合并添加元素
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list, "1", "2", "3", "4", "5");
    
            //常规方法
            System.out.println("常规方法:");
            for (String s : list) {
                int i = Integer.parseInt(s);
                System.out.print(i + "  ");
            }
    
            System.out.println();
    
            //方法引用
            //方法引用的要求:
            //1.需要有函数式接口
            //2.被引用的方法必须已经存在
            //3.被引用的方法的形参和返回值需要跟抽象方法保持一致
            //4.被引用方法的功能要满足当前的需求
    
            //表示引用Integer里面的parseInt方法,把这个方法当做抽象方法apply的方法体
            System.out.println("方法引用:");
            list.stream()
                    .map(Integer::parseInt)
                    .forEach(s -> System.out.print(s + "  "));
        }
    }
    
    
  • 输出结果
    在这里插入图片描述

3. 引用成员方法

3.1 概述

引用成员方法是方法引用的一种形式,用于引用已定义的非静态成员方法。

  • 语法是 instance::methodName

其中 instance 是对象实例,methodName 是要引用的成员方法的名称。

  • 格式:对象:: 成员方法

  • 方法引用的要求:

    1. 需要有函数式接口

    2. 被引用的方法必须已经存在

    3. 被引用的方法的形参和返回值需要跟抽象方法保持一致

    4. 被引用方法的功能要满足当前的需求

  • 引用成员方法可以是实例方法或对象方法,取决于方法在哪个类中定义。

    • 如果方法在同一个类中定义,可以使用实例方法引用,即使用类的实例加上双冒号和方法名。
    • 如果方法在不同的类中定义,需要使用对象方法引用,即使用对象的实例加上双冒号和方法名。

编译器会根据上下文自动匹配适当的对象实例来调用方法引用。

3.2 分类

3.2.1 其他类

格式:其他类对象::方法名

  1. 引用其他类的成员方法:
    • 静态方法引用:可以直接通过类名和方法名来引用其他类的静态方法。语法为 ClassName::staticMethodName

    • 实例方法引用:需要创建其他类的实例,然后通过实例和方法名来引用其成员方法。语法为 instance::methodName

示例:

class StringUtils {
    static String toUpperCase(String s) {
        return s.toUpperCase();
    }
}

class OtherClass {
    String appendWorld(String s) {
        return s + " World";
    }
}

public class Main {
    public static void main(String[] args) {
        // 静态方法引用
        Converter converter1 = StringUtils::toUpperCase;
        String result1 = converter1.convert("hello");
        System.out.println(result1);  // 输出: HELLO
        
        // 实例方法引用
        OtherClass otherClass = new OtherClass();
        Converter converter2 = otherClass::appendWorld;
        String result2 = converter2.convert("Hello");
        System.out.println(result2);  // 输出: Hello World
    }
}

在上面的示例中,我们定义了一个 StringUtils 类和一个 OtherClass 类。StringUtils 类有一个静态方法 toUpperCaseOtherClass 类有一个实例方法 appendWorld。通过静态方法引用和实例方法引用,我们可以在 Main 类中引用这两个类中的方法。

3.2.2 本类

格式: this::方法名

  • 静态方法没有this,如果非要调用本类中的方法,可以创建本来对象调用

  • 静态成员被共享于所有类的实例,而不是与特定的实例绑定。因此,静态成员没有"this" 引用可以使用。

  1. 引用本类的成员方法:
    • 实例方法引用:只需要使用 this 关键字加上双冒号和方法名来引用本类的实例方法。

示例:

class MyClass {
    void printMessage(String message) {
        System.out.println("Message: " + message);
    }
    
    void greet(String name) {
        System.out.println("Hello, " + name);
    }
    
    void testMethod() {
        Consumer<String> consumer1 = this::printMessage;
        consumer1.accept("Hello World");
        
        Consumer<String> consumer2 = this::greet;
        consumer2.accept("John");
    }
}

public class Main {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.testMethod();
    }
}

在上面的示例中,我们定义了一个 MyClass 类,其中有两个实例方法 printMessagegreet。通过实例方法引用,我们在 testMethod 中引用了本类的方法,并通过 Consumer 接口来调用这些方法。

3.2.3 父类

格式super::方法名

  • 静态方法没有super,如果非要调用本类中的方法,可以创建本来对象调用

  • 静态成员被共享于所有类的实例,而不是与特定的实例绑定。因此,静态成员没有"this" 引用可以使用。

  1. 引用父类的成员方法:

    • 实例方法引用:可以使用 super 关键字加上双冒号和方法名来引用父类的实例方法。

示例:

class ParentClass {
    void printMessage() {
        System.out.println("Hello from Parent");
    }
}

class ChildClass extends ParentClass {
    void testMethod() {
        Consumer<Void> consumer = super::printMessage;
        consumer.accept(null);
    }
}

public class Main {
    public static void main(String[] args) {
        ChildClass childClass = new ChildClass();
        childClass.testMethod();
    }
}

在上面的示例中,我们定义了一个 ParentClass 父类和一个 ChildClass 子类。ParentClass 类有一个实例方法 printMessage,在 ChildClasstestMethod 中,我们使用父类的实例方法引用来引用父类的 printMessage 方法,并通过 Consumer 接口来调用该方法。

3.3 代码示例

  • 代码示例
    • 练习:集合中有些名字,按照要求过滤

    • 数据:“张无忌”,“周芷诺”,“赵敏”,“张强”,“张三丰”

    • 要求:只要以“张”开头,而且名字是3个字的

    package text.text02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.function.Consumer;
    import java.util.function.Predicate;
    
    /*引用成员方法:
    格式:对象:: 成员方法
    1.其他类   其他类对象::方法名
    2.本类    this::方法名(静态方法没有this,如果非要调用本类中的方法,可以创建本来对象调用)  静态成员被共享于所有类的实例,而不是与特定的实例绑定。因此,静态成员没有"this" 引用可以使用。
    3.父类    super::方法名 (静态方法没有super,如果非要调用本类中的方法,可以创建本来对象调用)
    
    练习:集合中有些名字,按照要求过滤
    数据:"张无忌","周芷诺","赵敏","张强","张三丰"
    要求:只要以“张”开头,而且名字是3个字的
     */
    public class text75 extends kind2 {
        public static void main(String[] args) {
            //创建集合并添加数据
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list, "张无忌", "周芷诺", "赵敏", "张强", "张三丰");
    
            //常规方法的省略模式
            System.out.println("常规方法的省略模式:");
            list.stream()
                    .filter(s -> s.startsWith("张"))
                    .filter(s -> s.length() == 3)
                    .forEach(s -> System.out.print(s + "  "));
    
            System.out.println();
    
            //常规方法的完整模式
            System.out.println("常规方法的完整模式:");
            list.stream()
                    .filter(new Predicate<String>() {
                        @Override
                        public boolean test(String s) {
                            return s.startsWith("张");
                        }
                    })
                    .filter(new Predicate<String>() {
                        @Override
                        public boolean test(String s) {
                            return s.length() == 3;
                        }
                    })
                    .forEach(new Consumer<String>() {
                        @Override
                        public void accept(String s) {
                            System.out.print(s + "  ");
                        }
                    });
    
            System.out.println();
    
            //方法引用
            //方法引用的要求:
            //1.需要有函数式接口
            //2.被引用的方法必须已经存在
            //3.被引用的方法的形参和返回值需要跟抽象方法保持一致
            //4.被引用方法的功能要满足当前的需求
    
            System.out.println("方法引用:");
            //本类中:(静态方法没有this,如果非要调用本类中的方法,可以创建本来对象调用)静态成员被共享于所有类的实例,而不是与特定的实例绑定。因此,静态成员没有"this" 引用可以使用。
            System.out.print("本类中的方法引用:");
            list.stream()
                    .filter(new text75()::stringJudge)
                    .forEach(s -> System.out.print(s + "  "));
    
            System.out.println();
    
            //其他类中:
            System.out.print("其他类中的方法引用:");
            list.stream()
                    .filter(new kind1()::stringJudge)
                    .forEach(s -> System.out.print(s + "  "));
    
            System.out.println();
    
            //父类中:(静态方法没有super,如果非要调用本类中的方法,可以创建本来对象调用)
            System.out.print("父类中的方法引用:");
            list.stream()
                    .filter(new kind2()::stringJudge)
                    .forEach(s -> System.out.print(s + "  "));
        }
    
        public boolean stringJudge(String s) {
            return s.startsWith("张") && s.length() == 3;
        }
    }
    
    class kind1 {
        public boolean stringJudge(String s) {
            return s.startsWith("张") && s.length() == 3;
        }
    }
    
    class kind2 {
        public boolean stringJudge(String s) {
            return s.startsWith("张") && s.length() == 3;
        }
    }
    
    
  • 输出结果
    在这里插入图片描述

4. 引用构造方法

4.1 概述

引用构造方法的语法形式为:类名::new,其中类名是需要引用构造方法的类的名称。

  • 格式:类名:: new (引用构造方法中的返回值不用管,构造方法没有返回值)

    示例:Student::new

  • 方法引用的要求:

    1. 需要有函数式接口

    2. 被引用的方法必须已经存在

    3. 被引用的方法的形参和返回值需要跟抽象方法保持一致

    4. 被引用方法的功能要满足当前的需求

4.2 代码示例

  • 代码示例
    • 练习:集合里面存储姓名和年龄,比如:张无忌,15

    • 要求:将数据封装成Student对象并收集到List集合中

    package text.text02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.function.Function;
    
    
    /*引用构造方法:
    格式:类名:: new (引用构造方法中的返回值不用管,构造方法没有返回值)
    示例:Student::new
    方法引用的要求:
        1.需要有函数式接口
        2.被引用的方法必须已经存在
        3.被引用的方法的形参和返回值需要跟抽象方法保持一致
        4.被引用方法的功能要满足当前的需求
    
    
    练习:集合里面存储姓名和年龄,比如:张无忌,15
    要求:将数据封装成Student对象并收集到List集合中
     */
    public class text76 {
        public static void main(String[] args) {
            //创建集合并添加数据
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list, "张无忌,12", "周芷诺,32", "赵敏,23", "张强,23", "张三丰,43", "张翠山,34", "张良,19", "王二,38");
    
            //常规方法
            System.out.println("======================常规方法:======================");
            list.stream()
                    .map(new Function<String, Student9>() {
                        @Override
                        public Student9 apply(String s) {
                            String name = s.split(",")[0];
                            int age = Integer.parseInt(s.split(",")[1]);
                            return new Student9(name, age);
                        }
                    })
                    .forEach(s -> System.out.println(s.getName() + " , " + s.getAge()));
    
            //方法引用
            System.out.println("======================方法引用:======================");
            list.stream()
                    .map(Student9::new)
                    .forEach(s -> System.out.println(s.getName() + " , " + s.getAge()));
    
    
        }
    }
    
    class Student9 {
        private String name;
        private int age;
    
        public Student9() {
        }
    
        //被引用的构造方法
        public Student9(String s) {
            this.name = s.split(",")[0];
            this.age = Integer.parseInt(s.split(",")[1]);
        }
    
        public Student9(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        /**
         * 获取
         *
         * @return name
         */
        public String getName() {
            return name;
        }
    
        /**
         * 设置
         *
         * @param name
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * 获取
         *
         * @return age
         */
        public int getAge() {
            return age;
        }
    
        /**
         * 设置
         *
         * @param age
         */
        public void setAge(int age) {
            this.age = age;
        }
    
        public String toString() {
            return "Student9{name = " + name + ", age = " + age + "}";
        }
    }
    
  • 输出结果
    在这里插入图片描述

5. 使用类名引用成员方法

5.1 概述

引用方法的语法形式为:类名::方法名,其中类名是要引用方法的类的名称,方法名是要引用的方法的名称。

  • 格式:类名::成员方法

    示例:String::subString

  • 方法引用的规则:(独有

    1. 需要有函数式接口

    2. 被引用的方法必须已经存在

    3. 被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致;如果没有第二个形参,说明被引用的方法需要无参的成员方法

    4. 被引用方法的功能需要满足当前的需求

  • 抽象方法形参的详解:

    • 第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法,在Stream流当中,第一个参数一般都表示流里面的每一个数据

      假设流里面的数据是字符串,那么使用这种方法进行方法引用,只能引用String这个类中的方法

    • 第二个参数到最后一个参数:跟被引用的方法的形参保持一致,如果没有第二个形参,说明被引用的方法需要无参的成员方法

  • 局限性

    不能引用所有类中的成员方法,是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法

5.2 代码示例

  • 代码示例
    • 练习:集合里面一些字符串,要求变成大写后进行输出

    • 集合:“aaa”,“bbb”,“ccc”,“ddd”

    package text.text02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.function.Function;
    
    /*使用类名引用成员方法:
    格式:类名::成员方法
    示例:String::subString
    
    方法引用的规则:(独有)
        1.需要有函数式接口
        2.被引用的方法必须已经存在
        3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致;如果没有第二个形参,说明被引用的方法需要无参的成员方法
        4.被引用方法的功能需要满足当前的需求
    
    抽象方法形参的详解:
        第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法
                  在Stream流当中,第一个参数一般都表示流里面的每一个数据
                  假设流里面的数据是字符串,那么使用这种方法进行方法引用,只能引用String这个类中的方法
        第二个参数到最后一个参数:跟被引用的方法的形参保持一致,如果没有第二个形参,说明被引用的方法需要无参的成员方法
    
    局限性:不能引用所有类中的成员方法,是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法
    
    练习:集合里面一些字符串,要求变成大写后进行输出
    集合:"aaa","bbb","ccc","ddd"
     */
    public class text77 {
        public static void main(String[] args) {
            //创建集合并添加数据
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list, "aaa", "bbb", "ccc", "ddd");
    
            //常规方法
            System.out.print("常规方法:");
            list.stream()
                    .map(new Function<String, String>() {
                        @Override
                        public String apply(String s) {
                            String str = s.toUpperCase();
                            return str;
                        }
                    })
                    .forEach(s -> System.out.print(s + "  "));
    
            System.out.println();
    
            //方法引用
            System.out.print("方法引用:");
            list.stream()
                    //拿着流里面的每一个数据,去调用String类中的toUpperCase方法,方法的返回值就是转换之后的结果
                    .map(String::toUpperCase)
                    .forEach(s -> System.out.print(s + "  "));
        }
    }
    
    
  • 输出结果
    在这里插入图片描述

6. 引用数组的构造方法

6.1 概述

  • 格式:数据类型[] ::new

    示例:int [] :: new

  • 方法引用的要求

    1. 需要有函数式接口

    2. 被引用的方法必须已经存在

    3. 被引用的方法的形参和返回值需要跟抽象方法保持一致

    4. 被引用方法的功能要满足当前的需求

  • 细节:数组的类型,需要跟流中数据的类型一致。

6.2 代码示例

  • 代码示例
    练习:集合中存储一些整数,收集到数组当中
    package text.text02;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.function.IntFunction;
    
    /*引用数组的构造方法:
    格式:数据类型[] ::new
    示例:int [] :: new
    
    细节:数组的类型,需要跟流中数据的类型一致。
    
    练习:集合中存储一些整数,收集到数组当中
     */
    public class text78 {
        public static void main(String[] args) {
            //创建集合并添加元素
            ArrayList<Integer> list = new ArrayList<>();
            Collections.addAll(list, 1, 2, 3, 4, 5, 6);
    
            //常规方法
            System.out.print("常规方法:");
            Integer[] arr1 = list.stream()
                    .toArray(new IntFunction<Integer[]>() {
                        @Override
                        public Integer[] apply(int value) {
                            return new Integer[value];
                        }
                    });
            System.out.println(Arrays.toString(arr1));
    
    
            //方法引用
            System.out.print("方法引用:");
            Integer[] arr2 = list.stream()
                    .toArray(Integer[]::new);
            System.out.println(Arrays.toString(arr2));
        }
    }
    
    
  • 输出结果
    在这里插入图片描述

7. 注意事项

  1. 成员方法引用的目标类型必须与函数式接口中声明的方法的参数和返回类型相匹配。如果引用的方法与接口中声明的方法具有不同的参数和返回类型,编译器将无法推断正确的类型,并且会导致编译错误。

  2. 当引用静态方法时,需要使用类名来引用方法。例如,Integer::parseInt 引用了 Integer 类的静态方法 parseInt

  3. 当引用实例方法时,需要使用对象或类名来引用方法。例如,String::toUpperCase 引用了 String 类的非静态方法 toUpperCase。如果在引用实例方法时需要指定对象,请在引用方法后使用 :: 操作符传递对象。

  4. 当引用构造方法时,需要使用类名和 new 关键字来引用构造方法。例如,ArrayList::new 引用了 ArrayList 类的构造方法。

  5. 方法引用不是万能的。虽然它可以提高代码的可读性和简洁性,但并不是所有情况下都适用。有时候,使用方法引用会导致代码更加难以理解,此时可以选择使用 lambda 表达式或传统的方法调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1447260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue】computed与watch

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue⛺️稳重求进&#xff0c;晒太阳 计算属性 概念&#xff1a;基于现有的数据&#xff0c;计算出来新的属性&#xff0c;依赖的数据变化&#xff0c;自动重新计算 语法&#xff1a; 声明…

蓝牙BLE学习-安全

1.基本概念 蓝牙标准规定了5种基本的安全服务 身份验证:根据通信设备的蓝牙地址验证其身份。蓝牙不提供本地用户身份验证。保密性:确保只有授权的设备才能访问和查看传输的数据&#xff0c;防止窃听造成的信息泄露。授权(Authorization):在允许设备使用某项服务之前&#xff…

Vue-自定义属性和插槽(五)

目录 自定义指令 基本语法 (全局&局部注册) 指令的值 练习&#xff1a;v-loading 指令封装 总结&#xff1a; 插槽&#xff08;slot&#xff09; 默认插槽 插槽 - 后备内容&#xff08;默认值&#xff09; 具名插槽 具名插槽基本语法: 具名插槽简化语法: 作…

可视化工具:将多种数据格式转化为交互式图形展示的利器

引言 在数据驱动的时代&#xff0c;数据的分析和理解对于决策过程至关重要。然而&#xff0c;不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题&#xff0c;一种强大的可视化工具应运而生。这个工具具有将多种数据格式&#xff08;包括JSON、YAML、XML、C…

调用讯飞火星AI大模型WebAPI

调用讯飞火星AI大模型 记录一次调用讯飞AI大模型的过程 官方文档 首先&#xff0c;去官网申请资格&#xff0c;获得必要秘钥等 再编写url&#xff0c;该url存在编码要求&#xff0c;具体看官网url编写 具体代码如下&#xff1a; getWebsocketUrl() {return new Promise((resol…

格式化字符串的简单学习

文章目录 Format String格式化字符串函数格式化字符串参数原理 这几天学的少&#xff0c;过完年就一直在走亲戚&#xff08;现在看到肉就犯恶心 Format String 格式化字符串函数可以接受可变数量的参数&#xff0c;并将第一个参数作为格式化字符串&#xff0c;根据其来解析之…

ChatGPT高效提问—prompt实践(视频制作)

ChatGPT高效提问—prompt实践&#xff08;视频制作&#xff09; 1.1 视频制作 ​ 制作视频对于什么都不懂的小白来说非常难。而随着AI技术的发展&#xff0c;这件事变得越来越简单&#xff0c;如今小白也可以轻松上手。如何借助ChatGPT来制作短视频。 ​ 其实方法非常简单&a…

【排序】归并排序

归并排序 动图演示&#xff1a; 基本思想&#xff1a;分治思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子…

CSS 评分器星星效果

<template><view class="rating"><!-- 5颗星 --><input value="5" name="rating" id="star5" type="radio"><label for="star5"></label><!-- 4颗星 --><input val…

中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第一套(完善程序题)

CCF认证CSP-J入门组模拟测试题第一套 三、完善程序题 第一题 九宫格 请完善下面的程序,将1~9个数字分别填人3x3的九宫格中,第一行的三个数字组成一个三位数。要使第二行的三位数是第一行的2倍,第三行的三位数是第一行的3倍且每个格子里的数字都不能重复,现在要求输出所有的填…

08:K8S资源对象管理|服务与负载均衡|Ingress

K8S资源对象管理&#xff5c;服务与负载均衡&#xff5c;Ingress DaemonSet控制器污点策略容忍容忍污点 其他资源对象Job资源对象 有限生命周期CronJob资源对象 集群服务服务自动发现headless服务 实现服务定位与查找 服务类型 Ingress插件 发布服务的方式 DaemonSet控制器 Da…

GEE:梯度提升树(Gradient Boosting Tree)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…

vue-进阶语法(四)

目录 v-model原理 v-model应用于组件 sync修饰符 ref 和 $refs&#xff08;重点&#xff09; $nextTick v-model原理 原理&#xff1a;v-model本质上是一个语法糖。例如应用在输入框上&#xff0c;就是 value属性 和 input事件 的合写。 作用&#xff1a;提供数据的双向…

【开源】JAVA+Vue.js实现天然气工程运维系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

ClickHouse--03--数据类型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 数据类型1. Int2.FloattoFloat32(...) 用来将字符串转换成 Float32 类型的函数toFloat64(...) 用来将字符串转换成 Float64 类型的函数 3.DecimaltoDecimal32(value…

云原生介绍与容器的基本概念

云原生介绍 1、云原生的定义 云原生为用户指定了一条低心智负担的、敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。 2、云原生思想两个理论 第一个理论基础是&#xff1a;不可变基础设施。 第二个理论基础是&#xff1a;云应用编排理…

基于python深度学习的中文情感分析的系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Vue3高频知识点和写法

一 Vue插件 二 vue3项目创建 创建完成后npm install npm run dev 三 setup 一 响应式数据 setup函数是用来代替data和methods的写法的&#xff0c;在setup函数中声明的数据和函数&#xff0c;导出后可以在页面中使用。 但是暂时不是响应式数据&#xff0c;如果要响应式数据的…

备战蓝桥杯---动态规划(入门2)

今天主要介绍区间dp比较难的题&#xff1a; 下面是分析&#xff1a; 我们如果先固定点V0&#xff0c;那我们得去枚举两个点使它构成三角形&#xff0c;同时求目标值也比较难确定&#xff08;起始与终止都带0&#xff09;&#xff0c;于是我们考虑固定边&#xff0c;我们固定v0…

【开源】SpringBoot框架开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…