Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
  • Java语法

    • String
    • 面向对象
      • 面向对象三大特征
      • 接口&抽象类
      • 静态方法和成员方法区别?
      • 静态变量作用
      • Comparable&Comparator
      • final finalize finally
      • 重载与重写区别?
      • hashCode()与equals()?
    • 反射
    • 泛型
    • 序列化
    • 动态代理
    • IO
    • 回调
    • SPI
    • 异常
    • 注解
  • Java容器

  • Java新特性

  • IDEA常用快捷键
  • 正则表达式
  • API
  • 场景题

  • JavaSE
  • Java语法
Nreal
2023-11-21
目录

面向对象

# 面向对象三大特征

  • 封装:将属性private关键字隐藏在内部,对外暴露set,get方法

  • 继承:子类继承父类,子类可以访问父类的属性和方法,也可以重写一些父类的方法;

  • 多态:父类的引用指向子类的实例,引用类型的变量发出的方法调用到底执行的哪个类中的方法,是在运行期才能确定;

    多态可以通过方法重写和重载来实现;

# 接口&抽象类

区别:

  • 单继承,实现多接口
  • 都可以有成员变量,接口默认public static final,抽象类默认default;
  • 自上而下,自下而上;

共同点:

  1. 都不能实例化
  2. 都可以包含抽象方法

# 静态方法和成员方法区别?

  1. 调用方式

    成员方法 对象名.方法名;

    静态方法 类名.方法名;

    静态方法不能使用this,this代指当前对象 当静态方法完成加载可以执行时 对象可能还没有创建;

  2. 加载时期

    成员方法:随着创建对象调用方法时加载;

    静态方法:随着类的加载就会加载静态方法(变量);

# 静态变量作用

可以被类的所有实例共享,静态变量只会被分配一次内存,即使创建多个对象,节省内存;

# Comparable&Comparator

Comparable:

package java.lang;

public interface Comparable<T> {
    int compareTo(T);
}
1
2
3
4
5

返回负值:正序排序

public class User implements Comparable<User> {
    private String username; // 用户名
    private Integer age; // 年龄

    @Override
    public int compareTo(User nextUser) {
        // 这里我们先直接使用 Integer 自带的 compareTo 进行比较
        return this.age.compareTo(nextUser.getAge());
    }
}
1
2
3
4
5
6
7
8
9
10

Comparator:

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}
1
2
3
4
5

负值:o1排o2前面

Collections.sort(userList, (o1, o2) -> {
    return o1.getAge().compareTo(o2.getAge());
});
log.info("userList: {}", userList);
// userList: [User(username=李四, age=9), User(username=张三, age=11)]
1
2
3
4
5

# final finalize finally

  • final

    修饰成员变量,如果是基本数据类型,值不能改变;引用类型,只能指向初始化指向的那个对象,不能指向别的对象,内容可以改变;

    修饰方法,该方法不能被重写,可以被重载;

    修饰类,不能被继承,所有方法不能被重写,所以不能同时使用abstract和final修饰类;

  • finalize

    用于回收资源,再垃圾回收器清除对象之前调用;

    释放资源:关闭连接,关闭文件

  • finally

    用于捕捉异常,也不一定执行,如虚拟机终止;

# 重载与重写区别?

  • 重载:同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理;

  • 重写:发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写;

    1. 方法名、参数列表必须相同,子类方法返回值类型应比父类方法返回值类型更小或相等,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;

    2. 如果父类方法访问修饰符为 private final static 则子类就不能重写该方法,但是被 static 修饰的方法能够被再次声明;

    3. 构造方法无法被重写;

# hashCode()与equals()?

hashCode()判断对象相等更快,但是会误判;

两个对象相等,则hashCode相等,如果equals判断两个对象相等,则两个对象的hashCode值也要相等;

如果重写equals()没重写hashCode()会导致equals()判断的相等的对象,hashCode不相等;

String
反射

← String 反射→

Theme by Vdoing | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式