java面向对象高级二(共3集)

[复制链接]
admin 发表于 昨天 20:35 | 显示全部楼层 |阅读模式
1,代码块

1.jpg
1.jpg

2.jpg

内部类
1.jpg
2.jpg

成员内部类是什么? 如何创建其对象?
就是类中的一个普通成员,类似前面我们学过的普通成员变量、成员方法
外部类名.内部类名 对象名 = new  外部类(...).new 内部类(…);
成员内部类的实例方法中,访问其他成员有啥特点?
可以直接访问外部类的实例成员、静态成员
可以拿到当前外部类对象,格式是:外部类名.this。
2.jpg 1.jpg
静态内部类

1.jpg
什么是静态内部类?如何创建对象? 有啥特点?
  有static修饰的内部类。
  外部类名.内部类名 对象名 = new 外部类.内部类(…);
  可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。

局部内部类(了解)
1.jpg

匿名内部类
1.jpg

1.jpg
  1. package com.jinhei.demo;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         // 目标:搞清楚匿名内部类的使用形式(语法): 通常可以做为一个对象参数传输给方法使用。
  5.         // 需求:学生,老师都要参加游泳比赛。
  6.         Swim s1 = new Swim() {
  7.             @Override
  8.             public void swimming() {
  9.                 System.out.println("学生🏊‍贼快~~~~");
  10.             }
  11.         };
  12.         start(s1);
  13.         System.out.println("====================================");

  14.         start(new Swim() {
  15.             @Override
  16.             public void swimming() {
  17.                 System.out.println("老师🏊‍贼溜~~~~");
  18.             }
  19.         });
  20.     }
  21.     // 设计一个方法,可以接收老师,和学生开始比赛。
  22.     public static void start(Swim s) {
  23.         System.out.println("开始。。。。");
  24.         s.swimming();
  25.         System.out.println("结束。。。。");
  26.     }
  27. }
  28. interface Swim {
  29.     void swimming(); // 游泳方法
  30. }
复制代码

Lambda表达式

1.jpg

使用Lambda简化comparator接口的匿名内部类

什么是函数式接口?
有且仅有一个抽象方法的接口。
注意:将来我们见到的大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,该注解用于约束当前接口必须是函数式接口。

1.jpg

  1. package com.jinhei.demo;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         // 目标:认识Lambda表达式:搞清楚其基本作用。
  5.         Animal a = new Animal() {
  6.             @Override
  7.             public void cry() {
  8.                 System.out.println("🐱是喵喵喵的叫~~~~");
  9.             }
  10.         };
  11.         a.cry();

  12.         // 错误示范:Lambda并不是可以简化全部的匿名内部类,Lambda只能简化函数式接口的匿名内部类。
  13. //        Animal a1 = () -> {
  14. //            System.out.println("🐱是喵喵喵的叫~~~~");
  15. //        };
  16. //        a1.cry();
  17.         System.out.println("=====================================================");

  18.        /* Swim s1 = new Swim() {
  19.             @Override
  20.             public void swimming() {
  21.                 System.out.println("学生🏊‍贼快~~~~");
  22.             }
  23.         }; */
  24.         // Lambda只能简化函数式接口的匿名内部类。
  25.         Swim s1 = () -> {
  26.             System.out.println("学生🏊‍贼快~~~~");
  27.         };
  28.         s1.swimming();
  29.     }
  30. }
  31. abstract class Animal{
  32.     public abstract void cry();
  33. }
  34. // 函数式接口:只有一个抽象方法的接口。
  35. @FunctionalInterface // 声明函数式接口的注解。
  36. interface Swim{
  37.     void swimming();
  38. }
