广州交易中心官网/广东网站营销seo方案
(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
Java SE 063 反射机制大总结
文章目录
- Java SE 063 反射机制大总结
- 1.java.lang.Array数组方面的知识
- 1.1功能需求
- 1.2实现代码
- 2.反射中的多维数组
- 3.用反射打破类的封装性
- 3.1使用反射机制调用类的私有方法
- 3.1.1定义具有私有方法的类
- 3.1.2通过反射调用类的私有方法
1.java.lang.Array数组方面的知识
1.1功能需求
使用反射在运行期来生成数组,并为数组赋值,然后将值取出来。
1.2实现代码
package com.javareview.refelect.array;
import java.lang.reflect.Array;
/*** 反射之数组*/
public class ReflectArray {public static void main(String[] args) {try {//s1.获取String类的Class对象Class<?> classType = Class.forName("java.lang.String");//s2.新建一个classType类型的数组,长度为10Object array = Array.newInstance(classType, 10);//s3.利用反射初始化数组Array.set(array, 5, "hello");//s4.通过反射获取指定索引处的数组元素值String str = (String) Array.get(array, 5);System.out.println(str);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
2.反射中的多维数组
package com.javareview.refelect.array;import java.lang.reflect.Array;/*** 反射之多维数组*/
public class MultArray {public static void main(String[] args) {//s1.创建一维数组int[] dims = new int[]{5,10,15};//s2.构建三维数组对象,将上面的一维数组作为newInstance()的第二个参数时,表示它会创建一个长、宽、高分别为5,10,15的一个三维数组Object array = Array.newInstance(Integer.TYPE, dims);//s3.获取三维数组索引为3的元素的值,获得第一维的索引为3的这样一个数组,因此arrayObj是一个二维数组Object arrayObj = Array.get(array, 3);//s4.获取元素类型,获得二维数组对应的一个ComponentType 对于一个数组来说,java认为数组里面的每个元素是一个组件类型Class<?> classType = arrayObj.getClass().getComponentType();System.out.println(classType);//s5.获取二维数组中第5个元素arrayObj = Array.get(arrayObj, 5);//s6.给1维数组的第10个元素设置值为37Array.setInt(arrayObj, 10, 37);//s7.将数组强转为一个三维数组int[][][] arrayCast = (int[][][]) array;//s8.输出三维数组值System.out.println(arrayCast[3][5][10]);//s9.Integer.TYPE返回的是原生数据类型System.out.println(Integer.TYPE);//s10.Integer.class返回类所对应的类型System.out.println(Integer.class);}
}
3.用反射打破类的封装性
3.1使用反射机制调用类的私有方法
3.1.1定义具有私有方法的类
package com.javareview.refelect.accessprivate;/*** 通过反射访问类的私有方法* @author xiongjie**/
public class AccessPrivate {private String sayHello(String name){return "hello " + name;}
}
3.1.2通过反射调用类的私有方法
package com.javareview.refelect.test;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;import com.javareview.refelect.accessprivate.AccessPrivate;public class AccessPrivateTest {public static void main(String[] args) {AccessPrivate p = new AccessPrivate();//s1.反射获取私有类对象的Class对象Class<?> classType = p.getClass();try {//s2.反射获取私有方法对象Method method = classType.getDeclaredMethod("sayHello", new Class[]{String.class});//s3.压制java的访问控制检查method.setAccessible(true);//s3.通过反射调用执行私有方法String str = (String) method.invoke(p, new Object[]{"xiongjie"});System.out.println(str);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}
}
ArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}
}