java反射机制(基础版)

时间:2022-12-30 09:08:46
 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. Psp个人软件开发软件需求分析及用例分析

    一.需求分析 1.  业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大的影响,不确定因素使得应对十分困难. ...

  2. winform学习之----进程和线程

    Process[] pros = Process.GetProcesses();//获取多个进程            foreach(var item in pros)            {   ...

  3. directX基础学习系列7 网格(自己创建)

    D3DXMesh 以及 D3DXPMesh都是从ID3DXBaseMesh类中集成,mesh基本是对三角单元进行操作 ID3DXBaseMesh主要函数: HRESULT DrawSubset( DW ...

  4. linux ubuntu vsftp 默认主目录

    vi /etc/passwd 查看/ftp:  后面的目录就是默认目录 这是匿名用户的目录 --------------------------- 使用linux 别的用户,默认在/home/用户名 ...

  5. pl&sol;sql developer 编码格式设置

    pl/sql developer编码格式设置   一.pl/sql developer 中文字段显示乱码  原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的. 二. ...

  6. JeeSite 企业信息化快速开发平台

    平台简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. JeeSite本身是以Spring Framework为核心容器,Spri ...

  7. Getting Started with Processing 第五章的easing问题&lpar;2&rpar;

    程序代码清单如下: float x; float y; float px; float py; float easing = 0.05; void setup(){ size(480,120); st ...

  8. TLS 1&period;0协议

    TLS1.0 协议发布于1999年初.该协议可在Internet中提供给通信双方一条私有信道,即对通信消息进行加密.该协议主要描述了通信密钥协商的方法与通信格式的定义.分别由TLS Handshake ...

  9. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  10. 9 - Python函数定义-位置参数-返回值

    目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...