Java基础学习day08

简介: 本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。

Java基础学习day08

代码块

定义

  • 代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。

静态代码块:

格式

  • static { }

特点

  • 类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次。

作用

  • 完成类的初始化,例如:对静态变量的初始化赋值。

实例代码块:

格式

  • { }

特点

  • 每次创建对象时,执行实例代码块,并在构造器前执行。

作用

  • 和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值。

内部类

定义

  • 如果一个类定义在另一个类的内部,这个类就是内部类。
  • 当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。
public class Car{
    // 内部类
    public class Engine{
    }
}

成员内部类

定义

  • 就是类中的一个普通成员,类似前面我们学过的普通的成员变量、成员方法。
public class Outer {
    // 成员内部类
    public class Inner {
        
    }
}

创建对象的格式:
外部类名.内部类名 对象名 = new 外部类(...).new 内部类(...);
Outer.Inner in =  new Outer().new  Inner();

访问特点

  • 1、成员内部类种可以直接访问外部类的实例成员、静态成员。
  • 2、成员内部类的实例方法中,可以直接拿到当前外部类对象,格式是:外部类名.this 。

静态内部类

定义

  • 有static修饰的内部类,属于外部类自己持有。
public class Outer{
    // 静态内部类
    public static class Inner{

    }
}

外部类名.内部类名 对象名 = new 外部类.内部类();
Outer.Inner in =  new Outer.Inner();

访问特点

  • 可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。

局部内部类(了解)

定义

  • 局部内部类是定义在在方法中、代码块中、构造器等执行体中。

匿名内部类

定义

  • 是一种特殊的局部内部类;
  • 所谓匿名:指的是程序员不需要为这个类声明名字,默认有个隐藏的名字。
new  类或接口(参数值…) {
    类体(一般是方法重写)
    };

new Animal(){
    @Override
    public void cry() {
    }
};

特点

  • 匿名内部类本质就是一个子类,并会立即创建出一个子类对象。

作用

  • 用于更方便的创建一个子类对象。

常见方式

  • 通常作为一个对象参数传输给方法。

应用场景

  • 调用别人提供的方法实现需求时,这个方法正好可以让我们传输一个匿名内部类对象给其使用。

案例

public class Test {
    public static void main(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("玛卡巴卡", 16, 170.1);
        students[1] = new Student("唔西迪西", 12, 158.2);
        students[2] = new Student("依古比古", 18, 168.5);
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge() - o2.getAge();
            }
        });

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

函数式编程

认识Lambda

定义

  • 此“函数”类似于数学中的函数(强调做什么),只要输入的数据一致返回的结果也是一致的

解决问题

  • 使用Lambda函数替代某些匿名内部类对象,从而让程序代码更简洁,可读性更好。

Lambda表达式

  • JDK 8开始新增的一种语法形式,它表示函数。
  • 可以用于替代某些匿名内部类对象,从而让程序更简洁,可读性更好。
(被重写方法的形参列表) -> {
    被重写方法的方法体代码。
    }

函数式接口

  • 有且仅有一个抽象方法的接口。

注意事项

  • Lambda表达式只能替代函数式接口的匿名内部类!!!
  • 将来我们见到的大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,该注解用于约束当前接口必须是函数式接口。

案例

Arrays.sort(students, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getAge() - o2.getAge();
    }
});


Arrays.sort(students, (Student o1, Student o2) -> {
    return o1.getAge() - o2.getAge();
});

省略规则

作用

  • 用于进一步简化Lambda表达式的写法。

具体规则

  • 参数类型全部可以省略不写。
  • 如果只有一个参数,参数类型省略的同时“()”也可以省略,但多个参数不能省略“()” 。
  • 如果Lambda表达式中只有一行代码,大括号可以不写,同时要省略分号“;”如果这行代码是return语句,也必须去掉return。
相关文章
|
19天前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
42 5
|
19天前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
94 1
|
1月前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
20天前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
133 3
|
20天前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
46 1
|
20天前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
91 1
|
28天前
|
算法 Java
Java基础学习day03-作业
本内容包含多个Java编程案例,涵盖条件判断、循环、数组、随机数生成、素数判断等基础算法练习,适用于巩固Java语法与逻辑思维训练。
89 6
|
25天前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
54 2
|
25天前
|
安全 Java 编译器
Java基础学习day06
本节学习Java继承与多态核心概念:继承通过extends实现,子类可复用父类非私有成员,支持单继承与多层继承,遵循就近原则并可用super调用父类成员;方法重写需满足权限与返回值约束,常用于重写toString等。多态基于继承,实现父类引用指向子类对象,提升扩展性但无法直接访问子类独有方法,可通过instanceof安全类型转换。
90 2
|
28天前
|
存储 Java 索引
Java基础学习day04
本节讲解Java数组基础,包括静态与动态初始化、元素访问及遍历方法,并介绍二维数组的定义与使用,帮助理解程序数据存储方式。
56 5

热门文章

最新文章