反射

反射的优点和缺点

优点:可以实现动态创建对象和编译,体现出很大的灵活性。

缺点:对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行的操作。

反射是JAVA被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

加载完类之后,在堆内存的方法去中就产生了一个Class类型的对象,这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,被形象的称之为:反射。

所有类型的class对象

 Class c1=Object.class;//类Class c2=Comparable.class;//接口Class c3=String[].class;//一维数组Class c4=int[][].class;//二维数组Class c5=Override.class;//注解Class c6= ElementType.class;//枚举Class c7=Integer.class;//整数Class c8=Void.class;//voidClass c9=Class.class;//class\

创建类的对象:调用Class对象的newInstance()方法

1、类必须有一个无参数的构造器

2、类的构造器的访问权限需要足够

通过反射,调用类中的方法,通过Method类完成

1、通过Class类的getMethod()方法取得一个Method对象,并设置此方法操作时所需要的参数类型。

2、之后使用Object invoke()进行调用,并向方法中传递要设置的obj对象的参数信息。

setAccessible

1、它的作用是启动和禁用访问安全检查的开关。

2、参数值为true则指示反射的对象在使用时应该取消JAVA语言访问检查。

3、参数值为false则指示反射的对象应该实施Java语言访问检查。


package java0718;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;//通过反射,动态的创建对象
public class Test3 {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {//获得class对象Class c1 = Class.forName("java0718.User");//构造一个对象/* User user = (User)c1.newInstance();//本质上是调用了类的无参构造器System.out.println(user)*/;//通过构造器创建对象Constructor constructor = c1.getDeclaredConstructor(int.class, String.class, int.class);User s = (User) constructor.newInstance(18, "龙", 001);System.out.println(s);//通过反射调用普通方法User user1 = (User)c1.newInstance();//通过反射获取一个方法Method setName = c1.getDeclaredMethod("setName", String.class);//invoke:激活的意思//(对象,‘方法的值’)setName.invoke(s,"龙皇");System.out.println(s.getName());//通过反射操作属性System.out.println("===================");User s1 = (User) c1.newInstance();Field name = c1.getDeclaredField("name");//不能直接操作私有属性,我们需要关闭程序的安全检测,属性或者方法的setAccessible(true)name.setAccessible(true);name.set(s1,"桐人");System.out.println(s1.getName());}
}

(true);
name.set(s1,“桐人”);
System.out.println(s1.getName());
}
}


Java-------反射相关推荐

  1. Java 反射 (快速了解反射)

    反射的概念 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...

  2. java反射最佳实践,java反射性能测试分析

    java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...

  3. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

  4. Java反射以及应用

    需求:需要通过反射动态获取类的字段类型,然后做特殊处理 Java反射getDeclaredField和getField的区别 getDeclaredFiled 只能获取类本身的属性成员(包括私有.共有 ...

  5. java反射用在哪里_Java反射

    昨天去参加比赛了,所以没有进行博客迁移.人生中的第一场健体比赛,虽然没得奖,但是收获和带来的思考颇丰.意外地进入了男子B组(174以上)的半决赛,然后在半决赛的时候还被裁判员点名出去单独比较,这个很让 ...

  6. Java反射(详述版)

    一.什么是反射? 我们先来看一个例子: package venus; public class Student {public String name;public Student(){System. ...

  7. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  8. Java反射 - 私有字段和方法

    尽管普遍认为通过Java Reflection可以访问其他类的私有字段和方法. 这并不困难. 这在单元测试中可以非常方便. 本文将告诉你如何. 访问私有字段 要访问私有字段,您需要调用Class.ge ...

  9. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  10. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

最新文章

  1. 进程通信学习笔记(读写锁)
  2. 你必须知道的10个提高Canvas性能技巧
  3. Java多线程知识小抄集(一)
  4. 关于windows图形编程 Hello2 程序的问题
  5. input hidden用法
  6. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从
  7. 搭载鸿蒙系统的手机是怎样操作的,华为官方:鸿蒙系统2.0上线,手机能否搭载鸿蒙操作系统?...
  8. RTL8201EL介绍
  9. Azkaban入门简介
  10. 三种Moran's I(空间自相关性) 之我见
  11. 基于CNN-LSTM的手写数字识别与应用实现(附tensorflow代码讲解)
  12. 一款陌生人状态社交软件--same
  13. java 股票指标算法库_股票K线指标算法整理(Java封装工具类,K线指标算法工具类)...
  14. CodeSys Rand Numer 随机数生成
  15. Linux下deb包和rpm包区别
  16. Excel获取字体颜色信息的函数操作FgColor函数
  17. sqlserver 中使用sqlcmd 执行*.sql文件
  18. SpringBoot笔记系列目录
  19. Android开发中的性能优化(摘录:陈彧堃演讲实录)
  20. 佳博打印机接入(java)

热门文章

  1. 领域驱动设计(3) DDD设计流程
  2. 牛客网彩色瓷砖C/C++解决
  3. three.js 颜色color的几种设置方式
  4. python评分卡1_woe与IV值
  5. deepin安装运行wireshark
  6. oracle的默认值,Oracle默认值
  7. java默认值_java 基本数据类型初始值(默认值)
  8. 换行样式不要首行缩进_css样式控制首行缩进
  9. ParameterizedType详解
  10. EasyUI easyui-textbox 提示