首先来看看百度百科中是如何定义的:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
通俗点将就是通过反射机制可以查看类中的所有内容(属性、构造方法、普通方法)。
首先来说说为什么用这个反射机制,再说怎么实现。
一个已经发布了的应用程序,如何对他进行更改,为了保证安全,他的源码肯定不会告诉你,只会给你提供一个接口,让你写一个类去实现它,然后
呢?你写的更改信息如何让应用程序知道呢,你没办法直接让应用程序创建这个类的对象,这时候就会用到配置文件,你把你的类名写到配置文件当中
应用程序就会利用反射机制只通过这个类名就能够知道这个类中你写的内容。比如Tomcat服务器,这也是一个应用程序,他的作用是接收请求和处理请求

如果你想定义自己的接收处理方式,他提供了一个Servlet接口给你,你实现了这个接口,然后把这个类名放到Tomcat的配置文件web.xml中,Tomcat
就会利用反射机制来获取内容。
 
那该怎么解释呢?
我们都知道一个java程序想要运行,首先要进行早期编译器的编译生成class文件,虚拟机然后要加载这个class文件到方法区中,在类加载过程中会
产生一个Class类,这个Class类就是反射机制的源头,如果你想查看任意一个类的属性和方法,都得先生成一个Class对象,万物皆对象,Class类就是class
文件的抽象,

但是Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
那Class对象如何和类关联呢?
有三种方式:
1.通过类名.class;
2.通过对象名.getClass();
3.通过类加载驱动class.forName(完整类名(带有完整包路径的名))。
创建对象以后,就可以查看类中的内容。
public class Person{

//属性
private String name;
private int age;
//构造方法
public Person(){}
public Person(String name;int age){
this.name=name;
this.age=age;
}
//普通方法
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age=age;
} }

在Class类中,

①属性有一个自己的名称叫做Field;

②构造方法叫做Constructor;

③普通方法叫做Method;

针对属性的操作

 第一步首先要获得Class对象。以Person为例
 Class clazz1=Person.class;
Class clazz2=new Person().getClass();
Class clazz3=Class.forName(com.in.Person);
第二部要得到Field对象
// 获取公有的属性的Field对象
Filed s=clazz.getField(name);
//获取本类的属性,但包括私有属性的Field对象
Field s=clazz.getDeclaredField("age");

第三步获取获取或修改属性的值

属性需要通过对象来获取

Object obj=clazz.newInstance();
//设置可以获取私有属性的值
s.setAccessible(true);
System.out.println(s.get(obj));
针对构造方法的操作

通过无参构造方法创建对象可以直接用
Class clazz=Class.forName("com.in.Person");

如果想要有参构造方法呢?

         Class clazz=Class.forName("com.in.Person");
//得到Constructor对象,把参数类型传进去
Constructor constructor=clazz.getConstructor(String.class,int.class);
//这样就等同于 Person p=new Person("小明",33);
Object obj=constructor.newInstance("小明",);

操作普通方法

      

    Class clazz=Class.forName("com.in.Person");
//没有参数的普通方法
Method method1=clazz.getMethod("noNum", null);
Object obj=clazz.newInstance();
method1.invoke(obj, null);
//有参数的普通方法
Method method2=clazz.getMethod("hasNum", int.class);
method2.invoke(obj, );

												

谈一谈java里面的反射机制的更多相关文章

  1. java中的反射机制在Android开发中的用处

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

  2. 黑马程序员——【Java高新技术】——反射机制

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...

  3. Java 中的反射机制

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

  4. JAVA类型信息——反射机制

    JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...

  5. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  6. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  7. java学习之反射机制

    java语言区别于C,C++等准静态语言的最大特点就是java的反射机制.静态语言的最直接定义就是不能在运行时改变程序结构或变量的类型.按照这样的定义,python,ruby是动态语言,C,C++,J ...

  8. java基础之反射机制

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

  9. 深入理解Java中的反射机制

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

随机推荐

  1. linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案

    https://blog.csdn.net/electrocrazy/article/details/79377214

  2. EF分别使用IQueryable和IEnumerable实现更新和删除

    缺点 使用IQueryable无法跟踪,无法监控sql,无法使用SaveChanges(). 优点 使用IQueryable简单粗暴. class Program { static void Main ...

  3. [转] React 中组件间通信的几种方式

    在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面依次说下这几种通 ...

  4. jquery实时监听输入框值变化

    在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能满足条 ...

  5. 1.RN环境搭建,创建项目,使用夜神模拟调试

    1.环境搭建(Yarn.React Native 的命令行工具(react-native-cli)) npm install -g yarn react-native-cli 具体参考 参见官方(中文 ...

  6. nginx 域名泛解析

    部分应用场景下要求服务器根据客户输入的二级域名地址自动访问不同的页面,比如一个服务器放置了不同的业务,商城.官网等多个业务,又不想一个个配置server, 网站目录结构入戏: html 网站根目录 m ...

  7. ip访问网站和localhost访问网站中top使用

    对于相对定位,使用margin-top不用简单使用top. top在localhost中能正常显示,在ip访问时会出现多余空白. margin-top不管是localhost中还是ip中都能正常显示.

  8. ELK 环境搭建3-Logstash

    一.Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件或者中间件. 二.搭建 1.因为要涉及到收 ...

  9. React 入门实例教程(转载)

    现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...

  10. php 操作数据库

    $datetoday = date('Y-m-d'); $datetime = $thedate; $data_info = $data; $db = array( 'dsn' => 'mysq ...