Java反射-初步入门
Java反射-初步入门
学反射先了解什么是反射。
百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
上面提到了类和对象,先了解什么是类和对象。
java中类:
1.抽象描述
类:类是客观存在的、抽象的、概念东西。
对象:对象是具体的,指一个具体的东西。
打比方:饮料是一个类,可乐、雪碧就是对象。
总结一句话:类是对象的模版,对象是类的具体实现。
2.具体描述
Java中创建一个类:
//User是创建的类,User自己写的类名
public class User{
}
Java中对象:
1.对象声明
User user; //User是上面的类,user是自己写的对象名
2.对象创建
User user=new User(); //User是类,user是起的对象名 这是创建对象。
Class(大写的C)类:用于描述一切类、接口。枚举是一种类,注解是一种接口。
Class实例:就是指JVM中的一份字节码。
想用反射就需要得到一份字节码。(一个类在JVM中只有一份字节码)
得到Class实例的三种方式:
- 类名.class()
- Class.forName(里面写的是类的字符串(包名+类名))
- 通过对象获得Class实例:对象名.getClass()
第一种方式:
Class clazz1=User.class();
第二种方法:
Class clazz2=Class.forName("com.chengxuyuanzhilu.User");
第三种方法:
User user=new User();
Class clazz3=user.getClass();
clazz1==clazz2==clazz3因为表示的都是JVM中的一份字节码(User.class)
在八大包装类型中都有一个常量TYPE,TYPE表示该包装类对应的基本类型的Class实例。如:
Integer.TYPE==int.class;
java 反射API
知道怎么得到Class实例接下来就很简单了
使用jdk API可看到Class中的方法,就可以用反射调用了。当然我们也可以尝试引入java源码,直接读源码
获得类中的构造器
API中的关于构造器的方法(四个方法)
公共的构造器
Declared所有的构造器和访问权限无关
新建一个TestClass类,其中有三个构造方法 一个私有的
通过反射获取这两个构造方法(除私有的构造方法),控制台输出
如何得到私有的构造方法呢
调用构造方法创建对象
上面知道如何得到构造方法了,接下来就可以用构造方法中的方法创建对象了。
Jdk api搜索Constructor就可以看到其中的方法了,我们要使用的就是通过构造方法得到对象。
象。
API中的关于Method的方法(四个方法)
getMethods获取包括自身和继承过来的所有public方法
获取自身所有的方法(不包括继承的,和访问权限无关)
得到方法
TestClass中的方法
通过反射得到方法
然后api 搜索Method 通过反射使用里面的方法了
invoke(Object obj, Object... args) 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
使用反射调用静态方法
调用静态方法method.invoke(null) 参数改为null
使用反射获取字段
Api class 里面有同样有四种获取字段的四种方法
获得字段 可以通过api 搜索Field 就可以使用其中的方法了
Field set get方法
看完后 是不是感觉反射很简单了
Java反射-初步入门的更多相关文章
- java反射机制入门01
java反射机制入门是我从极客学院的视频中学习的. 1.反射机制背景概述 反射(Reflection)是java被视为动态(或准动态)语言的一个关键性质.反射机制指的是程序在运行时能够获取任何类的内部 ...
- 大白话说Java反射:入门、使用、原理
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java反射:入门.进阶.原理> 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时 ...
- 大白话说Java反射:入门、使用、原理 (转)
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java反射:入门.进阶.原理> 目录 一个简单的例子 反射常用API 获取反射中的Class对象 通过反射创建类对象 通过反射获取类 ...
- java反射快速入门(二)
上一遍博文 , 简单介绍java 反射的常用接口,本遍博文, 我会结合项目开发的实际例子讲解下 java反射的使用 现在有个需求, 要将一个对象转换成xml格式, 或者将一串xml转换一个对象, 这时 ...
- java反射快速入门(一)
本文会从以下几个方面讲起 ① 反射的简单解释 ② java反射的API接口 及 demo ③ 反射的优缺点.应用场景 一.什么是反射? java反射:在程序运行中动态获取类的信息,及动态调用对象的方法 ...
- java反射机制入门04
需要jxl.jar package com.rainmer.main; import java.io.File; import java.io.IOException; import java.uti ...
- java反射机制入门3
Method对象的机制与实现 1.Method对象概述 1)java.lang.reflect.Method类是用于表示类中.接口中方法对象的类. 2)可以操作类中私有,以及公有等全部方法. 2.Me ...
- java反射机制入门02
Field对象的机制与实现 1.Field对象概述 1)Java.lang.reflect.Field类,是用于表示类中.接口中属性对象的类. 2)可以操作类中私有,以及公有等全部属性和属性的信息. ...
- java反射快速入门
笔记记在了掘金,发现掘金的markdown编辑器比博客园样式要好看不少 https://juejin.im/post/5d4e575af265da03e4674e9f
随机推荐
- [转]将oracle数据库的编码变成utf-8
1.改客户端字符集:通过WINDOWS的运行菜单运行Regedit,修改注册表 Start -> Run -> Rededit <-| Under registry Editor - ...
- ubuntu下 gedit中文乱码
Gedit 3.x 版本设置 (适用于Ubuntu 11.10及以后) 命令方式 gsettings set org.gnome.gedit.preferences.encodings auto-de ...
- Metasploit安装——centos6.5
1:安装ruby yum -y install ruby 2:根据官方文档执行,安装支持包 yum install xorg-x11-server-Xvfb -y 3:官网下载最新版的Metaspl ...
- linxu 安装rabbitMQ
转载自:http://blog.csdn.net/mooreliu/article/details/44645807 首先使EPEL(http://fedoraproject.org/wiki/EPE ...
- 将应用注册为Linux的服务
主流的Linux大多使用init.d或systemd来注册服务.下面以centos6.6演示init.d注册服务:以centos7.1演示systemd注册服务. 1. 基于Linux的init.d部 ...
- 分词工具比较及使用(ansj、hanlp、jieba)
一.分词工具 ansj.hanlp.jieba 二.优缺点 1.ansj 优点: 提供多种分词方式 可直接根据内部词库分出人名.机构等信息 可构造多个词库,在分词时可动态选择所要使用的词库缺点: 自定 ...
- Poi中getPhysicalNumberOfCells 与 getLastCellNum的差异
getPhysicalNumberOfCells 与 getLastCellNum的区别 用org.apache.poi的包做excel导入,无意间发明若是excel文件中有空列,空列后面的数据全部读 ...
- springmvc+rest整合redis
最近在做一个项目需要用到关系数据库mysql和缓存redis,以及非关系型数据库mongoDB.昨天下午到今天上午一直在搞springmvc整合redis,期间出现的错误一直让人抓狂,在网上搜索的结果 ...
- 深度学习中 Batch Normalization为什么效果好
看mnist数据集上其他人的CNN模型时了解到了Batch Normalization 这种操作.效果还不错,至少对于训练速度提升了很多. batch normalization的做法是把数据转换为0 ...
- SpringSecurity——基于Spring、SpringMVC和MyBatis自定义SpringSecurity权限认证规则
本文转自:https://www.cnblogs.com/weilu2/p/springsecurity_custom_decision_metadata.html 本文在SpringMVC和MyBa ...