每日十题八股-2024年11月29日

1.非静态内部类可以直接访问外部方法,编译器是怎么做到的?
2.有一个父类和子类,都有父类子类静态代码块、静态变量、构造方法,在我new一个子类对象的时候,加载顺序是怎么样的?
3.深拷贝和浅拷贝的区别?
4.实现深拷贝的三种方法是什么?
5.什么是泛型?
6.java创建对象有哪些方式?
7.Java创建对象除了new还有别的什么方式?
8.New出的对象什么时候回收?
9.什么是反射?
10.反射在你平时写代码或者框架中的应用场景有哪些?

1.非静态内部类可以直接访问外部方法,编译器是怎么做到的?

编译器在生成字节码时会为非静态内部类维护一个指向外部类实例的引用。这个引用使得非静态内部类能够访问外部类的实例变量和方法。即在生成非静态内部类的构造方法是将外部类实例作为参数传入,并在内部类实例化的过程中,建立内部类实例与外部类实例的联系,从而实现直接访问外部方法的功能。

2.有一个父类和子类,都有父类子类静态代码块、静态变量、构造方法,在我new一个子类对象的时候,加载顺序是怎么样的?

这个引用使得非静态内部类能够访问外部类的实例变量和方法。

3.深拷贝和浅拷贝的区别?

浅拷贝:创建一个对象,将原来对象的基本类型字段值复制到新对象,但是源对象内部的引用类型字段只复制引用。
深拷贝:深拷贝会递归复制对象内部所有引用类型的字段,生成一个全新的对象以及其内部的所有对象。

4.实现深拷贝的三种方法是什么?

**序列化与反序列化:**通过序列化,我们可以将一个对象转化为字节流,再通过反序列化,将这个字节流重新构建成一个新的对象。这样,我们就可以创建出一个与原对象内容完全相同,但是在内存中位于不同地址的对象。
**实现 Cloneable 接口并重写 clone() 方法:**要被clone的对象实现Clonable接口、重写clone方法并将访问权限改为public。
**手动递归复制:**针对特定对象结构,手动递归复制对象及其引用类型字段。适用于对象结构复杂度不高的情况。

5.什么是泛型?

泛型是Java语言中的一个重要的特性。它允许类、接口和方法在定义时使用一个或多个类型参数。它允许参数在程序运行时才被指定为具体的类型。
适用于多种数据类型执行相同的代码。
泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)。

6.java创建对象有哪些方式?

1.new
2.反序列化:通过将对象序列化(保存到文件或网络传输)然后再反序列化(从文件或网络传输中读取对象)的方式来创建对象,对象能被序列化和反序列化的前提是类实现Serializable接口。
3.Class类中的newInstance(反射)
4.Constructor类中的newInstance(反射)
5.clone方法:我们必须先实现 Cloneable 接口并实现其定义的 clone 方法。

7.Java创建对象除了new还有别的什么方式?

8.New出的对象什么时候回收?

在这里插入图片描述
在这里插入图片描述

9.什么是反射?

反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。
在这里插入图片描述

10.反射在你平时写代码或者框架中的应用场景有哪些?

JDBC 的数据库的连接

  1. 在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成
  2. 通过Class.forName()加载数据库的驱动程序 (通过反射加载,前提是引入相关了Jar包)
  3. 通过 DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码
  4. 通过Connection 接口接收连接

Spring 通过 XML 配置模式装载 Bean 的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值