java反射机制(笔记)
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反射机制(笔记)的更多相关文章
- Java反射机制--笔记
1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...
- Java分享笔记:关于Java反射机制
[1] 关于Java反射机制的概述 1.反射机制的概念:允许程序在执行期,借助于反射相关的API,取得任何类的内部信息,并能直接操作任意对象内部的属性和方法. 2.与反射相关的主要的API:java. ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- Java反射机制专题
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...
- java反射机制深入详解
java反射机制深入详解 转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...
- Java反射机制DOME
Java反射机制 public class TestHibernate { @Test public void TestHb(){ try { Class cs = Class.forName(&qu ...
随机推荐
- 万事开头难——Cocos2d-x学习历程(一)
万事开头难,不知该从哪里开始,不过既然要学习一样新东西,那就从了解它开始吧... Cocos2d-x是一个通用平面游戏引擎,基于一个同样十分著名的游戏引擎Cocos2d-iPhone设计,Cocos2 ...
- 多线程并发编程之显示锁ReentrantLock和读写锁
在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock. ReentrantLock概况 ReentrantLock是 ...
- sql update小结
以前update用的不少,但都是简单的单表操作,没有在意,最近查阅多表关联更新及更新top n,发现update还真灵活,记录如下(在mssqlserver2008r2下测试通过): 1单表操作 u ...
- 在MySQL数据库建立多对多的数据表关系
在数据库中,如果两个表的之间的关系为,多对多的关系,如:“学生表和课程表”,一个学生的可以选多门课,一门课也可以被多门学习选;根据数据库的设计原则,应当形成第三张关联表 步骤1:创建三张数据表Stud ...
- svn检出maven工程到eclipse里面,部署到tomcat的步骤
1. 首先import project from svn 2.检出项目后,如果是多模块的maven项目,在子模块右击,import as project 3.右击项目,properties->d ...
- mysql memcache
http://blog.csdn.net/newjueqi/article/details/8350643
- web本地存储-LocalStorage
LocalStorage是HTML5 提供的在客户端存储数据的方法.替代但不同于之前的globalStorage,规则作用范围事先已设定好,是同一个域名(子域无效),使用同一种协议,在同一个端口上.目 ...
- #include <strstream>
std::ostrstream MYOUT(str, sizeof(str)); 拼接字符串 #include <iostream> #include <strstream> ...
- 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串
字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...
- [置顶] 浅析objc的消息机制
学习ios的同学都知道ojbc一种runtime的语言,runtime表明函数的真正执行的时候来确定函数执行的.这样的好处就是我们能很灵活的设计我们的代码,也能在看似合法的情况下做一些非常有意思的事情 ...