- 浏览: 48462 次
- 性别:
- 来自: 深圳
最新评论
-
sunspring:
我正不知道怎么配置呢
试试先
我也是习惯了eclipse,又是 ...
Eclipse C/C++配置 -
badboy_blue:
<div class="quote_title ...
Eclipse C/C++配置 -
cenziboy:
为什么要用 Eclipse ?
VC 2010 不行吗?
Eclipse C/C++配置
能够分析类能力的程序成为反射。
使用反射的主要对象是工具构造者,而非应用程序员。
1、Class
返回Class类得实例有几种方式:
//a Girl g1 = new Girl(); Class c0 = g1.getClass(); //b String className = "com.gong.reflect.Girl"; Class c1 = Class.forName(className); //c Class c2 = Girl.class;
2、检查类结构
检查类结构--java反射机制的重要内容
java.lang.reflect包中三个类Field、Method、Constructor分别用于描述类得域、方法和构造器。
public class ReflectionTest { public static void main(String[] args) { // read class name from command line args or user input String name; if (args.length > 0) name = args[0]; else { Scanner in = new Scanner(System.in); System.out.println("Enter class name (e.g. java.util.Date): "); name = in.next(); } try { Class cl = Class.forName(name); Class supercl = cl.getSuperclass(); String modifiers = Modifier.toString(cl.getModifiers()); //getModifiers()返回一个描述构造器、方法或域的修饰符的整型数值 System.out.println(cl.getModifiers()); //Modifier.toString返回对应modifier位设置的修饰符的字符串表示 System.out.println("modifiers:"+modifiers); if (modifiers.length() > 0) System.out.print(modifiers + " "); System.out.print("class " + name); if (supercl != null && supercl != Object.class) System.out.print(" extends " + supercl.getName()); System.out.print("\n{\n"); printConstructors(cl); System.out.println(); printMethods(cl); System.out.println(); printFields(cl); System.out.println("}"); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.exit(0); } public static void printConstructors(Class cl) { Constructor[] constructors = cl.getDeclaredConstructors(); for (Constructor c : constructors) { String name = c.getName(); System.out.print(" "); String modifiers = Modifier.toString(c.getModifiers()); if (modifiers.length() > 0) System.out.print(modifiers + " "); System.out.print(name + "("); // print parameter types Class[] paramTypes = c.getParameterTypes(); for (int j = 0; j < paramTypes.length; j++) { if (j > 0) System.out.print(", "); System.out.print(paramTypes[j].getName()); } System.out.println(");"); } } public static void printMethods(Class cl) { Method[] methods = cl.getDeclaredMethods(); for (Method m : methods) { Class retType = m.getReturnType(); String name = m.getName(); System.out.print(" "); // print modifiers, return type and method name String modifiers = Modifier.toString(m.getModifiers()); if (modifiers.length() > 0) System.out.print(modifiers + " "); System.out.print(retType.getName() + " " + name + "("); // print parameter types Class[] paramTypes = m.getParameterTypes(); for (int j = 0; j < paramTypes.length; j++) { if (j > 0) System.out.print(", "); System.out.print(paramTypes[j].getName()); } System.out.println(");"); } } public static void printFields(Class cl) { Field[] fields = cl.getDeclaredFields(); for (Field f : fields) { Class type = f.getType(); String name = f.getName(); System.out.print(" "); String modifiers = Modifier.toString(f.getModifiers()); if (modifiers.length() > 0) System.out.print(modifiers + " "); System.out.println(type.getName() + " " + name + ";"); } } }
3、运行时反射分析对象
反射机制的默认行为受限于java访问控制。
public class FieldTest { public static void main(String[] args) { try { Girl g = new Girl("lady gaga", 26, 38); Class cl = g.getClass(); Field f = cl.getDeclaredField("name"); //为反射对象设置可访问标志 //true表示屏蔽java语言检查,对象的私有属性也可以被查询和设置 f.setAccessible(true); Object o = f.get(g); System.out.println(o); }catch(SecurityException e) { e.printStackTrace(); }catch(NoSuchFieldException e) { e.printStackTrace(); }catch(IllegalArgumentException e) { e.printStackTrace(); }catch(IllegalAccessException e) { e.printStackTrace(); } } }
4、利用反射编写通用数组代码
java.lang.reflect包中的Array类允许动态地创建数组。
public class ArrayGrowTest { public static void main(String[] args) { int[] a = { 1, 2, 3 }; a = (int[]) goodArrayGrow(a); arrayPrint(a); String[] b = { "Tom", "Dick", "Harry" }; b = (String[]) goodArrayGrow(b); arrayPrint(b); System.out.println("The following call will generate an exception."); b = (String[]) badArrayGrow(b); } static Object[] badArrayGrow(Object[] a) { int newLength = a.length * 11 / 10 + 10; //新创建的对象数组不能转成String数组 Object[] newArray = new Object[newLength]; System.arraycopy(a, 0, newArray, 0, a.length); return newArray; } static Object goodArrayGrow(Object a) { Class cl = a.getClass(); if (!cl.isArray()) return null; Class componentType = cl.getComponentType(); int length = Array.getLength(a); int newLength = length * 11 / 10 + 10; //componentType数组元素类型,newLength数组的长度 Object newArray = Array.newInstance(componentType, newLength); System.arraycopy(a, 0, newArray, 0, length); return newArray; } static void arrayPrint(Object a) { Class cl = a.getClass(); if (!cl.isArray()) return; Class componentType = cl.getComponentType(); int length = Array.getLength(a); System.out.print(componentType.getName() + "[" + length + "] = { "); for (int i = 0; i < Array.getLength(a); i++) System.out.print(Array.get(a, i) + " "); System.out.println("}"); } }
5、方法指针
执行对象方法或静态方法
public class MethodPointerTest { public static void main(String[] args) throws Exception { Method square = MethodPointerTest.class.getMethod("square", double.class); Method sqrt = Math.class.getMethod("sqrt", double.class); printTable(1, 10, 10, square); printTable(1, 10, 10, sqrt); } public static double square(double x) { return x * x; } public static void printTable(double from, double to, int n, Method f) { System.out.println(f); double dx = (to - from) / (n - 1); for (double x = from; x <= to; x += dx) { try { double y = (Double) f.invoke(null, x); System.out.printf("%10.4f | %10.4f%n", x, y); } catch (Exception e) { e.printStackTrace(); } } } }
建议在必要的时候才使用Method对象,最好使用接口和内部类。
不要过多使用反射
反射很脆弱,编译器很难帮助发现程序中的错误。任何错误只能在运行时发现,并导致异常。
发表评论
-
java序列化揭秘
2011-12-14 10:06 779Thinking in java在java IO系统那一章讲到 ... -
big endian/little endian
2011-12-12 15:17 787Java和一些windows编程语言如c、c+ ... -
myEclipse插件
2011-11-09 14:35 1189拷贝插件到dropins路径下,重启myEclipse即可。 ... -
深入JVM-JVM
2011-08-03 18:44 835最近在看深入JAVA虚拟机这本书,JAVA虚拟机这章讲得很细致 ... -
java并发编程2
2011-07-15 12:33 575线程安全 调用某函数操作某对象,该对象暂时处于不可用状态,等 ... -
java并发编程1
2011-07-13 14:24 693进程和线程 进程和程序区别: 1、进程是程序的一次运行活动 ... -
string、byte、位运算碰到问题
2011-06-14 14:51 2432情景:java对byte[]做^实现加密,C对Char[]做^ ... -
jconsole远程监控Tomcat
2011-05-11 19:51 4415一、主要配置: 1、服务端tomcat启动时需要增加一 ... -
struts2异常
2011-04-14 19:47 1619由于使用WTP插件,tomcat部署跟myEclipse不太一 ... -
Spring事务
2011-03-30 10:37 711Spring事务配置的五种方式 http://www. ... -
IO字符流字节流
2010-12-30 17:38 890IO分两种流 字节流 InputStream OutputSt ... -
字节流分段读取
2010-08-12 15:28 1602遇到一个问题,字节流操作方面的,在windows环境下一定 ... -
JAVA面试题
2010-05-17 17:14 824JAVA相关基础知识1、面向对象的特征有哪些方面 1.抽象:抽 ... -
深入浅出hibernate笔记
2010-03-17 13:35 1356实体的3种状态:Transient自由 Persistent持 ... -
模板方法模式应用
2009-10-08 17:27 739GOF给模板方法(Template Method)模式定义一个 ... -
读取资源文件
2009-07-02 16:48 1106public class ConfigManage { ...
相关推荐
针对这种情况,我们只能忽略这部分内容,而无法从这里提取与标题“java核心技术卷二”和描述“java核心技术第二卷 高级特性 提供给大家学习与交流”相关的知识点。由于缺少可读和可理解的内容,我们无法对这部分进行...
《Java核心技术》第九版是Java编程领域的一部权威著作,深受程序员和计算机科学学生的喜爱。这本书深入浅出地讲解了Java语言的核心概念和技术,旨在帮助读者掌握Java编程的基础与精髓。书中涵盖了广泛的Java知识,...
《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...
《Java核心技术卷一第10版》是Java编程学习者不可或缺的经典教材,它全面覆盖了Java语言的基础和核心概念。本书适用于初学者以及希望巩固基础知识的开发者,旨在帮助读者掌握扎实的Java编程技能。 首先,Java是一种...
《Java核心技术卷2》是Java开发人员不可或缺的参考资料,它深入探讨了Java平台的高级特性,涵盖了多线程、网络编程、I/O流、反射、序列化、安全、数据库连接以及XML处理等多个核心主题。这本书旨在帮助开发者进一步...
《Java核心技术原书第10版中文版》是Java编程领域的经典教材,由美国著名计算机科学家Cay S. Horstmann撰写,并由周立新等翻译成中文。这本书全面覆盖了Java开发的基础知识,是Java程序员必备的学习资料之一。下面...
《核心Java 11版:Java核心技术 卷一卷二》是Java开发人员的重要参考资料,涵盖了从基础到高级的广泛主题。这套书籍深入讲解了Java 11版本的关键概念和技术,旨在帮助读者全面掌握Java编程。 卷一主要关注基础知识...
《第八版Java核心技术》是一本全面且深入的Java编程学习资源,主要涵盖了Java语言的基础以及高级特性。在Java的世界里,每一版的更新都带来了新的功能和改进,使得这个平台更加强大,更具适应性。第八版也不例外,它...
"Head First Java", "Java核心技术", 和 "Java编程思想" 这三本书是Java学习者公认的经典教材,各自针对不同的学习阶段和需求。 "Head First Java" 是一本以独特、直观的方式讲解Java的书籍,它通过生动的故事和...
根据提供的文件信息,“Java核心技术 卷II 高级特性 原书第10版 中文版”,我们可以推测这本书主要涵盖了Java高级特性的相关内容。由于实际的书籍内容无法直接访问,我们将基于标题、描述和部分可见的内容来推断并...
Java核心技术是Java编程领域的经典之作,分为卷一和卷二,涵盖了广泛的Java编程知识。这个压缩包文件"java核心技术10"显然包含了这两卷的示例源代码,这对于学习和理解书中讲解的概念至关重要。让我们深入探讨一下...
《JAVA核心技术-卷II-源代码》涵盖了Java编程语言的核心技术,主要针对的是Java平台标准版(Java SE)的高级特性。这个压缩包包含了多个Java源代码文件,这些文件是根据书籍的章节进行组织的,我们可以从文件名推测...
《Java核心技术 卷1 基础知识》是Java...《Java核心技术 卷1 基础知识》原书第10版不仅涵盖了以上这些核心概念,还对垃圾回收、反射、注解、模块系统等高级主题进行了深入讲解,是学习和提升Java编程技能的宝贵资源。
《Java核心技术第8版》是Java开发者不可或缺的经典学习资料,分为卷一和卷二,全面覆盖了Java语言的基础和高级特性。本资源为高清版本,确保读者能够清晰地理解和学习每一个概念,无需依赖网络资源,可直接下载使用...
Java核心技术是Java编程领域的经典著作,分为卷I和卷II,涵盖了Java语言和平台的核心概念。这两卷书籍深入探讨了Java编程的各个方面,是初学者和经验丰富的开发者的宝贵资源。源代码通常会帮助读者更好地理解和实践...
《Java核心技术 卷1 基础知识》是Java编程领域的经典著作,由著名程序员教育家凯·S·霍斯特曼撰写。这本书的第10版在2016年9月出版,提供了全面而深入的Java编程基础知识,是学习Java语言的必备参考书之一。在第711...
《Java核心技术 卷1 第十版》是一本深入讲解Java编程基础的经典著作,它涵盖了Java语言的核心概念和技术,是初学者和有经验的开发者提升技能的重要参考资料。此PDF版本并非扫描版,这意味着文本清晰可读,且具备目录...
《精通Java核心技术》是一本深度剖析Java编程语言的著作,旨在帮助读者无论是初学者还是专业人士,都能提升对Java核心技术的理解和应用能力。本书涵盖了广泛的知识点,旨在建立一个全面而深入的Java技术体系。 首先...
《Java核心技术》是Java开发者的重要参考资料,分为卷一和卷二,全面涵盖了Java语言的基础与高级特性。卷一主要讲解了Java编程的基础知识,而卷二则深入探讨了更为复杂和高级的技术。以下是对这两卷内容的详细阐述。...