- 浏览: 182652 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (101)
- DataBase (8)
- Java (37)
- Software (14)
- JavaScript (8)
- XML (4)
- WebService (5)
- SharePoint (6)
- ESB (4)
- Algorithm&Data Structure (5)
- CloudFoundry (1)
- liferay (1)
- portal (1)
- System Analysis (1)
- Storm (2)
- linux (3)
- Server (1)
- elasticsearch (1)
- angular (1)
- spark (1)
- python (2)
- ELK (1)
- Resin (1)
- Flink (1)
- python AI (1)
最新评论
-
yuekinger:
若果 64bit 下正常 32位系统下不正常运行的 排除dll ...
Java 调用 C# DLL -
yuekinger:
Win764 系统下成功! 实现 java 调用 c++ 链接 ...
Java 调用 C# DLL -
sdasds:
sdasds 写道pp1314 写道x931100537 写道 ...
Java 调用 C# DLL -
sdasds:
pp1314 写道x931100537 写道Exception ...
Java 调用 C# DLL -
pp1314:
x931100537 写道Exception in threa ...
Java 调用 C# DLL
1, 类引导,反射机制下的对象创建
类引导最终会字节流传给native 的java.lang.ClassLoader.defineClass1方法。
Class的 newInstance 方法 创建对象实例的时候,会调用无参的构造函数,如果类中没有 无参数的构造函数,JVM 会抛出java.lang.InstantiationException异常,无法进行实例化。
针对有参数的构造函数的类,可以调用class的getDeclaredMethod和Constructor 来构造这一个class的对象。
如果无参的构造函数是private类型,JVM调用该类时,会报private权限的错误。将无参的构造函数设为public类型可以解决该问题。
备注:
Java in a Nutshell这本书的第12章介绍了与class的反射机制有关的基本方法。
类引导最终会字节流传给native 的java.lang.ClassLoader.defineClass1方法。
Class的 newInstance 方法 创建对象实例的时候,会调用无参的构造函数,如果类中没有 无参数的构造函数,JVM 会抛出java.lang.InstantiationException异常,无法进行实例化。
针对有参数的构造函数的类,可以调用class的getDeclaredMethod和Constructor 来构造这一个class的对象。
如果无参的构造函数是private类型,JVM调用该类时,会报private权限的错误。将无参的构造函数设为public类型可以解决该问题。
URL url1 = new URL("file:/E:/Server/vsmessages_fortest.jar"); URLClassLoader myClassLoader = new URLClassLoader( new URL[] { url1 } ); Class myClass = myClassLoader.loadClass("cn.com.*.messageagent.vo.MessageVO"); Method m01 = myClass.getDeclaredMethod("setClientId", String.class); Method m02 = myClass.getDeclaredMethod("getClientId"); Constructor ctor = myClass.getConstructor(String.class); ctor.setAccessible(true); Object targetObj1 = ctor.newInstance("1234567"); // m01.invoke(targetObj1, "123456"); String clientId = (String) m02.invoke(targetObj1); log.info("clientId:" + clientId);
备注:
Java in a Nutshell这本书的第12章介绍了与class的反射机制有关的基本方法。
Example 12.1: Obtaining Class and Member Information with the Reflection API import java.lang.reflect.*; /** A program that displays a class synopsis for the named class. */ public class ShowClass { /** The main method. Print info about the named class. */ public static void main(String[] args) throws ClassNotFoundException { Class c = Class.forName(args[0]); print_class(c); } /** Display the modifiers, name, superclass, and interfaces of a class * or interface. Then go and list all constructors, fields, and methods. */ public static void print_class(Class c) { // Print modifiers, type (class or interface), name, and superclass. if (c.isInterface()) { // The modifiers will include the "interface" keyword here... System.out.print(Modifier.toString(c.getModifiers()) + c.getName()); } else System.out.print(Modifier.toString(c.getModifiers()) + " class " + c.getName() + " extends " + c.getSuperclass().getName()); // Print interfaces or super-interfaces of the class or interface. Class[] interfaces = c.getInterfaces(); if ((interfaces != null) && (interfaces.length > 0)) { if (c.isInterface()) System.out.println(" extends "); else System.out.print(" implements "); for(int i = 0; i < interfaces.length; i++) { if (i > 0) System.out.print(", "); System.out.print(interfaces[i].getName()); } } System.out.println(" {"); // Begin class member listing. // Now look up and display the members of the class. System.out.println(" // Constructors"); Constructor[] constructors = c.getDeclaredConstructors(); for(int i = 0; i < constructors.length; i++) // Display constructors. print_method_or_constructor(constructors[i]); System.out.println(" // Fields"); Field[] fields = c.getDeclaredFields(); // Look up fields. for(int i = 0; i < fields.length; i++) // Display them. print_field(fields[i]); System.out.println(" // Methods"); Method[] methods = c.getDeclaredMethods(); // Look up methods. for(int i = 0; i < methods.length; i++) // Display them. print_method_or_constructor(methods[i]); System.out.println("}"); // End class member listing. } /** Return the name of an interface or primitive type, handling arrays. */ public static String typename(Class t) { String brackets = ""; while(t.isArray()) { brackets += "[]"; t = t.getComponentType(); } return t.getName() + brackets; } /** Return a string version of modifiers, handling spaces nicely. */ public static String modifiers(int m) { if (m == 0) return ""; else return Modifier.toString(m) + " "; } /** Print the modifiers, type, and name of a field. */ public static void print_field(Field f) { System.out.println(" " + modifiers(f.getModifiers()) + typename(f.getType()) + " " + f.getName() + ";"); } /** Print the modifiers, return type, name, parameter types, and exception * type of a method or constructor. Note the use of the Member interface * to allow this method to work with both Method and Constructor objects. */ public static void print_method_or_constructor(Member member) { Class returntype=null, parameters[], exceptions[]; if (member instanceof Method) { Method m = (Method) member; returntype = m.getReturnType(); parameters = m.getParameterTypes(); exceptions = m.getExceptionTypes(); } else { Constructor c = (Constructor) member; parameters = c.getParameterTypes(); exceptions = c.getExceptionTypes(); } System.out.print(" " + modifiers(member.getModifiers()) + ((returntype!=null)? typename(returntype)+" " : "") + member.getName() + "("); for(int i = 0; i < parameters.length; i++) { if (i > 0) System.out.print(", "); System.out.print(typename(parameters[i])); } System.out.print(")"); if (exceptions.length > 0) System.out.print(" throws "); for(int i = 0; i < exceptions.length; i++) { if (i > 0) System.out.print(", "); System.out.print(typename(exceptions[i])); } System.out.println(";"); } }
发表评论
-
实时推送
2018-12-20 15:47 790初探和实现websocket心跳重连 http://www ... -
Resin 维护
2018-06-13 09:42 682<!--[if gte mso 9]>< ... -
自动化测试
2016-12-13 17:16 6481、linux下 执行JMeter测试脚本 在机器的 ... -
Spark 记录
2016-07-15 09:47 7571、java.lang.StackOverflowError ... -
Java 日常操作
2016-03-15 09:57 625Eclipse 闪退 1、增加内存设置 -vmargs ... -
maven技术分享(一) 标准maven项目的搭建
2014-08-27 14:19 0其中的nexus 的maven 私服搭建,参考网上的资料。 ... -
Java 调用 C# DLL
2014-04-11 16:57 15768Java无法直接调用C# dll,需要通过经过桥接的方式, ... -
Apache 负载均衡的环境搭建 (使用Tomcat作为web server)
2012-03-02 17:21 2903前言 使用tomcat作为web server,搭建Apach ... -
知识归纳索引
2012-02-23 09:57 1190本片文章记录了读过的书籍和文章,并将原始资料作为附件上传。 ... -
acegi 开发笔记
2011-12-26 17:36 8376. 编译acegi-security-1.0.7-s ... -
Mule 开发问题记录
2011-11-30 16:54 17461. A Mule runtime distribution ... -
ActiveMQ问题解决记录
2011-11-09 14:24 12668问题4:Networks of Brokers 在每个acti ... -
Log4j 学习笔记
2011-09-14 12:00 968为了彻底掌握log4j的使用,有必要去了解log4j的实现结构 ... -
ESB 研究
2011-08-24 15:08 1310Introduction to ESB 一些ESB的名词 E ... -
struts 开发笔记
2011-08-24 10:44 13721,struts默认根据http request请求流中的键值 ... -
JMS,ActiveMQ 内部实现的研究
2011-08-23 10:28 10731问题1,AMQ 4的openWireFormat与AMQ 5的 ... -
设计模式
2011-08-04 11:38 10441, 设计模式在JDK中的体现 参见stackoverflow ... -
ActiveMQ 开发
2011-07-29 13:28 26861, 配置activemq.xml时,修改<broker ... -
Java 中的 中文编码
2011-05-26 13:56 54111. java.net.URLEncoder.encode j ... -
Spring + Hibernate 例子(使用petclinic, 利用ant)
2011-03-03 16:30 1062Spring + Hibernate 例子 1. 使用Spr ...
相关推荐
- Java的反射机制还支持动态代理,通过`java.lang.reflect.Proxy`类和`InvocationHandler`接口,可以在运行时创建一个新的类来实现已有的接口。 6. 注解处理: - 反射还可以用于处理注解(Annotation),通过`...
在基础语法部分,Java学习笔记详细讲解了变量、数据类型、运算符、流程控制语句(如if-else、for、while等)、数组以及面向对象编程的基本概念,如类、对象、封装、继承和多态。这些内容是任何Java程序员必备的基础...
4. **反射机制**:介绍如何在运行时动态获取类信息、创建对象、调用方法,以及代理模式的应用。 5. **文件和文件系统操作**:包括文件的读写、目录管理、文件过滤器和文件观察者。 6. **枚举和注解**:解释枚举...
24. **反射机制**:在运行时动态获取类信息,创建对象,调用方法。 25. **Java集合框架高级话题**:如并发容器(ConcurrentHashMap、CopyOnWriteArrayList等),Lambda表达式,Stream API。 26. **设计模式**:...
10. **反射机制**:通过反射可以动态地获取类的信息并操作类的对象,这是Java强大的动态性体现。 11. **JavaSE、JavaEE和JavaME**:这三者分别对应Java的标准版、企业版和微型版,各有不同的应用场景。 12. **JVM...
《狂神说Java笔记资料》是一份全面涵盖Java开发基础知识的文档集,旨在帮助学习者系统地掌握Java编程。这份笔记包含多个章节,每个章节都深入讲解了一个特定的主题,覆盖了从初学者到进阶开发者必备的知识点。 1. *...
**Java学习笔记——Java SE基本知识** Java是一种广泛使用的面向对象的编程语言,以其跨平台、安全性高和可移植性而闻名。Java Standard Edition(Java SE)是Java平台的基础,它提供了开发和运行桌面应用程序、...
9. **反射机制**:Java反射API允许在运行时检查类、接口、构造器和方法的信息,甚至可以动态地创建对象并调用方法。 10. **Java Swing和JavaFX**:这两是Java的图形用户界面(GUI)库,用于创建桌面应用程序。笔记...
15. **反射机制**:通过反射动态获取类的信息,创建对象,调用方法。 以上内容只是基础部分,完整的"狂神说Java入门笔记"可能还涉及更高级的主题,如网络编程、数据库连接、Swing或JavaFX图形界面开发、XML处理等。...
这份"java基础笔记总结"将引导我们深入了解这个强大的面向对象的语言。以下是对这些基础知识的详细解释: 1. **Java简介**:Java是由Sun Microsystems(现为Oracle Corporation)开发的一种高级、跨平台的编程语言...
13. **反射机制**:在运行时动态获取类的信息并操作类的方法和属性。 14. **垃圾回收机制**:Java自动管理内存,垃圾回收器会自动回收不再使用的对象所占用的内存。 15. **泛型**:提供类型安全,允许在编译时检查...
8. **反射**:Java反射机制允许在运行时动态地获取类的信息并操作类的对象,这对于插件系统、序列化、动态代理等高级功能十分有用。 9. **泛型**:泛型引入了类型参数,增强了代码的安全性和可读性。学习如何使用...
笔记共分为17天的学习内容,这意味着它将逐步引导你深入理解Java的核心概念。 第1天:Java简介与环境配置 在第一天,你会了解到Java的历史、特点以及为什么它如此受欢迎。你将学习如何在不同的操作系统(如Windows...
总之,《韩顺平Java从入门到精通笔记完整版》是Java学习者的一份宝贵资料,它覆盖了Java编程的各个方面,从基础到进阶,从理论到实践,旨在帮助你全面理解和掌握这门强大的编程语言。无论你是刚接触编程的新手,还是...
这份“java从入门到精通全过程笔记”将引导你逐步掌握Java的核心概念和技术,从而成为熟练的Java开发者。以下是对这份笔记内容的详细概述: 1. **Java简介**:首先,笔记会介绍Java的历史、特点以及其在软件开发中...
【Java学习笔记-V2】是良葛格精心整理的一份Java学习资源,旨在帮助初学者和进阶者深入理解Java编程语言。这份笔记涵盖了Java的基础概念、语法特性、面向对象编程、异常处理、多线程、集合框架、IO流、网络编程、...
良葛格的Java JDK 5.0学习笔记是一份宝贵的资源,旨在帮助初学者和有经验的开发者深入理解这一版本的新特性和改进。 一、自动类型转换与类型推断(Generics) JDK 5.0引入了泛型,允许在类、接口和方法声明中使用...
Java基础笔记涵盖了Java编程语言的核心概念,是学习Java SE(标准版)的入门资料。这份笔记以Markdown(MD)格式编写,提供了清晰易读的文本结构,适合使用Markdown阅读器或者支持MD格式的编辑器来查看。以下是笔记...
9. **反射**:Java反射API允许程序在运行时动态访问类的信息,创建和操作类的对象,增强了程序的灵活性。 10. **模块系统**:从Java 9开始,JVM引入了模块系统(Project Jigsaw),提高了代码的封装性和可维护性。 ...