Java 反射 与 主要API

2023-10-27

控制你的大脑,
控制你的行为,你会得到更多,收获很多。

一、反射相关的主要API:
API 名称 代表含义
Java.lang.class 代表一个类
java.lang.reflect.Method 代表类的方法
java.lang.reflect.Field 代表类的成员变量
java.lang.reflect.Constructor 代表类的构造器
二 、代码例子演示:

1、创建了一个Person类

public class Person implements Serializable {
private static final long serializableVersionUID =4567892L; // 序列版本号
private String name;
int age;
private String sex;
private String nation;
public Person() {
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void show(){
System.out.println(“我要好好学习Java”);
}
private void shownation(String nation){
System.out.println(“我的国籍是:”+nation);
}
@Override
public String toString() {
return “Person{” +
“name=’” + name + ‘’’ +
“, age=” + age +
“, sex=’” + sex + ‘’’ +
‘}’;
}
}

三、反射测试类:

import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MethondTest {
private Object obj;

反射之前的方法使用
@Test
public void test1(){
Person p = new Person(“jimmy”,12,“男”);
p.setAge(1);
System.out.println§;
p.show();
}

/**
 *
 * 	反射之后 的使用方法
 */

@Test
public void test2() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
//1、通过反射,创建Person 类的对象
	Class clazz = Person.class;
	Constructor cons = clazz.getConstructor(String.class, int.class, String.class);
	Object o = cons.newInstance("tom", 12, "男");
	Person p =	(Person) o;
	System.out.println(p.toString()); //虚拟方法调用
//	System.out.println(o.toString());
	// 2、通过反射,调用对象指定的属性、方法
	Field age = clazz.getDeclaredField("age");
	age.set(p,10);
	/**
	 * 因为我的person 类中age是private 的,改为public 的可以解决
	 *
	 * 	报错信息:
	 * java.lang.IllegalAccessException: Class Com.bigDataWork_intentjava.MethondTest can not access a member of class Com.bigDataWork_intentjava.Person with modifiers "private"
	 *
	 * 	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
	 */
	System.out.println(p.toString());
	//调用方法
	Method show = clazz.getDeclaredMethod("show");
	show.invoke(p);

	// 调用Person 类中name属性并且修改。
	Field name = clazz.getDeclaredField("name");
	name.setAccessible(true);
	name.set(p,"zqq");
	System.out.println(p);
	// 调用Person 类中 私有的方法
	Method shownation = clazz.getDeclaredMethod("shownation", String.class);
	shownation.setAccessible(true);
	shownation.invoke(p,"中国");
}

在这里插入图片描述

// @Test
// public void Test(){
// Class clazz = Person.class;
// //getMethods() :获取当前运行时类为public 权限的方法
// Method[] methods = clazz.getMethods();
// for (Method m: methods ){
// System.out.println(m);
// }
// }
}
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 反射 与 主要API 的相关文章

  • Java线程:volatile关键字

    本文转载至 http lavasoft blog 51cto com 62575 222076 Java线程 volatile关键字 Java 语言包含两种内在的同步机制 同步块 或方法 和 volatile 变量 这两种机制的提出都是为了
  • Java 终止嵌套for 循环总结

    public class NestedLoopDemo public static void main String args 第一步 构建嵌套for 循环 for int i 0 i lt 10 i for int j 0 j lt 10
  • Java 反射 与 主要API

    控制你的大脑 控制你的行为 你会得到更多 收获很多 文章目录 一 反射相关的主要API 二 代码例子演示 三 反射测试类 一 反射相关的主要API API 名称 代表含义 Java lang class 代表一个类 java lang re
  • Java线程:线程的交互

    本文转载至 http lavasoft blog 51cto com 62575 99157 线程交互是比较复杂的问题 SCJP要求不很基础 给定一个场景 编写代码来恰当使用等待 通知和通知所有线程 一 线程交互的基础知识 SCJP所要求的
  • java 线程:概念与原理

    本文转载至 http lavasoft blog 51cto com 62575 99150 一 操作系统中线程和进程的概念 现在的操作系统是多任务操作系统 多线程是实现多任务的一种方式 进程是指一个内存中运行的应用程序 每个进程都有自己独
  • java 阻塞模式与非阻塞模式

    TCP IP 阻塞模式与非阻塞模式 java view plain copy print package concurrentTest import java io BufferedReader import java io IOExcep
  • java并发包:概论

    本文转载至 http blog csdn net a910626 article details 51900917 为什么要学习并发 今天和一哥们聊天 聊着聊着聊到钱的方面 当时我就说 全世界60亿人 要是每人给我一块钱那不就发财了啊 哥们
  • Java线程:并发协作-死锁

    本文转载至 http lavasoft blog 51cto com 62575 222074 Java线程 并发协作 死锁 线程发生死锁可能性很小 即使看似可能发生死锁的代码 在运行时发生死锁的可能性也是小之又小 发生死锁的原因一般是两个
  • (java 基础知识)java序列化和反序列话总结

    序列化 将java对象转换为字节序列的过程叫做序列化 反序列化 将字节对象转换为java对象的过程叫做反序列化 通常情况下 序列化有两种用途 1 把对象的字节序列永久的保存在硬盘中 2 在网络上传输对象的字节序列 相应的API java i
  • Java线程:新特征-有返回值的线程

    本文转载至 http lavasoft blog 51cto com 62575 222082 在Java5之前 线程是没有返回值的 常常为了 有 返回值 破费周折 而且代码很不好写 或者干脆绕过这道坎 走别的路了 现在Java终于有可返回
  • Java 数组 初始化方式 和遍历方式

    Java 数组 初始化方式总结 第一种 静态初始化 所谓静态初始化 初始化时由程序员显式指定每个数组元素的初始值 有系统决定数组的长度 简单实例 String strArr 张三 李四 王五 第二种 动态初始化 所谓动态初始化 初始化时由程
  • 使用 IO 流 读取 本 地 文 件 (两种方式)

    使用IO 流读取本地文件 public class FileReadWrite public static void main String args FileReader fr null try 1 创建读取文件 fr new FileR
  • Java线程:线程的调度-守护线程

    本文转载至 http lavasoft blog 51cto com 62575 221845 Java线程 线程的调度 守护线程 守护线程与普通线程写法上基本么啥区别 调用线程对象的方法setDaemon true 则可以将其设置为守护线
  • 代码质量保障第2讲:单元测试 - 浅谈单元测试

    代码质量保障第2讲 单元测试 浅谈单元测试 本文是代码质量保障第2讲 浅谈单元测试 单元测试 unit testing 是指对软件中的最小可测试单元进行检查和验证 这是基础 所以围绕着单元测试 我从网上搜集和总结了相关的概念 以助你完善体系
  • (java 基础知识) Java 安全套接字--javax.net.ssl

    有关SSL的原理和介绍在网上已经有不少 对于Java下使用keytool生成证书 配置SSL通信的教程也非常多 但如果我们不能够亲自动手做一个SSL Sever和SSL Client 可能就永远也不能深入地理解Java环境下 SSL的通信是
  • (Java 基础知识) Java线程池

    ExecutorService 建立多线程的步骤 1 定义线程类 class Handler implements Runnable 2 建立ExecutorService线程池 ExecutorService executorServic
  • java并发包:生产者消费者模式

    本文转载至 http blog csdn net a910626 article details 51900974 生产者消费者模式是一个经典的多线程设计模式 它为多线程间的协作提供了良好的解决方案 在生产者消费者模式中 通常有两类线程 即
  • java并发包:重入锁与Condition条件

    本文转载至 http blog csdn net a910626 article details 51900941 重入锁 这里介绍一下synchronized wait notify方法的替代品 或者说是增强版 重入锁 重入锁是可以完全替
  • (Java 基础知识) Java 正则表达式

    一 概述 正则表达式是Java处理字符串 文本的重要工具 Java对正则表达式的处理集中在以下两个两个类 java util regex Matcher 模式类 用来表示一个编译过的正则表达式 java util regex Pattern
  • (java 基础知识) Java打印---javax.print

    package com print import java io import javax print import javax print attribute import javax print attribute standard p

随机推荐