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反射机制(基础版)的更多相关文章

  1. java反射机制基础

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

  2. java反射机制基础总结

    1反射机制是啥? 反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息. 2反射机制有啥用? Reflection(反射) ...

  3. JAVA反射机制基础概念

    反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...

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

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

  5. 【java基础】Java反射机制

    一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存 ...

  6. Java基础学习总结(75)——Java反射机制及应用场景

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

  7. 夯实Java基础(二十一)——Java反射机制

    1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...

  8. Java 基础之详解 Java 反射机制

    一.什么是 Java 的反射机制?   反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...

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

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

随机推荐

  1. 触发器(trigger)的作用???

    1.触发器,英文名trigger,可以简单的理解为: 就相当于是一个事件的触发装置,当满足了一定的事件触发条件后进行相应的操作 例如当复位set信号到来时,我们就让A<=B,这样一个系统就是一个 ...

  2. 【BZOJ 2324】 [ZJOI2011]营救皮卡丘

    Description 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的踏上了营救皮卡丘的道路. 火箭队一共有N个据点,据点 ...

  3. 20145105 《Java程序设计》第2周学习总结

    20145105 <Java程序设计>第2周学习总结 教材学习内容总结 第三章主要的学习内容与c语言有很多相似的地方,讲述了Java的基本语法.其中涵盖: 1. 类型: - short整数 ...

  4. JS多种方法实现随机颜色;

    JS随机颜色有很多地方要用到:比如大家看到很多标签连接都是五颜六色.实现随机颜色的方法有多种,下面来看看具体的实现代码: 方法一: var getRandomColor = function() { ...

  5. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  6. android开发 wifi开发工具类

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import j ...

  7. 关于EF查询的性能

    现象:前台grid发送ajax请求,通过谷歌devtool发现“waiting”时间高达23s(1500条数据);可见服务器端代码处理花费时间很长: 解决:分析代码,有两处代码注释掉后速度提升明显 / ...

  8. OS X 使用技巧——访问所有的键盘功能

    苹果笔记本电脑和苹果的无线键盘只有一个Delete键,可以删除光标前面的字. 按住Fn键再按Delete键就能删除光标后面的字符. 按住Fn键会把上下方向键的效果变成Page Up / Page Do ...

  9. ASP.NET MVC 如何在一个同步方法(非async)方法中等待async方法

    问题 首先,在ASP.NET MVC 环境下对async返回的Task执行Wait()会导致线程死锁.例: public ActionResult Asv2() { //dead lock var t ...

  10. JS 学习笔记--6---日期和时间

    在日期和时间这一块的学习中发现,其实和其他大部分的高级语言中时间和日期的操作差不多,没什么特别的,但是要注意的就是 ECMAScript中规定的一些方法在各大浏览器中的实现方式是不一样的,也就是说存在 ...