反射调用成员属性
时间:2019-07-20
本文章向大家介绍反射调用成员属性,主要包括反射调用成员属性使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
成员属性保存了一个对象的所有信息,通过反射可以实现成员属性的赋值与取值操作,本课程主要讲解了属性的直接操作,以及封装性取消等操作。
1 package com.youtube.demo; 2 3 import java.lang.reflect.Field;; 4 5 interface IChannelService{ 6 public static final String NAME = "youtube"; 7 } 8 abstract class AbsBase{ 9 protected static final String BASE = "www.youtube.com"; 10 private String info = "Hello, youtube"; 11 } 12 class Member extends AbsBase implements IChannelService{ 13 private String name; 14 private int age; 15 } 16 public class JavaReflectDemo { 17 public static void main(String[] args) { 18 Class <?> cls = Member.class; 19 { 20 Field fields[] = cls.getFields(); 21 for(Field field:fields) { 22 System.out.println(field); 23 } 24 } 25 System.out.println("----------------华丽的分割线------------------"); 26 { 27 Field fields[] = cls.getDeclaredFields(); 28 for(Field field:fields) { 29 System.out.println(field); 30 } 31 } 32 } 33 }
运行结果:
public static final java.lang.String com.youtube.demo.IChannelService.NAME ----------------华丽的分割线------------------ private java.lang.String com.youtube.demo.Member.name private int com.youtube.demo.Member.age
反射操作成员属性内容:
1 package com.facebook.demo; 2 import java.lang.reflect.Field; 3 class Member{ 4 private String name; 5 } 6 public class JavaReflectDemo { 7 public static void main(String[] args) throws Exception { 8 Class<?> cls = Member.class; 9 Object obj = cls.getDeclaredConstructor().newInstance(); 10 Field nameField = cls.getDeclaredField("name"); 11 nameField.setAccessible(true);//解除封装 12 nameField.set(obj, "小李老师"); 13 System.out.println(nameField.get(obj)); 14 } 15 }
运行结果:
小李老师
如果不解除封装,会抛如下异常:
Exception in thread "main" java.lang.IllegalAccessException: class com.facebook.demo.JavaReflectDemo cannot access a member of class com.facebook.demo.Member with modifiers "private" at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:355) at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:639) at java.base/java.lang.reflect.Field.checkAccess(Field.java:1075) at java.base/java.lang.reflect.Field.set(Field.java:778) at com.facebook.demo.JavaReflectDemo.main(JavaReflectDemo.java:11)
获取指定属性类型:
1 package com.facebook.demo; 2 import java.lang.reflect.Field; 3 class Member{ 4 private String name; 5 } 6 public class JavaReflectDemo { 7 public static void main(String[] args) throws Exception { 8 Class<?> cls = Member.class; 9 Object obj = cls.getDeclaredConstructor().newInstance(); 10 Field nameField = cls.getDeclaredField("name"); 11 System.out.println(nameField.getType().getName()); 12 System.out.println(nameField.getType().getSimpleName()); 13 } 14 }
运行结果:
java.lang.String
String
原文地址:https://www.cnblogs.com/sunzhongyu008/p/11219278.html
- 分布式消息队列 RocketMQ 源码分析 —— Message 拉取与消费(上)
- 分布式消息队列 RocketMQ 源码分析 —— Message 拉取与消费(下)
- Spring Boot中使用RabbitMQ
- Spring Cloud构建微服务架构:消息驱动的微服务(入门)【Dalston版】
- 哪类人适合当产品经理?
- 产品经理·杂谈
- Python机器学习中的特征选择
- Android学习第八弹之改变状态栏的颜色使其与APP风格一体化
- 手把手教你 MongoDB 的安装与详细使用(二)
- 搭建 MongoDB分片(sharding) / 分区 / 集群环境
- Android调用手机中的应用市场,去评分的功能实现
- ANR 原理与实战技巧
- Android将应用程序的崩溃信息如何保存到本地文件,并上传至服务器
- android native内存检测方案(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux sed指令详解
- Grafana使用zabbix自定义模板
- linux shell之变量的使用规则
- 第11期:压缩表
- grafana-zabbix插件安装和配置zabbix mysql
- grafana使用教程之API key
- Grafana使用教程之安装
- Java基础数据类型之包装类equals和==详解
- SCP不用密码传输文件
- Java 使用Collections.reverse对list集合进行降序排序
- Liquibase异常 mysql数据库 Cannot add foreign key constraint
- Linux获取文件最后修改时间
- Crontab脚本无法正常执行问题
- Python 输入时间字符串以分钟单位计算时间差
- Linux下执行bcp指令