java学习之 反射
以前学习java只是学习了基本语法操作,各种常用方法的使用,随着慢慢学习,很多大神都觉得要想成为大神,就必须把java的反射给理解透,这样我就带着好奇的心去学习到底反射是什么玩意,所以就上网找资料学习去了,没想到收获真的不小,其实我们平时用的跟多操作都是通过反射来完成的,比如对于servlet在web.xml的配置都是同过反射来新建一个对象,还有SSH都是通过反射来实例化对象的,通过了反射让我更好的理解SSH框架。下面小弟就开始小谈一下反射的详细内容吧, 由于本人水平有限,若文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!希望能互相学习。
反射其实就是通过Class对象获取类型的相关信息;
与反射相关的类
1: Class:表示类;
2: Field:表示成员变量;
3: Method:表示方法;
4: Constructor:表示构造器
1:class类:获取class类的话有三种方法
如定义一个Users类
public class Users {
private Integer Id;
private String Name;
private Date Birth;
private float Score;
public Integer getId() {
return Id;
}
@Override
public String toString() {
return "Users [Id=" + Id + ", Name=" + Name + ", Birth=" + Birth
+ ", Score=" + Score + "]";
}
public Users() {
}
public Users(int id) {
this.Id = id;
}
public void setId(Integer id) {
Id = id;
}
public String ResultStr() {
return "str";
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public Date getBirth() {
return Birth;
}
public void setBirth(Date birth) {
Birth = birth;
}
public float getScore() {
return Score;
}
public void setScore(float score) {
Score = score;
}
}
那么可以通过三种方式来获取该类
Usersp = new Users();
// 获取类的三种方法 Class c2 = p.getClass();//新建一个对象是再获取该类
Class c1 = Users.class;//直接通过类的静态方法来获取该类
Class c3 = Class.forName("com.lishun.Peason");//通过包名和类名来获取该类(配置文件就是通过这种方式来获取实例)
获取到了类就可以获取该类的构造器,方法和成员了(这里就使用上面的第三种方法获取类实例)
1:获取构造器:Constructor
Class c3 = Class.forName("com.lishun.Peason");//
//获取本类和父类一个公有构造器
Constructor cPublic=c3.getConstructor(int.class);//int.class指的的含有一个int类型参数的构造器
//获取本类和父类所有公有构造器
Constructor[] cPublicAll=c3.getConstructors();
//获取本类一个私有或公有构造器
Constructor cPublicOrPrivaet=c3.getDeclaredConstructor();
//获取本类所有公有或私有的构造器
Constructor[] cPublicOrPrivaetAll=c3.getDeclaredConstructors();
//执行构造方法
Peason p=(Peason)cPublic.newInstance(1);
2:获取方法:Method
//获取本类和父类单个公有的方法
Method m=c3.getMethod("ResultStr");
//获取本类和父类所有的公有的方法
Method[] mall=c3.getMethods(); //获取本类单个公有或私有的方法(所有访问级别都可获取到)
Method m1=c3.getDeclaredMethod("ResultStr1",String.class);
//获取本类所有的公有或私有的方法(所有访问级别都可获取到)
Method[] mall1=c3.getDeclaredMethods(); //执行该方法
m.invoke(c3.newInstance());//若执行静态的方法,第一个参数为null 无需新的对象
3:成员:Field
//获取本类和父类单个公有的方法
try {
Field f = c3.getField("Name");
} catch (Exception e) {
System.out.println(e.getMessage());
}
//获取本类和父类所有的公有的方法
Field[] fall=c3.getFields(); //获取本类单个公有或私有的成员(所有访问级别)
Field f1=c3.getDeclaredField(Name");
//获取本类所有的公有或私有的方法(所有访问级别)
Field[] fall1=c3.getDeclaredFields();
Object o=c3.newInstance();
//给成员赋值,private成员,方法,构造器 默认都是不能赋值的
f1.setAccessible(true);//把private的成员设置为可用
f1.set(o, "lishun");
System.out.println(o);
好了我所理解的反射就这些了,,小弟在此若还有没提全的或有错误的,望各位大神们指正出来,我也是个在学习中的小菜鸟,,希望能学得到更多的技术知识
java学习之 反射的更多相关文章
- java学习之反射机制
java语言区别于C,C++等准静态语言的最大特点就是java的反射机制.静态语言的最直接定义就是不能在运行时改变程序结构或变量的类型.按照这样的定义,python,ruby是动态语言,C,C++,J ...
- Java学习之反射篇
Java学习之反射篇 0x00 前言 今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要. 0x01 反射机制概述 Java反射是Java非 ...
- java学习--Reflection反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- Java学习笔记--反射
什么是Java反射 概念 java反射是指java能够在运行时确定类的类型信息,包括其方法.字段.构造函数等,并能够通过反射调用类或者类对象的方法.在Java中,java.lang.Class类与ja ...
- 4 Java学习之 反射Reflection
1. 反射概念 反射机制就是:动态地获取类的一切信息,并利用这些信息做一些你想做的事情. java反射机制能够知道类名而不实例化对象的状态下,获得对象的属性或调用方法. JAVA反射机制是在运行状态 ...
- Java学习:反射机制简介
反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- Java学习_反射
什么是反射? 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法. JAVA反射机制是在运行状 ...
- Java学习之反射机制及应用场景
前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...
- 0034 Java学习笔记-反射-初步2-操作对象
通过反射创建对象 通过反射创建对象有两种方式,一种通过Class对象的newInstance()方法,一种是获取到Class对象的Constructor后,再调用newInstance()方法,前者要 ...
随机推荐
- python函数和常用模块(三),Day5
递归 反射 os模块 sys模块 hashlib加密模块 正则表达式 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数 ...
- spring mvc WebArgumentResolver不生效
WebArgumentResolver: SPI for resolving custom arguments for a specific handler method parameter. Typ ...
- ASP.NET登录控件login。
1.Login控件.通常情况下会出现3个核心元素.用户名文本框.密码输入框.提交凭证的按钮. 1>.比较重要的属性:CreateUserText属性:包含站点注册页的链接文本.CreateUse ...
- liMarquee演示12种不同的无缝滚动效果
很实用的一款liMarquee演示12种不同的无缝滚动效果 在线预览 下载地址 实例代码 <!DOCTYPE html> <html lang="zh-CN"&g ...
- PS教程:20个新鲜出炉的 Photoshop 中级教程
Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享最新20个 Photoshop 进阶教程,提高你的图片处理技巧,制作时尚的效果.这些教程可以帮助把你的想法 ...
- 免费的 Photoshop Apple Watch 原型设计素材
大量的扁平化的苹果设备原型展示了响应式的 Web 设计.这是一组免费的 Photoshop Apple Watch 原型 PSD 设计素材,文件包括 iPhone.iPad. iMac 和 Macbo ...
- HTML基础知识总结
经过这段时间的学习,对于html的一些基础知识有了一定的了解.所谓好记性不如烂笔头,唯有一点点累积,才能汇聚成知识的海洋.现在,我对这段时间的学习做一个总结. 一.HTML的定义 HTML,超文本标记 ...
- Android NDK编译本地文件以及引用第三方so文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS :=-llog LOCAL_MODULE := DeviceAPI LO ...
- IOS沙盒中的Documents、Library、tmp区别
1.Documents: 用户生成的文件.其他数据及其他程序不能重新创建的文件,iTunes备份和恢复的时候会包括此目录. 2.Library/Caches: 可以重新下载或者重新生成的数据,数据库缓 ...
- C中的流程控制
一. 流程控制 l 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. l 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. l 循环结构:在给定条件成立的情况下,反复执行某一 ...