反射--静态成员变量的值获取

反射--静态成员变量的值获取,第1张

public class Student{

    private static int age;

}

   Field field = StudentclassgetDeclaredField("age");

    fieldsetAccessible(true);

    fieldget(null);     普通属性获取值 需要传入对象,但是静态属性 不需要传入具体对象,传

null 也可以获取 该字段的值。

公共属性是可以通过对象来获取到的

但是私有属性 只能在当前类中访问,如果需要在另一个类中强制使用该属性,

可以通过反射来破坏封装,来实现访问 私有属性,

下面是一个简单的 小例子。可以用来帮助你理解!

import javalangreflectField;

public class A {

    public static void main(String[] args)throws Exception {

        //获取类对象

         Class clazz = Bclass;

        //根据B类中的属性名c获取属性 

         Field f = clazzgetDeclaredField("c");

        //破换封装(允许在A类中访问B类中的私有属性c) 

         fsetAccessible(true);

        //根据反射创建b2对象

         B b = (B)clazznewInstance();

         Systemoutprintln("原值"+fgetInt(b));

        //修改私有属性的值为100  

         fsetInt(b, 100); 

         Systemoutprintln("修改后值"+fgetInt(b));

   }

}

class B{

     private int c=10;

     public  int d =11; 

}

反射不是通过get取值的,是通过该对象的信息,比如说名称、内存地址等来访问类,方法,属性等,可以获取任意对象的信息,但不能获得私有属性(private String s=“sd”;)的值,切记

推荐《JAVA核心技术》这本书会对你有帮助的

1、过去某个类的某个属性:

2,可以通过对象调用其属性:

3,创建对象 :类名  对象名 = new 类名();

4,调用属性:对象名属性

5,获取某个对象的所有属性

6,数组类型[]  数组名  = 对象名getClass()getDeclaredFields();

7,使用反射

public static void main(String[] args) {

Model model = new Model();

Field fd = new Field();

fdgetField(model);

}

private void getField(Object model) {

javalangreflectField[] fields = modelgetClass()getDeclaredFields();

for(javalangreflectField f:fields){

Systemoutprintln(fgetName());

}

}

可以

只要你创建了这个拥有私有属性的对象 就可以调用

首先你要理解private修饰是为了不允许谁都使用和修改这个属性

就类似于 你的银行账户余额属性是你的隐私 别人是不能知道的 所以 只要你不提供get方法别人就不能知道你的银行账户余额

同理 你在取钱的时候不提供密码 你也不能取钱 你不给别人密码 别人也不能盗刷你的yhk 所以只要你不提供set方法 别人无法修改你的余额 还有一点是为了不能防止属性类型不一致 你的余额是double类型 你赋值一个String 就会报错 所以使用set方法也可以有效防止这类问题的出现

至于有人提出的反射 你也可以理解为 别人破解了你的密码 盗刷你的yhk

我测试是通过的,怀疑你是否定义了属性?

        static void Main(string[] args)

        {

            C c = new C();

            cS = "SS";

            C c1 = getObject<C>(c);

            ConsoleWriteLine(c1S);//SS1

            ConsoleReadLine();

        }

        class C

        {

            public string S { get; set; }//属性

        }

        static T getObject<T>(T t)

        {

            string temp = "";

            SystemReflectionPropertyInfo[] propertys = tGetType()GetProperties();

            foreach (SystemReflectionPropertyInfo p in propertys)

            {

                if (pPropertyType == typeof(string))

                {

                    temp = pGetValue(t, null)ToString();

                    pSetValue(t, temp + "1", null);

                }

            }

            return t;

        }

以上就是关于反射--静态成员变量的值获取全部的内容,包括:反射--静态成员变量的值获取、java里面怎么访问同一个类里面的private属性,怎样访问不同类的属性,不同类中的private属性、java反射取对象属性值 不是通过get方法取值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9283589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存