首先我们先介绍三种加载类的方法,再反射中我们首选第一种,因为我们不知道他的类里有什么,值知道其路径
// 首先加载类
Class cls = Class.forName("cn.csdn.reflect.Student");
// 2、加载类
Student stu = new Student();
Class cls1 = stu.getClass();
System.out.println(cls1);
// 3、加载类
Class cls2 = Student.class;
System.out.println(Student.class);
下面我们来说如何去解析一个类,首先我们去加载类(定义一个Student.class)
Class cls = Class.forName("cn.csdn.reflect.Student");
// 2、通过无参数的构造器解析
Constructor constructor = cls.getConstructor(null);
// 3、创建类的实例
Student stu = (Student) constructor.newInstance(null);
// 4、调用对象的方法
stu.test();
上面是解析没有参数的类的方法,下面我们来解析还有参数的方法同上步骤,代码如下:
Class cls=Class.forName("cn.csdn.reflect.Student"); Constructor constructor=cls.getConstructo(String.class,int.class);
Student entity = (Student)constructor.newInstance("redarmy",90);
//4、调用方法
entity.study();
System.out.println(entity.getName());
下面我们介绍一下关于反射中传值引起的异常(引用redarmy 老师的)
1、错误bug
java.lang.IllegalArgumentException: wrong number of arguments
异常引起的原因分析:
引起错误的原码:
public Student(String strs[]){
System.out.println(strs.length);
}
执行代码:
//解析:public cn.csdn.reflect.Student(java.lang.String[])
@Test
public void test4()throws Exception{
//1、加载类
Class cls = Class.forName("cn.csdn.reflect.Student");
//2、根据构造器参数类型获取相应的构造器对象
Constructor csr = cls.getConstructor(String[].class);
//3、创建实体对象
Student entity = (Student)csr.newInstance(new String[]{});
//4、调用方法
entity.study();
}
编译环境:jdk1.6
错误分析:由于Student(String strs[])构造器只有一个String数组的参数所以这是编译器会把字符串数组当作一个可变长度参数传 给对象strs,而我们取得方法只有一个参数,所以就会出现wrong number of arguments的异常,我们只要把字符串数组强制转换为一 个Object对象就可以解决这个异常了,
解决方案:
//解析:public cn.csdn.reflect.Student(java.lang.String[])
@Test
public void test4()throws Exception{
//1、加载类
Class cls = Class.forName("cn.csdn.reflect.Student");
//2、根据构造器参数类型获取相应的构造器对象
Constructor csr = cls.getConstructor(String[].class);
String str[]={"111","123"};
//3、创建实体对象
Student entity = (Student)csr.newInstance((Object)str);
//4、调用方法
entity.study();
}
分享到:
相关推荐
Java 反射机制安全漫谈 Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时访问和修改类的信息。然而,这种功能也引入了安全隐患。本文将讨论 Java 反射机制的安全问题,重点介绍反射机制的基本概念、...
Java安全漫谈 - 反射篇(3)深入讲解了如何在Java中通过反射机制处理可变长参数和访问私有方法。反射是Java中一个强大的特性,它允许程序在运行时检查和操作类、接口、字段和方法,极大地增强了代码的灵活性。然而,这...
Java反射机制是Java提供的一种强大的动态类型功能,允许程序在运行时检查类的信息并操作类的对象。在Java安全领域,反射常被用于漏洞利用和代码审计。本文将深入探讨Java反射在安全方面的应用,特别是针对类的加载、...
Kernel-win32的系统调用机制.pdf 漫谈兼容内核之六:二进制映像的类型识别.pdf 漫谈兼容内核之七:Wine的二进制映像装入和启动.pdf 漫谈兼容内核之八:ELF映像的装入_一_.pdf 漫谈兼容内核之九:ELF映像的装入_二_....
漫谈兼容内核之五:Kernel-win32的系统调用机制 漫谈兼容内核之六:二进制映像的类型识别 漫谈兼容内核之七:Wine的二进制映像装入和启动 漫谈兼容内核之八:ELF映像的装入(一) 漫谈兼容内核之九:ELF映像的装入(二)...
01.漫谈兼容内核之一:Wine的系统结构.pdf 02.漫谈兼容内核之二:关于kernel-win32的对象管理.pdf 03.漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 04.漫谈兼容内核之四:Kernel-win32的进程管理.pdf 05.漫谈...
Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制...
架构漫谈(一):什么是架构? 架构漫谈(二):认识概念是理解架构的基础 架构漫谈(三):如何做好架构之识别问题 架构漫谈(四):如何做好架构之架构切分 架构漫谈(五):什么是软件 架构漫谈(六):软件架构...
代码示例可能包含事件发布和订阅机制。 7. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器使原本不兼容的类能够协同工作。在代码中,可能通过类适配器或对象适配器的形式呈现。 8. **策略模式...
漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...
### 漫谈Wine之一:Wine的系统结构 #### 一、Wine简介及研究背景 **Wine**(Wine Is Not an Emulator)是一个兼容层,旨在允许在类Unix系统(如Linux)上运行Microsoft Windows应用程序。本文档主要探讨Wine的核心...
《漫谈兼容内核》是一系列深入探讨操作系统内核兼容性的技术文章集合,主要围绕Windows内核和跨平台兼容性展开。以下将针对压缩包中的各个文件内容进行详细阐述: 1. **Windows的进程间通信(IPC)** Windows的...
在首篇文章《漫谈高数(一)泰勒级数的物理意义》中,作者巧妙地将复杂的数学原理与直观的物理意义相结合,使读者能够更加深刻地理解泰勒级数这一高等数学的重要组成部分。 ### 泰勒级数的本质与应用 #### 泰勒级数...
《360手机卫士的基础之一:插件化方案漫谈》《360手机卫士的基础之一:插件化方案漫谈》《360手机卫士的基础之一:插件化方案漫谈》《360手机卫士的基础之一:插件化方案漫谈》《360手机卫士的基础之一:插件化方案...
【天文漫谈】考试题目和答案涵盖了多个天文知识点,这些知识点包括但不限于: 1. **星座识别**:北斗七星属于大熊座,而非小犬座、小熊座或大犬座。在冬夜21:00左右,可以观察到猎户座。在秋夜,长江流域以南地区...
《漫谈兼容内核》是一本深入探讨操作系统内核,特别是Linux与Windows内核之间差异与共性的电子书籍。此书对于理解这两种广泛使用的操作系统核心的运作机制具有极高的价值。通过对内核的剖析,我们可以了解到操作系统...
华为防火墙技术漫谈,理论篇共包含十章,涵盖了会话与状态检测、安全策略、攻击防范、NAT、GRE 、L2TP 、IPSec 、SSL、双机热备、出口选路的原理、应用场景及配置方法
Java 安全漫谈目录Java安全漫谈 - 01.Java的动态特性——反射Java安全漫谈 - 02.引用的简单使用Java安全漫谈 - 03.反射的几个进阶技巧Java安全漫谈 - 04.RMI的通信过程分析Java安全漫谈 - 05.利用codebase攻击RMI...