精华内容
下载资源
问答
  • Java Field 详解

    2018-11-07 12:21:41
    Java Field 详解

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    一.主要方法

    getType(): 获取属性声明时类型对象(返回class对象)

    getGenericType() : 返回属性声的Type类型

    getName() : 获取属性声明时名字

    getAnnotations() : 获得这个属性上所有的注释

    getModifiers() : 获取属性的修饰

    isEnumConstant() : 判断这个属性是否是枚举类

    isSynthetic() : 判断这个属性是否是 复合类

    get(Object obj) : 取得obj对象这个Field上的值

    set(Object obj, Object value) : 向obj对象的这个Field设置新值value

    Field类中最常用的是get(Object obj)和set(Object obj, Object value)这两个方法,所以这两个方法是最重要的。

    getType() 和 getGenericType()的区别 :

    1.首先是返回的类型不一样,一个是Class对象一个是Type接口

    2.如果属性是一个泛型,从getType()只能得到这个属性的接口类型。但从getGenericType()还能得到这个泛型的参数类型。

    isEnumConstant()isSynthetic() :

    对象中如果有属性是枚举类或复合类,用这两个方法返回的值并不是我们想象的true而是false。其实这两个方法是对编译生成的才有效。

    二.试验代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    packagetest.fortest;
     
    importstatic java.lang.System.out;
     
    importjava.lang.reflect.Field;
     
    importjavassist.Modifier;
    importtest.model.Role;
     
    publicclass FieldTest {
        enumColor {
            Blue,
            Red
        }
         
    展开全文
  • Java Field

    2020-03-04 19:02:24
    本文介绍了 JavaField 类的相关内容。。。


    Field

    • 使用 Java 的反射机制获得类的成员变量的对象;
    • 可以用 Field 类的 get 方法获取对象的值,也可以用 set 方法改变对象的值;
    • java.lang.reflect.Field,详见:Class Field

    1. 定义格式

    • public final class Field extends AccessibleObject implements Member
    • Field 类的对象表示类或接口的一个域,可以是静态域,也可以是实例域;

    2. 主要方法

    类型 方法 说明
    Object get(Object o) 获得 o 对象中相应域的值
    Class getDeclaringClass() 得到一个 Class 类的对象
    String getName() 获得 Field 类对象所表示的域的名字
    T getAnnotation(Class annotationClass) 获得 annotationClass 类中当前 Field 类对象所表示的域的注解实例
    boolean isAnnotationPresent(Class annotationClass) 判断 annotationClass 类中当前 Field 类对象所表示的域是否有注解
    void set(Object o, Object value) 设置与 Field 对象对应的 o 对象中的域的值为 value

    3. Java 实例

    • 通过类的反射获得 Reflect 的 Class 对象 c;
    • 调用 newInstance() 方法创建 Reflect 对象 r;
    • 通过 Class 类的 getDeclaredField 方法获得对象 c 所表示的实体的指定 name 字段;
    • 通过对 Field 类使用方法 setAccessible(true) 方法取消对私有成员变量 name 的访问检查;
    • 通过对 Field 的 set 方法为对象 r 的 name 字段赋值,并通过它的 get 方法获得 name 字段的值;
    • 获取 id 字段的步骤同理;
    import java.lang.reflect.Field;
    
    class Reflect {
        private int id = 1;
        private String name = "成员变量";
    }
    
    public class test {
        public static void main(String[] args) {
            try {
                //获得Class对象
                Class c = Class.forName("Reflect");
                //使用无参构造方法创建对象r
                Reflect r = (Reflect) c.newInstance();
                //获取指定类的私有属性name
                Field f = c.getDeclaredField("name");
                //取消访问检查
                f.setAccessible(true);
                f.set(r, "成员变量");
                System.out.println("name = " + f.get(r));
                //获得私有属性id
                Field fId = c.getDeclaredField("id");
                //取消访问检查
                fId.setAccessible(true);
                fId.setInt(r, 12);
                System.out.println("id = " + fId.getInt(r));
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    /*
    输出
    name = 成员变量
    id = 12
     */
    
    展开全文
  • java Field

    万次阅读 2016-11-03 15:54:05
    原文地址:http://www.cnblogs.com/xinhuaxuan/p/6019510.html一、Field类是什么Field是一个类,位于java.lang.reflect包下。 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下:package ...

    原文地址:http://www.cnblogs.com/xinhuaxuan/p/6019510.html

    一、Field类是什么

    Field是一个类,位于java.lang.reflect包下。
    在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下:

    package com.testReflect;
    public class FieldDemo {
        public int num1 = 1;
        protected int num2 = 2;
        int num3 = 3;
        private int num4 = 4;
    
        public String s1 = "a";
        protected String s2 = "b";
        String s3 = "c";
        private String s4 = "d";
    }

    在Java反射中FieldDemo类中的属性: num1、num2、num3、num4 都是Field类的实例,这个Field类的实例描述了属性的全部信息。(包括:属性名称、属性类型、属性修饰符、属性注解 等等)

    二、如何获取Field类对象

    一共有4种方法,全部都在Class类中:
        - getFields(): 获取类中public类型的属性
        - getField(String name): 获取类特定的方法,name参数指定了属性的名称
        - getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性。
        - getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称

    三、Field类中常用的方法

    对于类中的属性,我们常用的操作:获取属性的值、修改属性的值。

    package com.testReflect;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Modifier;
    
    public class FieldTest {
        public static void main(String[] args) throws Exception {
            //使用反射第一步:获取操作类FieldDemo所对应的Class对象
            Class<?> cls = Class.forName("com.testReflect.FieldDemo");
            //使用FieldDemo类的class对象生成 实例
            Object obj = cls.newInstance();
    
            //通过Class类中getField(String name): 获取类特定的方法,name参数指定了属性的名称
            Field field = cls.getField("num1");        
    
            //拿到了Field类的实例后就可以调用其中的方法了
    
            //方法:getModifiers()  以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符
            System.out.println("修饰符:  " + Modifier.toString(field.getModifiers()));
    
            //方法:getType()  返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型
            System.out.println("类型:  "+field.getType());
    
            //方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值
            System.out.println("属性值:  "+field.get(obj));
    
            //方法: set(Object obj, Object value)  将指定对象变量上此 Field 对象表示的字段设置为指定的新值
            field.set(obj, 55);
            System.out.println("修改属性值后 --> get(Object obj):  "+field.get(obj));
        }
    }
    展开全文
  • Java Field[] Field理解

    2016-01-08 11:56:39
    以下只是了解Field的用法,以下代码参考的点击打开链接 java 中getDeclaredFields() 与getFields() 的区别 getDeclaredFields()返回Class中所有的字段,包括私有字段。例证: java代码 package ...

    以下只是了解Field的用法,以下代码参考的点击打开链接

    java 中getDeclaredFields() 与getFields() 的区别

    getDeclaredFields()返回Class中所有的字段,包括私有字段。例证:

    java代码

    package com.test.bean;  
      
    import java.sql.Timestamp;  
      
    public class Person2 {  
        private int id;  
        private int age;  
        private String personName;  
        private Timestamp birthdate;  
        public String identitify;  
        protected String address;  
        String phone;  
          
    }  
    @Test  
        public void test_getDeclaredFields() {  
            Field[]fields=Person2.class.getDeclaredFields();  
            for (int i = 0; i < fields.length; i++) {  
                Field field = fields[i];  
                System.out.println(field.getName());  
            }  
        }  

    运行结果:

    id

    age

    personName

    birthdate

    identitify

    address

    phone

    getFields  只返回公共字段,即有public修饰的字段。例证:

    public void test_getDeclaredFields() {  
            Field[]fields=Person2.class.getFields();  
            for (int i = 0; i < fields.length; i++) {  
                Field field = fields[i];  
                System.out.println(field.getName());  
            }  
        }  

    运行结果如下:

    identitify

     

    总结:

    (1)getDeclaredFields()返回Class中所有的字段,包括私有字段;

    (2)getFields  只返回公共字段,即有public修饰的字段


    Field.setAccessible()方法的用法

     java代码中,常常将一个类的成员变量置为private

     在类的外面获取此类的私有成员变量的value时,需要设置setAccessible方法

     例如:

     这是一个外部类User

    public class User {
    	private int id;
    	private String name;
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    
    }

                    Class clazz = null;
    		
    		User user = new User();
    		user.setId(11);
    		user.setName("ruin");
    		
    		try {
    			clazz = Class.forName("com.xyz.User");
    			for(Field field:clazz.getDeclaredFields()){
    				field.setAccessible(true);
    				System.out.println(field.get(user));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}

    运行结果是

    11

    ruin

    如果去掉这个方法

                    Class clazz = null;
    		
    		User user = new User();
    		user.setId(11);
    		user.setName("ruin");
    		
    		try {
    			clazz = Class.forName("com.xyz.User");
    			for(Field field:clazz.getDeclaredFields()){
    //				field.setAccessible(true);
    				System.out.println(field.get(user));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}

    运行结果是

    Class com.xyz.Test can not access a member of class com.xyz.User with modifiers "private"










    展开全文
  • java Field类的使用

    2018-05-16 11:05:29
    java反射中Field用户获取某个类的属性或该属性的属性值1、 如果通过Field反射获取类的属性Field提供如下几种方法Class.getDeclaredField(String name);返回一个Field对象,该对象反射此class对象所表示的类或接口...
  • java Field 类属性反射

    2018-08-31 10:28:56
    Fieldjava开发中经常会被用到,而且是非要重要的类,常常用到类对象去反射出对象类的一些属性,从而达到映射的效果.通常会被用到一些工具里面实现实体类等等的属性映射功能. 这里简单的介绍一下有关目标类的各种反射...
  • 如果 Field.isAccessible 已经过时,则使用 Field.canAccess 官方Api boolean Field.canAccess(Object obj) Object obj : an instance object of the declaring class of this reflected object if it is an ...
  • /* * field.getType() : 返回编译后的具体类型...在编译后为java.lang.Object(类型擦除)) * field.getGenericType(): 返回泛型类型 * 如果该字段是public T xx, 那么就是一个 TypeVariable对象(即只会获得名称T...
  • 只前转载了一篇文章《JAVA反射修改常量,以及其局限》,受益匪浅,在这里再次感谢原作者。 ...import java.lang.reflect.Field; class My{ private static final int value= 1; private static
  • 漏洞分析 http://www.binvul.com/viewthread.php?tid=134&extra=page%3D1
  • java 反射 Field

    千次阅读 2011-09-08 10:47:25
    Field一.了解field java.lang.reflect 类 Field java.lang.Object java.lang.reflect.AccessibleObject  java.lang.refle
  • java 反射 Field

    2014-05-13 16:34:48
    java 反射 Field
  • java reflect Field

    2011-06-12 10:41:00
    java.lang.reflect类 Fieldjava.lang.Object java.lang.reflect.AccessibleObject java.lang.reflect.Field所有已实现的接口: AnnotatedElement, Memberpublic final class Fieldextends AccessibleOb
  • Java反射之Field用法

    万次阅读 多人点赞 2016-06-12 00:10:47
    Java反射之Field用法
  • javafield的理解

    千次阅读 2019-01-24 19:28:31
    Java编程思想注解不清楚field的含义,导致后面一些获得getDeclaredFields范围不清楚,参考下面的博客我觉得挺清楚的。 http://www.ituring.com.cn/article/491755
  • javaAPI之Field

    千次阅读 2016-06-05 16:06:20
    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。... java.lang.reflect.Field 所有已实现的接口: Ann...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,046
精华内容 9,618
关键字:

javafield

java 订阅