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>() { 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() { 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
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
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
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); } }