复制代码
1、什么是函数式编程?有是好处?
使用Lambda函数替代某些匿名内部类对象,从而让程序代码更简洁,可读性更好。
2、Lambda表达式是啥?有什么用?怎么写?
JDK8新增的一种语法,代表函数;可以用于替代并简化函数式接口的匿名内部类。
3、什么样的接口是函数式接口?怎么确保一个接口必须是函数式接口?
只有一个抽象方法的接口就是函数式接口。
在接口上加上@FuncationalInterface注解即可。      

  1. package com.jinhei.demo;
  2. import javax.swing.*;
  3. import java.util.Arrays;

  4. public class Test {
  5.     public static void main(String[] args) {
  6.         // 目标:用Lambda表达式简化实际示例。
  7.         test1();
  8.         test2();
  9.     }
  10.     public static void test1(){
  11.         Student[] students = new Student[6];
  12.         students[0] = new Student("殷素素", 35, 171.5, '女');
  13.         students[1] = new Student("杨幂", 28, 168.5, '女');
  14.         students[2] = new Student("张无忌", 25, 181.5, '男');
  15.         students[3] = new Student("小昭", 19, 165.5, '女');
  16.         students[4] = new Student("赵敏", 27, 167.5, '女');
  17.         students[5] = new Student("刘亦菲", 36, 168, '女');

  18.         // 需求:按钮年龄升序排序。可以调用sun公司写好的API直接对数组进行排序。
  19. //        Arrays.sort(students, new Comparator<Student>() {
  20. //            @Override
  21. //            public int compare(Student o1, Student o2) {
  22. //                return o1.getAge() - o2.getAge(); // 按照年龄升序!
  23. //            }
  24. //        });

  25. //        Arrays.sort(students, (Student o1, Student o2) -> {
  26. //            return o1.getAge() - o2.getAge(); // 按照年龄升序!
  27. //        });

  28. //        Arrays.sort(students, (o1,  o2) -> {
  29. //            return o1.getAge() - o2.getAge(); // 按照年龄升序!
  30. //        });

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

  32.         // 遍历数组中的学生对象并输出
  33.         for (int i = 0; i < students.length; i++) {
  34.             Student s = students[i];
  35.             System.out.println(s);
  36.         }
  37.     }

  38.     public static void test2(){
  39.         JFrame win = new JFrame("登录窗口");
  40.         win.setSize(300, 200);
  41.         win.setLocationRelativeTo(null); // 居中显示。
  42.         win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  43.         JPanel panel = new JPanel();
  44.         win.add(panel);

  45.         JButton btn = new JButton("登录");
  46.         panel.add(btn);
  47.         // java要求必须给这个按钮添加一个点击事件监听器对象,这样就可以监听用户的点击操作,就可以做出反应。
  48.         // 开发中不是我们要主动去写匿名内部类,而是用别人的功能的时候,别人可以让我们写一个匿名内部类吗,我们才会写!!
  49. //        btn.addActionListener(new ActionListener() {
  50. //            @Override
  51. //            public void actionPerformed(ActionEvent e) {
  52. //                System.out.println("登录成功!");
  53. //            }
  54. //        });

  55. //        btn.addActionListener((ActionEvent e) -> {
  56. //                System.out.println("登录成功!");
  57. //        });

  58. //        btn.addActionListener((e) -> {
  59. //            System.out.println("登录成功!");
  60. //        });

  61. //        btn.addActionListener(e -> {
  62. //            System.out.println("登录成功!");
  63. //        });

  64.         btn.addActionListener(e ->  System.out.println("登录成功!"));

  65.         win.setVisible(true);
  66.     }
  67. }
复制代码
1.jpg

Lambda表达式的省略规则

作用:用于进一步简化Lambda表达式的写法。
具体规则
参数类型全部可以省略不写。
如果只有一个参数,参数类型省略的同时“()”也可以省略,但多个参数不能省略“()”
如果Lambda表达式中只有一行代码,大括号可以不写,同时要省略分号“;”如果这行代码是return语句,也必须去掉return。
网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
微信扫码

网站建设,公众号小程序开发,商城小程序,系统定制开发,App软件开发等

粤ICP备2024252464号

在本版发帖
微信扫码
QQ客服返回顶部
快速回复 返回顶部 返回列表