Java开发学习day03-面向对象-内部类&泛型&常用API

1.匿名内部类的使用格式和场景是怎样的?

使用格式
new  类或接口(参数值…) {
       类体(一般是方法重写);
};
使用场景

匿名内部类可以更方便的创建出一个子类对象,通常作为一个参数传输给方法。

2.泛型的作用是什么?如何定义一个泛型类?

泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。

3.说一说你对泛型上限、下限、擦除的理解

泛型上限(Upper Bounds)

泛型上限指的是泛型参数可以接收的类型范围的上限。使用extends关键字来指定上限,意味着泛型参数可以是指定类或者该类的子类。

泛型下限(Lower Bounds)

泛型下限是泛型参数可以接收的类型范围的下限。从Java 7开始,可以使用super关键字来指定下限,意味着泛型参数可以是指定类或者该类的超类。

泛型擦除(Type Erasure)

泛型擦除是Java泛型实现的一个限制,它指的是在编译时,所有的泛型类型信息都会被擦除,运行时将不再保留泛型的类型信息。其原因是:为了向后兼容,Java的泛型是通过在编译时插入类型检查和类型转换来实现的,而在运行时,所有的泛型都被替换为它们的边界(如果没有指定边界,则默认为Object)。

4.Object中的toString和equals方法作用是什么?我们经常怎么用?

toString:一般是指返回一个代表对象的 String,默认情况下,它返回对象的类名和哈希码的无符号十六进制表示的字符串,格式为 "ClassName@hashCode"

equals:用于比较两个对象是否相等。默认实现比较的是对象的内存地址,即它检查两个对象引用是否指向同一个实例。

一般情况下我们需要对这两个方法进行重写:

//重写toString
    @Override
    public String toString() {
        return "Person{name='" + name + '\'' + ", age=" + age + '}';
    }

//重写equals
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && name.equals(person.name);
    }

5.为什么要有包装类?什么是自动装箱和拆箱?

包装类(Wrapper Classes)在Java中为基本数据类型提供了对应的类类型。它们的存在主要是为了解决基本类型与对象之间的一些不兼容问题,以及提供一些面向对象的特性。

自动装箱(Autoboxing)

将基本类型转换为对应的包装类对象的过程。例如,当你将一个 int 类型的值赋给一个 Integer 类型变量时,Java会自动创建一个 Integer 对象。

拆箱(Unboxing)

将包装类对象转换为对应的基本类型的过程。例如,当你将一个 Integer 对象赋给一个 int 类型变量时,Java会自动调用 intValue() 方法来获取基本类型值。

6.写出下面代码的执行原理

1、自动装箱

这里,100 是一个 int 类型的基本类型。当它被赋值给 Integer 类型的变量 x 时,会发生自动装箱。Java编译器会自动将 int 类型的值转换为 Integer 对象。

2、算数赋值

这行代码使用了 += 运算符,它等价于 x = x + 200;。此时,x 是一个 Integer 对象,而 200 是一个 int 类型的值。在这里会发生拆箱,xint 值被取出与 200 相加,然后结果需要重新装箱为 Integer 对象。

3、打印结果

7.String、StringBuilder、StringBuffer、StringJoiner的区别是什么?

String

String 是Java中不可变的对象,表示字符串常量。一旦创建,它的值就不能被改变。字符串连接操作(如使用 + 操作符)实际上会创建新的 String 对象,因此对于大量字符串操作,这可能会导致性能问题。适用于不需要修改的文本。

StringBuilder

StringBuilder 是可变的字符串对象,可以进行字符串拼接、插入、删除等操作。内部使用可调整大小的字符数组来存储字符串。非线程安全,即不保证线程安全,因此在单线程环境下性能更优。适用于需要频繁修改的字符串操作。

StringBuffer

StringBuffer 与 StringBuilder 类似,也是可变的字符串对象,可以进行各种字符串操作。主要区别在于它是线程安全的,即多个线程可以同时访问 StringBuffer 对象,而不会影响程序的运行。由于线程安全的特性,其性能比 StringBuilder 稍低。适用于多线程环境下的字符串操作。

StringJoiner

StringJoiner 是Java 8引入的一个用于构造字符串序列的类。它允许你指定分隔符、前缀和后缀,从而方便地连接字符串。不像 StringBuilder 和 StringBufferStringJoiner 更专注于连接操作,并且提供了链式调用的方法。通常用于将集合或数组中的元素转换成一个由分隔符分隔的字符串。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值