先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
反射的基本步骤:
1、获得Class对象,就是获取到指定的名称的字节码文件对象。
2、实例化对象,获得类的属性、方法或构造函数。
3、访问属性、调用方法、调用构造函数创建对象。
@、反射的好处?
可以节省很多资源,动态加载
我们的项目底层有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,
这个时候反射就有用了,
假设 com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection这两个类我们要用,
这时候我们的程序就写得比较动态化,通过Class tc =Class.forName(“com.java.dbtest.TestConnection”);
通过类的全类名让jvm在服务器中找到并加载这个类,而如果是oracle则传入的参数就变成另一个了。
这时候就可以看到反射的好处了,这个动态性就体现出java的特性了!
@、反射机制会不会有性能问题?
@、反射的用途及实现?
@、反射是不是很慢,我们在项目中是否要避免使用反射
@、反射应用场景及使用案例?
Java中使用反射获取一个类的全部信息
public static void getFunctionAllMessages(String className) throws ClassNotFoundException, InstantiationException,
IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// className为类的全名
Class c = Class.forName(className);
// 获取类名
System.out.println("类名:" + c.getSimpleName());
// 获取父类名
System.out.println("父类名:" + c.getSuperclass().getSimpleName());
// 获取这个类的全部方法
Method[] methods = c.getMethods();
System.out.println("方法有:");
for (int i = 0; i < methods.length; i++) {
// 打印这个方法的修饰符 返回类型 方法名
System.out.println(Modifier.toString(methods[i].getModifiers()) + " " + methods[i].getReturnType().getName()
+ " " + methods[i].getName() + "();");
// 反射调用特定方法
// if(methods[i].getName().equals("isEmpty")) {
// Object ob = c.newInstance();
// System.out.println("===="+methods[i]);
// System.out.println(methods[i].invoke(ob));
// }
}
System.out.println("属性有:");
// 获取这个类的全部属性
Field[] fields = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
// 打印属性的 修饰符 类型 名称
System.out.println(Modifier.toString(fields[i].getModifiers()) + " " + fields[i].getGenericType() + " "
+ fields[i].getName());
}
@、如何生成获取到字节码文件对象的实例对象
//类加载
Class clazz = Class.forName(“cn.itcast.bean.Person”);
// 直接获得指定的类型
clazz = Person.class;
// 根据对象获得类型
Object obj = new Person(“zhangsan”, 19);
clazz = obj.getClass();
@、什么是 java 序列化?Java序列化与反序列化,什么情况下需要序列化?
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
为什么需要序列化与反序列化
我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。
@、
Object obj = clazz.newInstance();//该实例化对象的方法调用就是指定类中的空参数构造函数,给创建对象进行初始化。
当指定类中没有空参数构造函数时,该如何创建该类对象呢?请看method_2();
最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-k3oTWT7q-1713556202049)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!