反射

反射应该是框架的灵魂,通过对反射的理解,能够更好的入手框架。
java中的对象有两种类型,编译时类型和运行时类型。
 - 编译时类型是编写代码时所声明的类型
 - 运行时类型指为对象赋值时所采用的类型
Student stu = new Person();
stu在编译时为Student类型 在运行时为Person类型
当程序还没运行时,没发获取这个类的方法和属性, 只有在运行时才能获取。
什么是反射

动态获取信息及动态调用的对象的方法就是java的反射机制。

  • 动态获取信息即在运行状态下,对于任意一个类,都能获取到他的所有信息(成员变量,构造方法,方法,包等)

  • 动态调用对象,,对于任意一个类,都能够调用到他的所有方法和属性(同上)

当程序要使用一个类的时候,首先要获得他的字节码文件即.class文件,通过类加载器将字节码文件加载到 JVM 内存中,生成一个class对象(一个类只会生成一个class对象)这个class对象包含这个类所有的方法和属性。
  • 反射的步骤 :(1)获取class对象 (2)调用Class对象锁对应的类中定义的方法 

获取反射对象

forName()

最为常用

//以Student类为例 student 类有name属性和方法 package high.School; public class School{ public static void main(String[] args) {        Student student = new Student();        //获取student类对象        Class stu = Class.forName(high.School.Student);//全路径 包名.类名 写全路径相当于绝对路径不容易出错        //进一步获取其属性        stu.getName();        } }

.class()

任何数据类型(包括基本数据类型)都有一个“静态”的class属性,可以直接获取

//以Student类为例 student 类有name属性和方法 package high.School; public class School{ public static void main(String[] args) {        Student student = new Student();        //获取student类对象        Class stu = Student.class;        //进一步获取其属性        stu.getName();        } }

getClass()

返回一个对象的运行时类

//以Student类为例 student 类有name属性和方法 package high.School; public class School{ public static void main(String[] args) {        Student student = new Student();        //getClass()获取student类对象        Class stu =student.getClass();        //进一步获取其属性        stu.getName();        } }

相关的拓展可以类加载器的内容 对反射机制理解有帮助作用

参考文章:(32条消息) java基础之—类加载器_sinat_38259539的博客-CSDN博客


什么是反射

动态获取信息及动态调用的对象的方法就是java的反射机制。

  • 动态获取信息即在运行状态下,对于任意一个类,都能获取到他的所有信息(成员变量,构造方法,方法,包等)

  • 动态调用对象,,对于任意一个类,都能够调用到他的所有方法和属性(同上)

当程序要使用一个类的时候,首先要获得他的字节码文件即.class文件,通过类加载器将字节码文件加载到 JVM 内存中,生成一个class对象(一个类只会生成一个class对象)这个class对象包含这个类所有的方法和属性。

获取反射对象

forName()

最为常用

//以Student类为例 student 类有name属性和方法 package high.School; public class School{ public static void main(String[] args) {        Student student = new Student();        //获取student类对象        Class stu = Class.forName(high.School.Student);//全路径 包名.类名 写全路径相当于绝对路径不容易出错        //进一步获取其属性        stu.getName();        } }

.class()

任何数据类型(包括基本数据类型)都有一个“静态”的class属性,可以直接获取

//以Student类为例 student 类有name属性和方法 package high.School; public class School{ public static void main(String[] args) {        Student student = new Student();        //获取student类对象        Class stu = Student.class;        //进一步获取其属性        stu.getName();        } }

getClass()

返回一个对象的运行时类

//以Student类为例 student 类有name属性和方法 package high.School; public class School{ public static void main(String[] args) {        Student student = new Student();        //getClass()获取student类对象        Class stu =student.getClass();        //进一步获取其属性        stu.getName();        } }

相关的拓展可以类加载器的内容 对反射机制理解有帮助作用

参考文章:(32条消息) java基础之—类加载器_sinat_38259539的博客-CSDN博客

全部评论

相关推荐

后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务