Java基础学习day08-2

简介: 本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。

Java基础学习day08-2

方法引用

  • 公用类
package com.itheima.method1;

public class Student {
    private String name;
    private int age;
    private double height;

    public Student() {
    }

    public Student(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    /**
     * 获取
     *
     * @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;
    }

    /**
     * 获取
     *
     * @return height
     */
    public double getHeight() {
        return height;
    }

    /**
     * 设置
     *
     * @param height
     */
    public void setHeight(double height) {
        this.height = height;
    }
    public String toString() {
        return "Student{name = " + name + ", age = " + age + ", height = " + height + "}";
    }

    public static int compare(Student o1, Student o2) {
        return o1.getAge() - o2.getAge();
    }

    public int compare2(Student o1, Student o2) {
        return o1.getAge() - o2.getAge();
    }
}

静态方法的引用

1、格式

  • 类名::静态方法

2、使用场景

  • 如果某个Lambda表达式里只是调用一个静态方法,并且“→”前后参数的形式一致,就可以使用静态方法引用。

3、示例

package com.itheima.method1;

import java.util.Arrays;

public class Test1 {
    public static void main(String[] args) {
        Student[] students = new Student[3];
        // 创建对象
        students[0] = new Student("张三", 18, 170.0);
        students[1] = new Student("李四", 19, 180.0);
        students[2] = new Student("王五", 20, 190.0);

        Arrays.sort(students, (o1, o2) -> o1.getAge() - o2.getAge());

        Arrays.sort(students, (o1, o2) -> Student.compare(o1, o2));

        Arrays.sort(students, Student::compare);


        System.out.println(Arrays.toString(students));

    }
}

实例方法的引用

1、格式

  • 对象名::实例方法

2、使用场景

  • 如果某个Lambda表达式里只是通过对象名称调用一个实例方法,并且“→”前后参数的形式一致,就可以使用实例方法引用。

3、示例

package com.itheima.method1;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        Student[] students = new Student[3];
        // 创建对象
        students[0] = new Student("张三", 18, 170.0);
        students[1] = new Student("李四", 19, 180.0);
        students[2] = new Student("王五", 20, 190.0);

        Arrays.sort(students, (o1, o2) -> o1.getAge() - o2.getAge());

        Student student = new Student();
        Arrays.sort(students, (o1, o2) -> student.compare2(o1, o2));

        Arrays.sort(students, student::compare2);


        System.out.println(Arrays.toString(students));

    }
}

特定类型方法的引用

1、格式

  • 特定类的名称::方法

2、使用场景

  • 如果某个Lambda表达式里只是调用一个特定类型的实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。

3、示例

package com.itheima.method1;

import java.util.Arrays;
import java.util.Comparator;

public class Test3 {
    public static void main(String[] args) {

        String[] strings = {"KangKang", "lihua", "Jack", "Rose", "Machel", "Tom"};


        Arrays.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareToIgnoreCase(o2);
            }
        });

        Arrays.sort(strings, (String o1, String o2) -> {
            return o1.compareToIgnoreCase(o2);
        });

        Arrays.sort(strings, (o1, o2) -> o1.compareToIgnoreCase(o2));

        Arrays.sort(strings, String::compareToIgnoreCase);

        System.out.println(Arrays.toString(strings));

    }
}

构造器引用

1、格式

  • 类名::new

2、使用场景

  • 如果某个Lambda表达式里只是在创建对象,并且“→”前后参数情况一致,就可以使用构造器引用。

3、示例

package com.itheima.method1;

public class Test4 {
    public static void main(String[] args) {
        GetCar getCar = new GetCar() {
            @Override
            public Car getCar(String name) {
                return new Car(name);
            }
        };

        GetCar getCar1 = (String name) -> {
            return new Car(name);
        };

        GetCar getCar2 = name -> new Car(name);

        GetCar getCar3 = Car::new;

        System.out.println(getCar3.getCar("宝马"));
    }
}

interface GetCar {
    Car getCar(String name);
}

class Car {
    private String name;

    public Car() {
    }

    public Car(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return "Car{name = " + name + "}";
    }
}

常用API

String

1、定义

  • String代表字符串,它的对象可以封装字符串数据,并提供了很多方法完成对字符串的处理。

