4. 若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式: 代码示例: [java] view plaincopyprint?
- // 该方法实现对Customer对象的拷贝操作
- public Object copy(Object object) throws Exception
- {
- Class<?> classType = object.getClass();
- //先调用Class类的getConstructor()方法获得一个Constructor 对象,它代表默认的构造方法,然后调用
- Constructor对象的newInstance()方法构造一个实例。
- Object objectCopy = classType.getConstructor(new Class[] {})
- .newInstance(new Object[] {});
- Field[] fields = classType.getDeclaredFields();
- for (Field field : fields)
- {
- String name = field.getName();
- // 将属性的首字母转换为大写
- String firstLetter = name.substring(0, 1).toUpperCase(); String getMethodName = "get" + firstLetter + name.substring(1);
- String setMethodName = "set" + firstLetter + name.substring(1);
- Method getMethod = classType.getMethod(getMethodName,
- new Class[] {});
- Method setMethod = classType.getMethod(setMethodName,
- new Class[] { field.getType() });
- Object value = getMethod.invoke(object, new Object[] {});
- setMethod.invoke(objectCopy, new Object[] { value });
- }
- // 以上两行代码等价于下面一行
- // Object obj2 = classType.newInstance();
- // System.out.println(obj);
- return objectCopy;
- }
5.Integer.TYPE返回的是int,而Integer.class返回的是Integer类所对应的Class对象。 java.lang.Array 类提供了动态创建和访问数组元素的各种静态方法 一维数组的简单创建,设值,取值 二维数组的简单创建,设值,取值 [java] view plaincopyprint?
- //创建一个设值数组维度的数组
- int[] dims = new int[] { 5, 10, 15 };
- //利用Array.newInstance创建一个数组对象,第一个参数指定数组的类型,第
- Object array = Array.newInstance(Integer.TYPE, dims);
-
- System.out.println(array instanceof int[][][]);
- //获取三维数组的索引为3的一个二维数组
- Object arrayObj = Array.get(array, 3);
- //获取二维数组的索引为5的一个一维数组
- arrayObj = Array.get(arrayObj, 5);
- //设值一维数组arrayObj下标为10的值设为37
- Array.setInt(arrayObj, 10, 37);
-
- int[][][] arrayCast = (int[][][]) array;
-
- System.out.println(arrayCast[3][5][10]);
利用反射访问类的私有方法:
- Private p = new Private();
-
- Class<?> classType = p.getClass();
-
- Method method = classType.getDeclaredMethod("sayHello",
- new Class[] { String.class });
- method.setAccessible(true);//压制Java的访问控制检查,使允许访问private方法
- String str = (String)method.invoke(p, new Object[]{"zhangsan"});
- System.out.println(str);
利用反射访问类的私有变量: [java] view plaincopyprint?
- Private2 p = new Private2();
-
- Class<?> classType = p.getClass();
-
- Field field = classType.getDeclaredField("name");
-
- field.setAccessible(true);//压制Java对访问修饰符的检查
-
- field.set(p, "lisi");
-
- System.out.println(p.getName());
|