最后
本人也收藏了一份java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
java面试核心知识点
已经有读者朋友靠着这一份java面试知识点指导拿到不错的offer了
public class a {
private class b {
private class c {
public void methodc() {
system.out.println("this is methodc");
}
}
}
}
在这个例子中,类a包含了类b,类b包含了类c。现在我们可以使用反射来探索这个嵌套结构:
public class main {
public static void main(string[] args) throws exception {
class<?> classa = a.class;
class<?> classb = a.b.class;
class<?> classc = a.b.c.class;
system.out.println("class a: " + classa.getname());
system.out.println("class b: " + classb.getname());
system.out.println("class c: " + classc.getname());
// 获取类b中的所有成员类(嵌套成员)
class<?>[] nestmembersofb = classb.getnestmembers();
system.out.println("nest members of b:");
for (class<?> member : nestmembersofb) {
system.out.println("- " + member.getname());
}
// 获取类c的嵌套主机(即类b)
class<?> nesthostofc = classc.getnesthost();
system.out.println("nest host of c: " + nesthostofc.getname());
}
}
3. 整理一下问题
- 我们可以通过class类做什么?
class类主要作用是允许程序在运行时获取类信息,并通过反射机制实例化对象、访问和修改类的字段、调用类的方法等。 - 我们要怎么获取class类的对象?
使用.class语法;
调用对象的getclass()方法;
使用class.forname()方法。 - 怎么修改一个字段值?
import java.lang.reflect.field;
public class main {
public static void main(string[] args) throws exception {
myclass myobject = new myclass("hello, world!");
system.out.println("before modification: " + myobject.getmyfield());
field field = myclass.class.getdeclaredfield("myfield");
field.setaccessible(true); // 设置字段为可访问,因为 myfield 是私有字段
field.set(myobject, "modified value");
system.out.println("after modification: " + myobject.getmyfield());
}
}
这段代码通过getdeclaredfield()获取了私有字段 myfield 的 field 对象,并通过 setaccessible(true) 方法设置了字段的可访问性,因为 myfield 是私有字段。最后,我们使用 field.set(myobject, “modified value”) 将 myfield 的值修改为 “modified value”。
-
class类的常用方法?
- getname():获取类的名称。
- getmodifiers():获取类的修饰符。
- getsuperclass():获取类的父类。
- getinterfaces():获取类实现的接口数组。
- getfield(string name):获取指定名称的公共字段。
- getmethod(string name, class<?>… - parametertypes):获取指定名称和参数类型的公共方法。
- newinstance():通过无参构造方法实例化一个对象(已过时)。
-
怎么通过反射调用方法?
使用 method 对象的 invoke() 方法来调用一个方法。 -
反射机制用在动态代理?
动态代理是一种利用反射机制在运行时创建代理类的技术。在 java 中,可以使用 java.lang.reflect.proxy 类来创建动态代理。动态代理通常用于在不修改源代码的情况下对方法调用进行额外的处理,比如添加日志、性能监控、事务管理等。
下面是一个简单的示例,展示了如何使用动态代理:
import java.lang.reflect.invocationhandler;
import java.lang.reflect.method;
import java.lang.reflect.proxy;
// 定义一个接口
interface myinterface {
void mymethod();
}
// 实现接口的类
class myclass implements myinterface {
public void mymethod() {
system.out.println("real object method");
}
}
// 实现 invocationhandler 接口,用于处理方法调用
class myinvocationhandler implements invocationhandler {
private object target;
public myinvocationhandler(object target) {
this.target = target;
}
public object invoke(object proxy, method method, object[] args) throws throwable {
system.out.println("before method call");
object result = method.invoke(target, args);
system.out.println("after method call");
return result;
}
}
public class main {
public static void main(string[] args) {
myclass realobject = new myclass();
myinterface proxyobject = (myinterface) proxy.newproxyinstance(
realobject.getclass().getclassloader(),
realobject.getclass().getinterfaces(),
new myinvocationhandler(realobject));
# 分享
这次面试我也做了一些总结,确实还有很多要学的东西。相关面试题也做了整理,可以分享给大家,了解一下面试真题,想进大厂的或者想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能停止!

spring cloud实战

spring boot实战

面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
> **本文已被[coding开源项目:【一线大厂java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
发表评论