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的反射机制. ...
随机推荐
- [转]coredump简介与coredump原因总结
[转]coredump简介与coredump原因总结 http://blog.sina.com.cn/s/blog_54f82cc201013srb.html 什么是coredump? 通常情况下co ...
- vhdl基础---分频
偶数分频 ibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_arith; use ieee.std_logic_unsigned ...
- Zybo智能小车识别图像中的文字
智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...
- jQuery实现模拟滚动条效果;
滚动条在web开发中,很常见,原生的HTML滚动条很难看,因此很多网站借助JS来模拟实现滚动条效果: 滚动条的实现原理其实比较简单,拿垂直滚动条来说: 1),最外层容器需要设置overflow:hid ...
- Ztree的初步使用--checkbox--指定目录下搜索子节点
这里记录一下zTree的check的使用 首先 <%@ Page Language="C#" AutoEventWireup="true" CodeBeh ...
- mongodb 操作类
在使用这个类之前,建议先自己去写,把方法都了解了再用,这样你就可以在适当的时候修个此类,另外请自己构建PagerInfo using System; using System.Collections. ...
- 在线自动下载最新版本jquery
<script src="http://code.jquery.com/jquery-latest.js">
- 01.安装Memcached
1.安装Memcached 1.下载Memcached及其依赖 下载memcached-1.4.24.tar.gz和libevent-2.0.22-stable.tar.gz文件并解压如下: [liz ...
- JavaScript对象进阶
要了解JavaScript对象,我们可以从对象创建.属性操作.对象方法这几个方面入手.概括起来,包括以下几模块: 1.创建对象 1.1 对象直接量 对象直接量是创建对象最简单的方式,由若干名/值对组成 ...
- bzoj 2761 平衡树
裸地平衡树,只需要用到find操作 /************************************************************** Problem: U ...