Java学习日志-反射
来源:互联网 发布:js 函数赋值给变量 编辑:程序博客网 时间:2024/05/15 01:45
---------------------- android培训、java培训、期待与您交流! ----------------------
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类就是Class。
得到各个字节码对应的实例对象
1.System.class
2.new Date().getClass()
3.Class.forName("java.util.Data")
反射就是把Java类中的各种成分映射成相应的Java类。
Constructor类
Field类
Method类
package cn.itcast.day1;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Arrays;public class ReflectTest {/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubString str1 = "abc";Class<? extends String> cls1 = str1.getClass();Class<String> cls2 = String.class;Class<?> cls3 = Class.forName("java.lang.String");System.out.println(cls1 == cls2);System.out.println(cls1 == cls3);System.out.println();System.out.println(cls1.isPrimitive());System.out.println(int.class.isPrimitive());System.out.println(int.class == Integer.class);System.out.println(int.class == Integer.TYPE);System.out.println(int[].class.isPrimitive());System.out.println(int[].class.isArray());System.out.println();// new String(new StringBuffer("abc"));Constructor<String> constructor1 = String.class.getConstructor(StringBuffer.class);String str2 = constructor1.newInstance(new StringBuffer("abc"));System.out.println(str2.charAt(2));ReflectPoint pt1 = new ReflectPoint(3, 5);Field fieldY = pt1.getClass().getField("y");System.out.println(fieldY.get(pt1));// 暴力反射Field fieldX = pt1.getClass().getDeclaredField("x");fieldX.setAccessible(true);System.out.println(fieldX.get(pt1));changeStringValue(pt1);System.out.println(pt1);// str1.charAt(1);Method methodCharAt = String.class.getMethod("charAt", int.class);System.out.println(methodCharAt.invoke(str1, 1));System.out.println(methodCharAt.invoke(str1, new Object[] { 2 }));// TestArguments.main(new String[]{"111","222","333"});String startingClassName = args[0];Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);// mainMethod.invoke(null, new String[]{"111","222","333"}); 是不行的,会自动拆箱。// mainMethod.invoke(null, new Object[]{new String[] { "111",// "222","333" }});mainMethod.invoke(null, (Object) new String[] { "111", "222", "333" });int[] a1 = new int[]{1, 2, 3};int[] a2 = new int[4];int[][] a3 = new int[2][3];String[] a4 = new String[]{"a", "b", "c"};System.out.println(a1.getClass() == a2.getClass());// 不知道为什么编译器报错。// System.out.println(a1.getClass() == a4.getClass());// System.out.println(a1.getClass() == a3.getClass());System.out.println(a1.getClass().getName());System.out.println(a1.getClass().getSuperclass().getName());System.out.println(a2.getClass().getSuperclass().getName());Object aObj1 = a1;Object aObj2 = a4;// Object[] aObj3 = a1;Object[] aObj4 = a3;Object[] aObj5 = a4;System.out.println(Arrays.asList(a1));System.out.println(Arrays.asList(a4));}private static void changeStringValue(Object obj) throws Exception, IllegalAccessException {Field[] fields = obj.getClass().getFields();for (Field field : fields) {// if(field.getType().equals(String.class))if (field.getType() == String.class) {String oldValue = (String) field.get(obj);String newValue = oldValue.replace('b', 'a');field.set(obj, newValue);}}}}class TestArguments {public static void main(String[] args) {for (String arg : args) {System.out.println(arg);}}}
package cn.itcast.day1;public class ReflectPoint {private int x;public int y;public String str1 = "ball";public String str2 = "basketball";public String str3 = "itcast";public ReflectPoint(int x, int y) {super();this.x = x;this.y = y;}public String toString() {return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3=" + str3 + "]";}}
---------------------- android培训、java培训、期待与您交流! ----------------------
- Java学习日志-反射
- 反射学习日志
- 黑马程序员--学习日志--反射
- 黑马程序员-----反射的学习日志
- 黑马程序员 学习日志10 反射
- java学习-反射
- Java反射学习
- Java反射学习
- java反射机制学习
- Java反射学习
- Java反射学习
- JAVA反射机制学习
- Java 反射 视频学习
- java反射的学习
- java 反射基础学习
- Java反射学习
- java 反射学习
- JAVA 反射学习总结
- ASP.net获取存储过程返回值
- C# ToString总结
- java单例模式(Singleton)
- 怎样使android apk 获取root权限
- 在unity3D中实现MIKE ZERO对水体网格的边界优化(一)
- Java学习日志-反射
- Linux find 命令
- 百度联盟脚本有高危漏洞
- 获取本手机IP地址
- 学习SAP有用的连接
- SQL Server 2005 最大容量规范
- 二维玛
- php-java-bridge on centos
- gb2312与utf8的手动转换