`

破坏private,访问对象值;String属性

阅读更多
天下文章一大抄,看了好几个,连抄的水准都没有,难看死了


下面这两个比较好:
http://www.blogjava.net/kingace/archive/2009/01/20/207356.html
http://canofy.iteye.com/blog/359565

import java.lang.reflect.Field;

public class TestD
{
	public static void main(String[] args) throws IllegalArgumentException,
			IllegalAccessException
	{
		String str = new String("abcde");
		Field fs[] = String.class.getDeclaredFields();
		for (int i = 0; i < fs.length; ++i)
		{
			System.out.println(fs[i].getName());
			System.out.println(fs[i].getType());
			System.out.println(fs[i].isAccessible());
			fs[i].setAccessible(true);
			System.out.println(fs[i].get(str));
 //破坏了,设回来是个好习惯,但原本就是true的被改成false就不好啦,这里不作判断、处理
			fs[i].setAccessible(false);
			System.out.println();
		}
	}



value
class [C
false
[C@119298d

offset
int
false
0

count
int
false
5

hash
int
false
0

serialVersionUID
long
false
-6849794470754667710

serialPersistentFields
class [Ljava.io.ObjectStreamField;
false
[Ljava.io.ObjectStreamField;@1bab50a

CASE_INSENSITIVE_ORDER
interface java.util.Comparator
false
java.lang.String$CaseInsensitiveComparator@c3c749




好奇就拿了String Class来测试,都是false的属性;
看到隐藏类型:class [C ,应该类似Char 类型;
offset、count都比较好理解,hash的次数?;
serialVersionUID:
解释:http://tbase.itpub.net/post/4931/42269

serialPersistentFields:
解释:http://www.blogjava.net/NewMoring/articles/278195.html

CASE_INSENSITIVE_ORDER:
解释:http://lavasoft.blog.51cto.com/62575/68380

分享到:
评论

相关推荐

    访问非公有字段和属性的组件

    在编程领域,尤其是在面向对象编程中,访问控制是至关重要的概念。它允许我们定义类的内部结构,并对外部代码暴露有限的接口。然而,在某些情况下,我们可能需要访问类的非公有字段(private或protected)和属性。这...

    java反射获取所有属性,获取所有get方法,包括子类父类

    要获取类的所有属性(包括public、private、protected以及默认访问权限的属性),可以使用以下代码: ```java Class&lt;?&gt; clazz = Class.forName("全限定类名"); Field[] fields = clazz.getDeclaredFields(); // ...

    setAccessible()方法是否破坏了Java的访问规则

    ### setAccessible()方法是否破坏了Java的访问规则 在Java编程语言中,为了保护类的内部状态不被外部代码随意更改,通常会采用封装技术,将类中的成员变量声明为私有(private),并通过公有(public)的方法来提供访问...

    Java 反射详解(包含私有方法属性的调用)

    例如,`Method`类的`setAccessible(true)`方法可以将某个方法或字段设置为可访问,从而可以调用私有方法或修改私有属性。这在测试、调试或者特定场景下很有用,但也要谨慎使用,因为它破坏了封装性,可能引入安全...

    改善C#程序的50种方法

    在C#编程中,为了更好地符合面向对象的设计原则,并充分利用C#语言提供的强大功能,开发人员应该摒弃直接使用公有数据成员的做法,转而使用属性来管理类中的数据。本章节将详细介绍为何属性比直接使用公有数据成员更...

    Effective_C#中文版

    3. **验证逻辑**:在设置属性值时,可以在set方法中加入验证逻辑,确保数据的有效性和一致性。 4. **懒加载**:在属性首次被访问时,可以通过get方法动态计算值,实现懒加载机制,节省资源。 #### 六、结论 综上所...

    C#中属性和成员变量的区别说明

    这样增加了代码的安全性,因为可以控制属性值的修改。 属性还有其他形式,比如只读属性(readonly property),只有`get`访问器,没有`set`访问器。这用于表示一旦设置后就不能更改的值: ```csharp private ...

    Swift遍历类属性改.zip

    通过遍历类属性,`yyModel`能够自动将JSON数据映射到Swift对象的属性上,极大地简化了开发工作。 总的来说,尽管Swift不直接支持反射,但通过Objective-C runtime,我们依然可以实现对类属性的遍历和操作。然而,...

    C#使用反射机制获取类信息

    尽管这种做法并不推荐,因为可能破坏对象的状态并导致不可预知的结果,但在某些特殊情况下可能会用到这种方法。 考虑以下类`MyClass`,其中所有成员均为私有或受保护的: ```csharp class MyClass { private ...

    .NET中的特殊类型成员

    通过这种方式,我们可以隐藏字段的直接访问,防止外部代码破坏对象的状态,同时提供了一种安全的方式来修改数据。 属性的一个显著优点是提高了代码的封装性和安全性。然而,它们可能会增加代码量,尤其是当需要实现...

    C++学生管理类

    这里可能有构造函数(用于初始化对象)、析构函数(清理资源)、获取属性值的getter函数、设置属性值的setter函数,以及其他辅助函数,如打印学生信息等。 4. **构造函数(Constructor)**: - 当创建一个新对象时...

    java反射机制.rar

    2. 访问和修改属性:使用Field对象可以获取类的字段信息,包括读取和设置字段值。 3. 调用方法:Method对象代表类的方法,可以用来动态调用方法。 4. 检查类信息:获取类的构造器、接口、父类、注解等信息。 5. 动态...

    设计模式例子备忘录模式

    备忘录模式是一种在软件工程领域广泛使用的设计模式,它属于行为设计模式,主要目的是为了在不破坏对象封装性的前提下,保存一个对象的内部状态,以便在需要时能够恢复到之前的状态。这个模式通常应用于撤销/重做...

    java反射例子 希望可以帮助大家

    1. **获取对象的属性**: 在Java中,通过反射可以获取对象的属性。在示例代码中,`getProperty`方法展示了如何做到这一点。首先,通过`owner.getClass()`获取对象的`Class`对象,这代表了运行时的对象类型。然后,...

    Java类的反射与动态加载

    - `getField(String name)`:获取public字段,`set.Field(String name)`和`get.Field(String name)`用于读写字段值。 - `getDeclaredField(String name)`:获取所有字段,包括private和其他非public字段,同样有`...

    Python 类的私有属性和私有方法实例分析

    在这个例子中,`private_attribute`属性对外提供了一个安全的接口,确保值始终为字符串类型。 ### 5. 结论 在Python中,私有属性和私有方法主要用于内部逻辑,防止外部代码的不适当干预。虽然Python没有严格的访问...

    《面向对象程序设计C++》期末试卷及答案.pdf

    在C++中,通过访问控制修饰符(如public、private、protected)实现封装,保护数据不被非法访问。 2. 继承性:继承允许创建新的类(派生类)基于现有类(基类),从而实现代码重用。在C++中,基类的公共和受保护...

    java反射.pdf

    - 之后可以通过`getField().get(obj)`获取属性值,或者通过`getField().set(obj, value)`设置属性值。 ```java Field field = clazz.getDeclaredField("myPrivateField"); field.setAccessible(true); String ...

Global site tag (gtag.js) - Google Analytics