JavaSE---反射(未完待续)
1、概述
1.1 Java程序中许多对象在运行时会出现2种类型:编译时类型、运行时类型;
eg:Person person=new Student(); 这行代码在编译时为Person类型,运行时为Student类型;
eg:程序在运行时接受到外部传来的一个参数,编译时为Object类型,运行时又需要调用具体的运行时类型;
【解决以上问题】:
1.1.1 假设编译时类型、运行时类型都已知,可以用instanceof运算符进行判断,再利用强制类型转换为运行时类型;
1.1.2 若编译时无法 得知该对象的类型,程序只能靠 反射 来 获取运行时的具体类型信息;
1.2 【>>>获得Class对象<<<】
====每个类被加载后,在内存中都会创建一个该类的Class对象,通过Class对象就可以获得该类;
1.1.1 调用Class对象的forName(),返回该类的Class对象 public static Class<?> forName(String className)
className:类的全限定名
1.1.2 调用某个类的class属性,将返回该类的Class对象;
1.1.3 调用某个类的getClass(),将返回该类的Class对象;
1.3 【>>>从Class对象中获取信息<<<】
1.1.1 访问Class对应类包含的构造器
1.1.2 访问Class对应类包含的方法
1.1.3 访问Class对应类包含的属性
1.1.4 访问Class对应类上的注解

1.1.5 访问Class对应类包含的内部类

1.1.6 访问Class对应类包含的外部类

1.1.7 访问Class对应类所继承的父类、实现的接口

1.1.8 判断Class对应类是接口、注解、枚举等

1.4 【使用反射生成并操作对象】
1.1.1 创建对象
调用Class对象的newInstance() public T newInstance()
此方法要求该Class对象对应的类有默认构造器,newInstance()实际上就是调用默认构造器创建实例;
package com.exiuge.mytest.reflect;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args)throws Exception{
Class clazz=Class.forName("com.exiuge.mytest.reflect.User");
User user=(User) clazz.newInstance();
}
}
先获取Class对象的指定构造器Constructor对象,再调用Constructor对象的newInstance()来获得实例
package com.exiuge.mytest.reflect;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args)throws Exception{
Class clazz=Class.forName("com.exiuge.mytest.reflect.User");
Constructor constructor =clazz.getConstructor();
User user=(User) constructor.newInstance();
}
}
1.1.2 调用方法
获取Class对象后,可获取Method对象来进行方法调用,Method对象有一个方法
public Object invoke(Object obj, Object... args)
1.1.3 访问属性值
1.1.4 操作数组
JavaSE---反射(未完待续)的更多相关文章
- MVC丶 (未完待续······)
希望你看了此小随 可以实现自己的MVC框架 也祝所有的程序员身体健康一切安好 ...
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- asp.net面试题总结1(未完待续。。。。)
1.MVC中的TempData\ViewBag\ViewData区别? 答:页面对象传值,有这三种对象可以传. Temp:临时的 Bag:袋子 (1) TempData 保存在Session中,C ...
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 关于DOM的一些总结(未完待续......)
DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...
- 我的SQL总结---未完待续
我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...
- virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...
- 一篇文章让Oracle程序猿学会MySql【未完待续】
一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...
随机推荐
- CentOS6.5 安装python
前言: CENTOS 6.X 系列默认安装的 Python 2.6 ,目前开发中主要是使用 Python 2.7 ,这两个版本之间还是有不少差异的,程序在 Python 2.6 下经常会出问题. 比如 ...
- 对private protected public的详解:
#include <iostream> #include <stack> #include <queue> #include <exception> # ...
- Advanced WordCount
Github:https://github.com/Hoyifei/SQ-T-Homework-WordCount-Advanced (注:Github上的所有代码由我代为提交) PSP:(注:部分实 ...
- Java数据结构与算法分析-第一章(引论)-Java中的范型<T,E>构件
一.为什么需要使用范型? 官方的说法是:Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质 ...
- for循环 break
for (int i = 1; i <= 8;i++) {} for (int i=10; i>=1;i--) i的起始值是10 着次递减 for(){}嵌套放便控制行列的长短 break ...
- 在FooterTemplate内显示DropDownList控件
如果想在Gridview控件FooterTemplate内显示DropDownList控件供用户添加数据时所应用.有两种方法可以实现,一种是在GridView控件的OnRowDataBound事件中写 ...
- python3中模块初识
python的模块使用方法 1.用于显示python的环境变量 import sys print(sys.path) 运行路径执行结果如下: ['F:\\codes', 'F:\\codes', 'C ...
- HBase - 伪分布式安装过程
环境 - hadoop - 没有zookeeper(用hbase自带的zookeeper,当然后期我会改用独立的zookeeper) HBase介绍 参考:hbase是什么? hbase下载 地址:h ...
- 为什么使用docker
为什么要使用Docker? 作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势. 更高效的利用系统资源 由于容器不需要进行硬件虚拟及运行完整操作系统等额外开销,Docker对系 ...
- 配置vuex并使用
配置vuex并使用 安装vuex: npm install --save-dev vuex 在src目录下创建store文件夹 store文件夹下文件 index.js,state.js,getter ...