java反射机制(基础版)
package com.reflect; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method; /**
* java反射机制的基础方法
* @author dr
*
*/
public class ReflectTest {
public static void main(String[] args) throws Exception {
//每个类被加载之后 系统都会为其生成一个Class对象,通过该Class对象可以访问该类的xinxi
//1、获取Class对象(三种方式)
// 1> Class.forName();
Class p1 = Class.forName("com.reflect.Person");
// 2>类.class属性获取Class对象
Class p2 = Person.class;
// 3>对象的getClass()方法获取Class对象
Person person = new Person();
Class p3 = person.getClass();
//2、创建对象
// 1>Class对象的newInstance()方法 创建对象 使用默认的构造器构造实例
Person p = (Person) p1.newInstance();
// 2>使用Class对象获取指定的构造器 在用构造器对象的newInstance()的方法创建对象
Constructor<Person> actor = p2.getConstructor(String.class,String.class);
p = actor.newInstance("bai","123");
System.out.println(p.getName());
//3、用Class对象获取信息
// 1>获取构造函数 返回所有的构造函数 与访问级别没有关系
Constructor<Person>[] actors = p2.getDeclaredConstructors();
for(Constructor<Person> a:actors){
System.out.println(a.getName());
}
// 2>获取构造函数 返回所有的构造函数 只获取public 的构造函数
Constructor<Person>[] acts = p2.getConstructors();
for(Constructor<Person> a:acts){
System.out.println(a.getName());
}
// 3>返回指定参数的构造函数
//(使用getConstructor()只能获取取到public类型的构造函数,此时报错:java.lang.NoSuchMethodException)
//Constructor<Person> single = p2.getConstructor(String.class);
//(使用getConstructor()只能获取取到public类型的构造函数,此时报错:
//ReflectTest can not access a member of class com.reflect.Person with modifiers "private")
//这个时候设置可以访问私有属性或方法的权限即可
Constructor<Person> single = p2.getDeclaredConstructor(String.class);
single.setAccessible(true);
Person pp = single.newInstance("name");
System.out.println(pp.getName());
// 4> 获取和调用方法 (获取所有的方法 以及所有共有的方法 指定的方法 为私有方法设置访问权限等 与construct类似)
Method method = p2.getMethod("getName",null);
System.out.println(method.invoke(p, null));
//设置方法名称 和 该方法所需参数的类型的Class
Method m = p2.getDeclaredMethod("setName", String.class);
//调用的使用要指定哪个对象调用的 和传入的参数
m.invoke(p, "baichuanyu");
System.out.println(p.getName());
// 5> 访问属性值
//name属性是私有属性
Field field = p2.getDeclaredField("name");
//报错:Class ReflectTest can not access Person with modifiers "private"
//field.set(p, "field");
//为Person对象 p 的私有属性name赋值 field
field.setAccessible(true);
field.set(p, "field");
System.out.println(p.getName());
}
} class Person{
private String name;
private String age; public Person(){ } private Person(String name){
this.name = name;
} public Person(String name, String age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
} }
java反射机制(基础版)的更多相关文章
- java反射机制基础
java反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和 属性:这种动态获取信息以及动态调用对象方法的功能称为j ...
- java反射机制基础总结
1反射机制是啥? 反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息. 2反射机制有啥用? Reflection(反射) ...
- JAVA反射机制基础概念
反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- 【java基础】Java反射机制
一.预先需要掌握的知识(java虚拟机) 1)java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存 ...
- Java基础学习总结(75)——Java反射机制及应用场景
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
- 夯实Java基础(二十一)——Java反射机制
1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...
- Java 基础之详解 Java 反射机制
一.什么是 Java 的反射机制? 反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
随机推荐
- win7虚拟打印驱动开发注意事项
win7虚拟打印驱动开发注意事项 通过控制面板安装遇到以下问题:错误1.提示“Printer driver was not installed. Operation could not be comp ...
- Qt---在QLabel上实现系统时间
参考:http://blog.csdn.net/g457499940/article/details/11923887 ---------------------------------------- ...
- 动态链接库知识点归纳之一(DLL概念,如何建立,如何使用,如何优化,如何查看)
简单的总结一些动态链接库的一些知识,方便以后查找. 首先,新建一个动态链接库 (1) 打开编辑器,选择WIN32项目, dll,如下图,项目名字为:test,选择空项目.如下图 (2) ...
- UITableView 应用及其总结
Plain: Grouped: Cell的结构图: UITableViewCellStyleDefault:预设使用这种,若左侧ImageView没图的话,只有一行字(textLable.text). ...
- 【转】eclipse下使用hibernate tools实现hibernate逆向工程
一.基本环境 Eclipse 3.6 AppFuse Struts2 2.1.0 JBoss Hibernate Tools 3.4.0 二.JBoss Hibernate Tools 3.4.0安装 ...
- 解决jquery-easyui1.3.3 combobox 多选模式不兼容IE8问题
扩展Array的原型对象,加入indexOf方法 if(!Array.prototype.indexOf){ Array.prototype.indexOf = function(target) ...
- Crtmp 源码分析
Crtmp Server接收rtmp音视频流,并实现音视频并发,可以作为直播后台的服务.整套代码量并不大,算是轻量级的服务. 花了些时间研究源码,现将研究的结果,记录下来,方便以后查阅. 先不从架构上 ...
- Kali-linux安装之后的简单设置
1.更新软件源:修改sources.list文件:leafpad /etc/apt/sources.list然后选择添加以下适合自己较快的源(可自由选择,不一定要全部): #官方源deb http:/ ...
- 亚马逊 在线测试题目 amazon
分析:其实就是求矩形中某一个点到其他点的距离加权最小 方法一: 对每一个点求其到其他点的加权距离,然后比较最小.由于有M*N个点,对每一个点求加权距离是O(M*N)的,所以整体时间复杂度是O(M*M* ...
- Codeforces Round #243 (Div. 1) A题
http://codeforces.com/contest/425/problem/A 题目链接: 然后拿出这道题目是很多人不会分析题目,被题目吓坏了,其中包括我自己,想出复杂度,一下就出了啊!真是弱 ...