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

例如 获取构造函数:

模版:

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

反射函数模版:

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

反射main方法

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

 得到字段:

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

例子:

//Person类
package cn.test; import static java.lang.System.out; import java.awt.List;
public class Person { private String name; public Person(){
out.print("nulllllllll");
}
public Person(String name){
out.println(name);
this.name = name;
} public Person(String name,int n){
out.print(""+name+" "+n);
}
private Person(List l){
out.print("static person");
} public void getint(int x){
System.out.println("x=="+x);
} public static void main(String[] args){
System.out.print("main ");
}
}

  

 

//测试类
package cn.test.test; import java.awt.List;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import org.junit.Test; import cn.test.Person; public class test { @Test
public void test1() throws Exception{
Class test = Class.forName("cn.test.Person");
Constructor test1 = test.getConstructor(null);
Person person = (Person) test1.newInstance(null); } @Test
public void test2() throws Exception{
Class test2 = Class.forName("cn.test.Person");
Constructor c2 = test2.getConstructor(String.class);
Person person = (Person) c2.newInstance("xxvdfdfd"); }
@Test
public void test3() throws Exception{
Class test3 = Class.forName("cn.test.Person");
Constructor c3 = test3.getDeclaredConstructor(List.class);
c3.setAccessible(true);
Person person = (Person) c3.newInstance(new List());
} //反射得到方法
@Test
public void test4() throws Exception{
Person person = new Person();
Class test4 = Class.forName("cn.test.Person");
Method tt = test4.getMethod("getint", int.class); tt.invoke(person, ); }
//反射得到买你函数
@Test
public void testmain() throws Exception{
Class testmain = Class.forName("cn.test.Person");
Method tt = testmain.getMethod("main",String[].class);
tt.invoke(null, new Object[]{new String[]{"aa","bbb"}});
} //反射得到字段
@Test
public void getname() throws Exception{
Person person = new Person("yy");
Class cla = Class.forName("cn.test.Person");
Field field = cla.getField("name");//得到name
String name = (String) field.get(person);
System.out.println(name);
}
}

  

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. Git 和 SVN之间的五个基本区别

    GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征.所以,这篇文章的主要目的就是 ...

  2. win10系统安装 VS 2015 安装包下载

    这个VS2015安装包 我找了好久才找到  能在WIN 10系统下安装 下面分享链接地址给大家: http://www.ithome.com/html/win10/215213.htm

  3. jvm强制类型转换

    public class Integer_Object { public static void main(String[] args){ Object obj = new ooo(); // Int ...

  4. hdu 1908

    题意:一个人有一个代号K和一个优先等级P,一共有4种操作,0:结束,1:新建一个人,代号为K,优先等级为P,2:输出优先等级最大的人的代码,并删除该人,3:输出优先等级最小的人的代码,并删除该人. 用 ...

  5. python正则表达式练习篇

    练习一: 利用who命令输出所有已经登录系统的用户的信息,并把登录名.用户登录时的电传.登录时间.登录地址利用正则表达式分割开来. 数据的格式: %who wesc console Jun 20 20 ...

  6. Eclipse使用git 上传代码至github

    右击项目,选择Team->Share Project,弹出如下窗口. 选择git,next,在弹出的界面上,①先勾选Use or create……,②createrepository,③勾选工程 ...

  7. PHP面试题之小杂鱼

    这里的题目都是比较老的,但是做笔试题时经常碰到,因为这些题目比较凌乱,考的知识点不好分类,就放一块了 /** * 题目:最少代码实现求3个数的最大值 * 三目运算符实现 */ function get ...

  8. centos6.7配置git服务器

    1.yum install -y git 2.adduser git 3.cd /data/git 没有则创建该目录 git init --bare test.git;创建一个裸仓库,没有工作区,不需 ...

  9. Flask中endpoint的理解

    在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的.最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint 首先,我们看一个例子: @app ...

  10. Linux07--Shell程序设计03 通配符与正则表达式

    通配符 通配符可用于代替字符. 通常地,星号“*”匹配0个或以上的字符,问号“?”匹配1个字符. 使用情况: 1.文件和目录 在CP/M.DOS.Microsoft Windows和类Unix操作系统 ...