Java基础重要知识点-反射
反射,如何把.java文件转化为.class文件
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
所以说:任何类或对象在反射面前都是裸体
详情:
try {
Class forName = Class.forName("com.facebook.entity.Student"); //获得类名,这是写前提条件,获得class文件
try {
// Constructor con = forName.getConstructor(); //括号里有null
// //通过反射来实例化这个对象,这里等同于实例化了一个Student StudentStudent s=new Student();
// Object object = con.newInstance();
// System.out.println(object+"100");
//获取单个私有构造,这里是获得带2个参的私有构造,
// Constructor con = forName.getDeclaredConstructor(int.class,String.class);
///通过暴力反射,去除私有
// con.setAccessible(true);
// //通过反射来实例化这个对象,这个参数是具体的类型,获取构造方法后,这一步是创建对象赋值,
// Object object = con.newInstance(2,"zhang");
// System.out.println(object);
//获得属性
//获得所有公有属性
// Field[] fields = forName.getFields();
// for (int i = 0; i < fields.length; i++) {
// System.out.println(fields[i]+"100");
// }
//获取所有属性,包括私有
// Field[] f = forName.getDeclaredFields();
// for (int i = 0; i <f.length; i++) {
// System.out.println(f[i]+"100");
// }
//获得单个公有有的属性,传递的参数就是你要获取的属性的名字
// try {
// Field field = forName.getField("name");
//
// //给属性赋值(1.产生一个对象,2.赋值)
// Object obj = forName.getConstructor().newInstance();
//
// //第一个参数是你要赋值的对象,第二个是你要赋的值
// field.set(obj, "zhang2");
// Student s=(Student)obj;
// System.out.println(s+"100");
// } catch (NoSuchFieldException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//获取私有单个属性,步骤和上面一样,私有的多了一个暴力反射
// try {
// Field ff = forName.getDeclaredField("id");
// Object obj = forName.getConstructor().newInstance();
// ff.setAccessible(true);
// ff.set(obj, 123); //暴力反射
// Student s=(Student)obj;
// System.out.println(s+"100");
// } catch (NoSuchFieldException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//获取所有公有的方法,因为是所有,所以返回的是数组,要遍历
// Method[] methods = forName.getMethods();
// for (int i = 0; i < methods.length; i++) {
// System.out.println(methods[i]);
// }
//获得所有公有和私有的方法,所以返回的是数组,要遍历
// Method[] m= forName.getDeclaredMethods();
// for (int i = 0; i < m.length; i++) {
// System.out.println(m[i]);
// }
//获得单个公有的方法,并调用
// Method m = forName.getMethod("show");
// //产生一个对象
// Object obj3 = forName.getConstructor().newInstance();
// Object invoke3 = m.invoke(obj3,null);
// System.out.println(invoke3+"100");
//获得单个私有的方法,并调用
Method m2 = forName.getDeclaredMethod("show1",String.class); //第一个参数是方法名,第二个参数是方法后面参数类型
Object obj = forName.getConstructor().newInstance();
m2.setAccessible(true);
Object invoke = m2.invoke(obj, "22");
System.out.println(invoke+"123456");
List<String> list=new ArrayList<String>(); //现在规定只能传字符串
list.add("aa");
list.add("bb");
Class class1 = list.getClass(); //利用反射可以忽略泛型,利用泛型可以传其他类型数据
Method m1 = class1.getMethod("add", Object.class);
m1.invoke(list, 113);
for (Object string : list) { //这里要改成object
System.out.println(string);
}
Java基础重要知识点-反射的更多相关文章
- Java 基础常见知识点&面试题总结(下),2022 最新版!
你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,同步一下最新更新,希望能够帮助你. 前两篇: Java 基础常见知识点&面试题总结(上),2022 最新版 ...
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- Java基础教程:反射基础
Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ...
- Java 基础常见知识点&面试题总结(中),2022 最新版!| JavaGuide
你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 上篇:Java 基础常见知识点&面试题总结(上),2022 最新 ...
- Java基础面试知识点总结
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- 学习Spring必学的Java基础知识(1)----反射(转)
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- 学习Spring必学的Java基础知识(1)----反射
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- Java基础学习(1)——反射
反射就是把Java类中的各种成分映射成相应的Java类(主要用于框架开发) 反射的基石–>Class类 Java程序中的各个类属于同一事物,描述这类事务的Java类名就是Class. Class ...
随机推荐
- bug排查小结
mysql cpu利用率偏高,并且长时间居高不下. show processlist 发现有一个单表查询的sql语句出现的频率比较高, 这个单表查询中规中矩,where语句中条件都使用”=“连接,再加 ...
- 关于ArrayList的5道面试题
我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...
- Nginx与Lua
http://www.cnblogs.com/xd502djj/archive/2012/11/20/2779598.html 今天安装lua试试,这个从开始装的,发现一篇文字,字数虽少,但是却讲的很 ...
- python爬取网易云周杰伦所有专辑,歌曲,评论,并完成可视化分析
---恢复内容开始--- 去年在网络上有一篇文章特别有名:我分析42万字的歌词,为搞清楚民谣歌手们在唱些什么.这篇文章的作者是我大学的室友,随后网络上出现了各种以为爬取了XXX,发现了XXX为名的文章 ...
- 安卓----Spinner
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android=" ...
- COGS2421 [HZOI 2016]简单的Treap
题面见这里 大概是个模板题 Treap暴力插入的做法太暴力了并不优美 这里就需要用到笛卡尔树的构造方法,定义见这里 在 假的O(n) 的时间内构造一棵Treap 把元素从小到大排序 这样从小到大插入时 ...
- Java动态代理之JDK实现和CGlib实现
一:代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. 静态代理由 业务实现类.业务代理类 两部分组成.业务实现类 负责实现 ...
- java基础系列之ConcurrentHashMap源码分析(基于jdk1.8)
1.前提 在阅读这篇博客之前,希望你对HashMap已经是有所理解的,否则可以参考这篇博客: jdk1.8源码分析-hashMap:另外你对java的cas操作也是有一定了解的,因为在这个类中大量使用 ...
- .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)
上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...
- 一个实时收集MySql变更记录的组件CanalSharp.AspNetCore
一.关于CanalSharp CanalSharp 是阿里巴巴开源项目 Canal 的 .NET 客户端.为 .NET 开发者提供一个更友好的使用 Canal 的方式.Canal 是mysql数据库b ...