java反射机制就是获取出class的相应方法

例如 获取构造函数:

模版:

  1. Class test = Class.forName("cn.test.Person");//得到相应的class
  2. Constructor test1 = test.getConstructor(null); //获取空的够着函数
  3. Person person = (Person) test1.newInstance(null);//new一个新对象
    //这里是访问私有的构造函数,进行暴力反射
  4. Constructor c3 = test3.getDeclaredConstructor(List.class);//获得私有的构造
  5. c3.setAccessible(true);//暴力反射

反射函数模版:

  1. //实例化一个对象
    Class classtest = Class.forName("");
  2. Method method = classtest.getMethod("方法名",参数);//参数多个用逗号隔开
  3. method.invoke(对象,参数);//首先要创建一个实例化类,然后再进行调用

反射main方法

  1. Class testmain = Class.forName("cn.test.Person");//得到对象
  2. Method tt = testmain.getMethod("main",String[].class);//得到main方法
  3. tt.invoke(null, new Object[]{new String[]{"aa","bbb"}});//调用

 得到字段:

  1. Person person = new Person("yy");
  2. Class cla = Class.forName("cn.test.Person");
  3. Field field = cla.getField("name");//得到name
  4. String name = (String) field.get(person);
  5. System.out.println(name);

例子:

  1. //Person类
  2. package cn.test;
  3.  
  4. import static java.lang.System.out;
  5.  
  6. import java.awt.List;
  7. public class Person {
  8.  
  9. private String name;
  10.  
  11. public Person(){
  12. out.print("nulllllllll");
  13. }
  14. public Person(String name){
  15. out.println(name);
  16. this.name = name;
  17. }
  18.  
  19. public Person(String name,int n){
  20. out.print(""+name+" "+n);
  21. }
  22. private Person(List l){
  23. out.print("static person");
  24. }
  25.  
  26. public void getint(int x){
  27. System.out.println("x=="+x);
  28. }
  29.  
  30. public static void main(String[] args){
  31. System.out.print("main ");
  32. }
  33. }

  

 

  1. //测试类
  2. package cn.test.test;
  3.  
  4. import java.awt.List;
  5. import java.lang.reflect.Constructor;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8.  
  9. import org.junit.Test;
  10.  
  11. import cn.test.Person;
  12.  
  13. public class test {
  14.  
  15. @Test
  16. public void test1() throws Exception{
  17. Class test = Class.forName("cn.test.Person");
  18. Constructor test1 = test.getConstructor(null);
  19. Person person = (Person) test1.newInstance(null);
  20.  
  21. }
  22.  
  23. @Test
  24. public void test2() throws Exception{
  25. Class test2 = Class.forName("cn.test.Person");
  26. Constructor c2 = test2.getConstructor(String.class);
  27. Person person = (Person) c2.newInstance("xxvdfdfd");
  28.  
  29. }
  30. @Test
  31. public void test3() throws Exception{
  32. Class test3 = Class.forName("cn.test.Person");
  33. Constructor c3 = test3.getDeclaredConstructor(List.class);
  34. c3.setAccessible(true);
  35. Person person = (Person) c3.newInstance(new List());
  36. }
  37.  
  38. //反射得到方法
  39. @Test
  40. public void test4() throws Exception{
  41. Person person = new Person();
  42. Class test4 = Class.forName("cn.test.Person");
  43. Method tt = test4.getMethod("getint", int.class);
  44.  
  45. tt.invoke(person, );
  46.  
  47. }
  48. //反射得到买你函数
  49. @Test
  50. public void testmain() throws Exception{
  51. Class testmain = Class.forName("cn.test.Person");
  52. Method tt = testmain.getMethod("main",String[].class);
  53. tt.invoke(null, new Object[]{new String[]{"aa","bbb"}});
  54. }
  55.  
  56. //反射得到字段
  57. @Test
  58. public void getname() throws Exception{
  59. Person person = new Person("yy");
  60. Class cla = Class.forName("cn.test.Person");
  61. Field field = cla.getField("name");//得到name
  62. String name = (String) field.get(person);
  63. System.out.println(name);
  64. }
  65. }

  

java反射机制(笔记)的更多相关文章

  1. Java反射机制--笔记

    1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...

  2. Java分享笔记:关于Java反射机制

    [1] 关于Java反射机制的概述 1.反射机制的概念:允许程序在执行期,借助于反射相关的API,取得任何类的内部信息,并能直接操作任意对象内部的属性和方法. 2.与反射相关的主要的API:java. ...

  3. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  4. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  5. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  6. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  7. Java反射机制专题

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

  8. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

  9. Java反射机制DOME

    Java反射机制 public class TestHibernate { @Test public void TestHb(){ try { Class cs = Class.forName(&qu ...

随机推荐

  1. 万事开头难——Cocos2d-x学习历程(一)

    万事开头难,不知该从哪里开始,不过既然要学习一样新东西,那就从了解它开始吧... Cocos2d-x是一个通用平面游戏引擎,基于一个同样十分著名的游戏引擎Cocos2d-iPhone设计,Cocos2 ...

  2. 多线程并发编程之显示锁ReentrantLock和读写锁

    在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock. ReentrantLock概况 ReentrantLock是 ...

  3. sql update小结

    以前update用的不少,但都是简单的单表操作,没有在意,最近查阅多表关联更新及更新top n,发现update还真灵活,记录如下(在mssqlserver2008r2下测试通过): 1单表操作  u ...

  4. 在MySQL数据库建立多对多的数据表关系

    在数据库中,如果两个表的之间的关系为,多对多的关系,如:“学生表和课程表”,一个学生的可以选多门课,一门课也可以被多门学习选;根据数据库的设计原则,应当形成第三张关联表 步骤1:创建三张数据表Stud ...

  5. svn检出maven工程到eclipse里面,部署到tomcat的步骤

    1. 首先import project from svn 2.检出项目后,如果是多模块的maven项目,在子模块右击,import as project 3.右击项目,properties->d ...

  6. mysql memcache

    http://blog.csdn.net/newjueqi/article/details/8350643

  7. web本地存储-LocalStorage

    LocalStorage是HTML5 提供的在客户端存储数据的方法.替代但不同于之前的globalStorage,规则作用范围事先已设定好,是同一个域名(子域无效),使用同一种协议,在同一个端口上.目 ...

  8. #include <strstream>

    std::ostrstream MYOUT(str, sizeof(str)); 拼接字符串 #include <iostream> #include <strstream> ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串

    字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...

  10. [置顶] 浅析objc的消息机制

    学习ios的同学都知道ojbc一种runtime的语言,runtime表明函数的真正执行的时候来确定函数执行的.这样的好处就是我们能很灵活的设计我们的代码,也能在看似合法的情况下做一些非常有意思的事情 ...