反射应用(一)
来源:互联网 发布:java编程题全集及答案 编辑:程序博客网 时间:2024/04/28 00:20
反射的应用(一)
1. 类的加载:是指把类的 .class 文件中的二进制数据说读入到内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。
2. 如何加载类代码:
3. public void test() throws ClassNotFoundException {
4. // 1、加载类
5. Class cls = Class.forName("cn.csdn.reflect.Student");
6. System.out.println(cls);
7. // 2、加载类
8. Student stu = new Student();
9. Class cls1 = stu.getClass();
10. System.out.println(cls1);
11. // 3、加载类
12. Class cls2 = Student.class;
13. System.out.println(Student.class);
14. }
15. 如何将加载类并利用反射解析:
16. 解析:类中的无惨的构造器 public Student();
17. @Test
18. public void test() throws Exception{
19. //1、加载类
20. Class cls=Class.forName("com.csdn.java01.Student");
21. //2、通过带无惨的构造器解析
22. Constructor constructor=cls.getConstructor(null);
23. //3、创建类实例-->类的构造函数没有参数所以是空
24. Student student=(Student) constructor.newInstance(null);
25. student.study();
26. }
27. 解析:类中的有惨的构造器public Student(String name,int age);
28. @Test
29. public void test2()throws Exception{
30. //1、加载类
31. Class cls = Class.forName("cn.csdn.reflect.Student");
32. //2、通过带有参数的构造器解析
33. Constructor constructor = cls.getConstructor(String.class,int.class);
34. //3、创建类实例-->类的构造函数有参数所以需要值
35. Student entity = (Student)constructor.newInstance("redarmy",90);
36. //4、调用方法
37. entity.study();
38. System.out.println(entity.getName());
39. }
40. 解析:类中的有惨的构造器public Student(String str[]);
41. @Test
42. public void test4()throws Exception{
43. //1、加载类
44. Class cls = Class.forName("cn.csdn.reflect.Student");
45. //2、根据构造器参数类型获取相应的构造器对象
46. Constructor csr = cls.getConstructor(String[].class);
47. String str[]={"111","123"};
48. //3、创建实体对象
49. Student entity = (Student)csr.newInstance((Object)str);
50. //4、调用方法
51. entity.study();
52. }
53. 反射在类中构造函数传数组参数是应把它专为Object类型由于Student(String strs[])构造器只有一个String数组的参数所以这是编译器会把字符串数组当作一个可变长度参数传 给对象strs,而我们取得方法只有一个参数,所以就会出现wrong number of arguments的异常,我们只要把字符串数组强制转换为一 个Object对象就可以解决这个异常了,
54. 执行代码:
55. //解析:public cn.csdn.reflect.Student(java.lang.String[])
56. @Test
57. public void test4()throws Exception{
58. //1、加载类
59. Class cls = Class.forName("cn.csdn.reflect.Student");
60. //2、根据构造器参数类型获取相应的构造器对象
61. Constructor csr = cls.getConstructor(String[].class);
62. //3、创建实体对象
63. Student entity = (Student)csr.newInstance(new String[]{});
64. //4、调用方法
65. entity.study();
66. }
67. 解析:类中的有惨的构造器public Student(String str[],double a);
68. @Test
69. public void test4()throws Exception{
70. //1、加载类
71. Class cls = Class.forName("cn.csdn.reflect.Student");
72. //2、根据构造器参数类型获取相应的构造器对象
73. Constructor csr = cls.getConstructor(String[].class,double.class);
74. String str[]={"111","123"};
75. //3、创建实体对象
76. Student entity = (Student)csr.newInstance(new String[]{“12”,”13”},1.0);
77. //4、调用方法
78. entity.study();
79. }
80. 如何知道类中所有的构造器?
81. 代码如下:
82. public void test3()throws Exception{
83. //1、加载类
84. Class cls = Class.forName("cn.csdn.reflect.Student");
85. //2、获取加载类中的所有的构造器
86. Constructor csr[] = cls.getConstructors();
87. //3、遍历构造器csr
88. for(Constructor c:csr){
89. //打印出构造器参数的类型及构造器名称
90. System.out.println(c.toGenericString());
91. }
92. }
- 反射应用(一)
- Java反射原理及应用(一)
- Java反射之应用(一)
- java反射技术的应用(一)
- 反射应用案例一
- java反射及应用(一)
- c#泛型和反射的设计应用(一)
- c#泛型和反射的设计应用(一)
- 反射应用(二)
- 反射应用(三)
- 反射应用(二)
- 反射在.NET中的简单应用(一)
- ReflectHelper 反射(Method,Class的应用一)
- Java反射机制及应用(一)
- Java Reflect(反射一) 基本应用
- C#反射(一)
- C#反射(一)
- 理解反射(一)
- 【软件测试】操作系统篇:第一章 计算机操作系统概述
- 反复反复反复反复反复反复反复反复
- 第一次网络维护
- 任务
- 程序员职场第一课第一章ppt笔记
- 反射应用(一)
- 关于tomcat端口被占用的最好解决办法
- 页面中显示不出错误信息
- 希望能够学到更多的知识
- 深入探讨 Java 类加载器
- 快速编程的捷径——计算机达人成长之路(40)
- 打发似的发射的方式的
- Android开发--Intent-filter属性详解
- 插入排序 c++