2、创建字符串

  • 方式一: Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
// 创建字符串第一种形式  推荐
String name = "张三";
System.out.println(name);
  • 方式二:调用String类的构造器初始化字符串对象。
// 创建字符串的其他形式
String string1 = new String();
System.out.println(string1);

String string2 = new String("李四");
System.out.println(string2);

char[] chars = {'你', '好', 'J', 'a', 'v', 'a'};
String string3 = new String(chars);
System.out.println(string3);

byte[] bytes = {97, 98, 99, 65, 66, 67};
String string4 = new String(bytes);
System.out.println(string4);

3、String常用的API

image.png

package com.itheima.stringdemo;

import java.util.Arrays;

public class Test2 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);

        String s3 = new String("abcd");

        String s4 = new String("abcd");
        System.out.println(s3 == s4);

        String s5 = new String("a-b-c-d");

        System.out.println(s1.length()); //3

        System.out.println(s1.charAt(2)); // c

        System.out.println(s3.toCharArray()); //abcd

        System.out.println(s3.equals(s4));  //true

        System.out.println(s3.equalsIgnoreCase(s4)); // true

        System.out.println(s3.substring(0, 2)); // ab

        System.out.println(s3.substring(2)); // cd

        System.out.println(s3.replace("a", "b"));  // bbcd


        System.out.println(s3.contains(s1)); // true

        System.out.println(s3.contains(s4)); // true

        System.out.println(s3.startsWith("a")); // true

        String[] s6 = s5.split("-");
        System.out.println(Arrays.toString(s6)); // [a,b,c,d]
    }
}

4、案例1

image.png

package com.itheima.stringdemo;

import java.util.Random;

public class Demo2 {
    public static void main(String[] args) {
        String code = "";
        String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        Random ra = new Random();
        for (int i = 0; i < 6; i++) {
            int ra1 = ra.nextInt(data.length());
            code += data.charAt(ra1);
        }
        System.out.println(code);
    }
}

5、案例2

//系统正确的登录名和密码是:admin/123456,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,
//登录成功后展示:“欢迎进入系统!”,即可停止程序(注意:要求最多给用户三次登录机会) 

package com.itheima.stringdemo;

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        String name = "admin";
        String password = "123456";

        System.out.println("请开始您的登录操作:");
        int count = 0;
        while (count < 3) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您的用户名:");
            String username = sc.next();
            System.out.println("请输入您的密码:");
            String userPassword = sc.next();
            if (name.equals(username) && password.equals(userPassword)) {
                System.out.println("恭喜您登录成功");
                return;
            } else {
                count++;
                if (count < 3) {
                    System.out.println("您的用户名或密码有误,您还剩" + (3 - count) + "次机会,请重新输入:");
                } else {
                    System.out.println("您用完了三次机会");
                    return;
                }
            }
        }
    }
}

ArrayList

1、定义

  • 集合是一种容器,用来装数据的,类似于数组。
  • 集合大小可变,功能丰富,开发中用的更多。

2、创建集合

// 创建集合      <>泛型
// ArrayList<String> list = new ArrayList<>();
List<String> list = new ArrayList<>();

3、ArrayList常用的API

image.png

package com.itheima.arrayListdemo;

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {

        // 创建集合      <>泛型
        // ArrayList<String> list = new ArrayList<>();
        List<String> list = new ArrayList<>();

        list.add("abc");
        list.add("abc");
        list.add("abc");
        list.add("abc");
        list.add("abc");
        list.add(1, "ccc");
        System.out.println(list);
        System.out.println(list.size());

        System.out.println(list.get(2));

        System.out.println(list.remove(2));
        System.out.println(list);

        System.out.println(list.remove("ccc"));
        System.out.println(list);

        System.out.println(list.set(2, "aaa"));
        System.out.println(list);
    }
}


相关文章
|
2月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
210 1
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
282 0
|
2月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
265 7
|
3月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
76 5
|
3月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
148 5
|
3月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
177 3
|
3月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
82 1
|
3月前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
140 1
|
3月前
|
算法 Java
Java基础学习day03-作业
本内容包含多个Java编程案例,涵盖条件判断、循环、数组、随机数生成、素数判断等基础算法练习,适用于巩固Java语法与逻辑思维训练。
139 6
|
3月前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
84 2