JAVA学习--反射属性操作
1 //获取对应的运行时类的属性 2 @Test 3 public void test1(){ 4 Class clazz = Person.class; 5 //1.getFields():只能获取到运行时类中及其父类中声明为public的属性 6 Field[] fields = clazz.getFields(); 7 8 for(int i = 0;i < fields.length;i++){ 9 System.out.println(fields[i]); 10 } 11 System.out.println(); 12 //2.getDeclaredFields():获取运行时类本身声明的所有的属性 13 Field[] fields1 = clazz.getDeclaredFields(); 14 for(Field f : fields1){ 15 System.out.println(f.getName()); 16 } 17 }
1 //权限修饰符 变量类型 变量名 2 //获取属性的各个部分的内容 3 @Test 4 public void test2(){ 5 Class clazz = Person.class; 6 Field[] fields1 = clazz.getDeclaredFields(); 7 for(Field f : fields1){ 8 //1.获取每个属性的权限修饰符 9 int i = f.getModifiers(); 10 String str1 = Modifier.toString(i); 11 System.out.print(str1 + " "); 12 //2.获取属性的类型 13 Class type = f.getType(); 14 System.out.print(type.getName() + " "); 15 //3.获取属性名 16 System.out.print(f.getName()); 17 18 System.out.println(); 19 } 20 }
1 //调用运行时类中指定的属性 2 @Test 3 public void test3() throws Exception{ 4 Class clazz = Person.class; 5 //1.获取指定的属性 6 //getField(String fieldName):获取运行时类中声明为public的指定属性名为fieldName的属性 7 Field name = clazz.getField("name"); 8 //2.创建运行时类的对象 9 Person p = (Person)clazz.newInstance(); 10 System.out.println(p); 11 //3.将运行时类的指定的属性赋值 12 name.set(p,"Jerry"); 13 System.out.println(p); 14 System.out.println("%"+name.get(p)); 15 16 System.out.println(); 17 //getDeclaredField(String fieldName):获取运行时类中指定的名为fieldName的属性 18 Field age = clazz.getDeclaredField("age"); 19 //由于属性权限修饰符的限制,为了保证可以给属性赋值,需要在操作前使得此属性可被操作。 20 age.setAccessible(true); 21 age.set(p,10); 22 System.out.println(p); 23 24 // Field id = clazz.getField("id"); 25 26 }
1 class Person extends Creature<String> implements Comparable,MyInterface{ 2 public String name; 3 private int age; 4 int id; 5 //创建类时,尽量保留一个空参的构造器。 6 public Person() { 7 super(); 8 // System.out.println("今天天气很闷热"); 9 } 10 public Person(String name) { 11 super(); 12 this.name = name; 13 } 14 private Person(String name, int age) { 15 super(); 16 this.name = name; 17 this.age = age; 18 } 19 public String getName() { 20 return name; 21 } 22 public void setName(String name) { 23 this.name = name; 24 } 25 public int getAge() { 26 return age; 27 } 28 public void setAge(int age) { 29 this.age = age; 30 } 31 32 public int getId() { 33 return id; 34 } 35 public void setId(int id) { 36 this.id = id; 37 } 38 @MyAnnotation(value = "abc123") 39 public void show(){ 40 System.out.println("我是一个人!"); 41 } 42 43 private Integer display(String nation,Integer i) throws Exception{ 44 System.out.println("我的国籍是:" + nation); 45 return i; 46 } 47 @Override 48 public String toString() { 49 return "Person [name=" + name + ", age=" + age + "]"; 50 } 51 @Override 52 public int compareTo(Object o) { 53 // TODO Auto-generated method stub 54 return 0; 55 } 56 57 public static void info(){ 58 System.out.println("中国人!"); 59 } 60 61 class Bird{ 62 63 } 64 65 }
import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.ElementType.TYPE;import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation {String value(); }
public class Creature<T>{public double weight;public void breath(){System.out.println("呼吸!");} }
import java.io.Serializable;public interface MyInterface extends Serializable{}
转载于:https://www.cnblogs.com/zhangfan94/p/4273221.html
JAVA学习--反射属性操作相关推荐
- Java学习之文件操作
前言 因为文件操作是一个非常常见的操作,在加上用法非常固定,就写一篇博客整理一下 我直接用一个小项目说明文件操作的方法,当然主要还是去看官方的api文档是最好的 我的一个demo程序是监听一个目录下的 ...
- JAVA学习 API_day11(属性集, 函数式编程, stream流)
属性集, 函数式编程, stream流 I/O流小结 1. 属性集 2. 函数式编程 3. stream流 I/O流小结 文件复制: BufferedInputStream/BufferedOutpu ...
- Java学习笔记---IO操作
一.文件的创建 ------------------------------------------------------- File类,表示磁盘上的文件或目录,可对文件或目录进行操作. * ...
- 字节大牛教你手撕Java学习,神操作!
下面总结了我这一段时间面试出现的一些spring高频问题 什么是 Spring 框架?Spring 框架有哪些主要模块? 使用 Spring 框架能带来哪些好处? 什么是控制反转(IOC)?什么是依赖 ...
- java学习_File属性处理
// TODO Auto-generated method stub File file=new File("newhello.txt"); //文件是否存在 System.out ...
- JAVA学习日记(18)——反射和枚举
1.反射 1.1 定义 Java的反射(reflection)机制是在运行状态下,对于任何一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意属性和方法,既然能够拿到那么我们 ...
- 反射第一篇,学习Java的反射基础
反射基础 什么是反射? 反射的使用 介绍:类对象 获取类对象 类对象的方法简介 使用:利用反射创建对象 例 调用特定构造方法 使用:获取成员变量并修改 例 使用:获取成员方法并调用 例 调用特定方法 ...
- Java学习总结:39(反射机制)
反射机制 JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制. Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属 ...
- Java学习之二-Java反射机制
问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...
最新文章
- dynamic_caast操作符
- DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- OpenGL textures纹理的实例
- crm开源系统 tp框架_八个开源的 Spring Boot 前后端分离项目,一定要收藏!
- Navicat for MySQL 使用SSH方式链接远程数据库
- 译:6.RabbitMQ Java Client 之 Remote procedure call (RPC,远程过程调用)
- Spring学习总结(25)——注解@PostConstruct和@PreDestroy使用总结
- Ubuntu——安装中文拼音输入法
- cc2530设计性实验代码八
- 闩锁效应的产生原因及解决办法
- 组合数学(2)——组合矩阵
- django数据库错误django. db. utils. OperationalError: ( 1044,‘Access denied for user’ erqueque’@' %’to‘dj’
- iphone icloud无法载入储存空间信息
- SQL Server 数据库之视图
- [创业-39]:中小公司的组织架构与公司管理
- bilibili视频爬取报错
- 关于final修饰的变量赋值的问题
- UOS如何格式化U盘
- IP地址的配置与运用,全网通
- 安恒西湖论剑周周练Reverse刮开有奖WP