写了个例子,请仔细查看代码,具体过程需要你自己对照java API 再研究,
先定义了一个普通的学生类,如下:
public class Student {private int id;
private String name;
private int age;
private String[] aiHao;
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
public String[] getAiHao() {
return aiHao;
}
public void setAiHao(String[] aiHao) {
thisaiHao = aiHao;
}
}
对学生类进行反射
public class Test3 {public static void main(String[] args) {
Student s = new Student();
ssetId(1);
ssetName("张三");
ssetAge(23);
ssetAiHao(new String[] { "足球", "篮球", "上网" });
try {
// 获取所有的变量
Field[] fields = StudentclassgetDeclaredFields();
// 循环处理变量
for (Field f : fields) {
fsetAccessible(true);
Object value = fget(s); // 取变量的值
Systemoutprint("变量名称为:" + fgetName());
if (valuegetClass()isArray()) { // 判断是否是数组
Object[] arr = (Object[]) value; // 装换成数组
Systemoutprintln(",变量值等于:" + ArraystoString(arr));
// 这里还可以做额外处理,判断数组的类型 如下面注释的代码
/
for (Object a : arr) {
Systemoutprintln("参数类型" + agetClass()getName());
// 同样运用反射的机制做额外处理
}
/
} else {
// 非数组类型,普通处理
Systemoutprintln(",变量值等于:" + value);
}
fsetAccessible(false);
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
例如定义一个类:
class Text
{public static int number;
public int temp;}
如果你想访问temp属性,你就必须先创建一个Text的对象,才能访问:Text b = new Text();
btemp;这就是实例成员变量。
而你想 访问number的话,不用创建Text的实例就可以访问,就像这样:Textnumber这就是类成员变量。
主要区别就是访问是需不需要创建对象,而对于类成员变量,所有对象是共享一个变量的。
扩展资料:
数据成员可以分静态变量、非静态变量两种
静态成员:静态类中的成员加入static修饰符,即是静态成员可以直接使用"类名静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员 函数不能访问非静态的成员因为静态成员存在于内存,所以非静态成员函数可以直接访问类中静态的成员
非静态成员:所有没有加Static的成员都是非静态成员,当类被 实例化之后,可以通过实例化的类名进行访问非静态成员的生存期决定于该类的生存期而静态成员则不存在生存期的概念,因为静态成员始终驻留在 内存中
一个类中也可以包含静态成员和非静态成员,类中也包括静态 构造函数和非静态构造函数
分两个方面来总结,第一方面主要是相对于 面向过程而言,即在这方面不涉及到类,第二方面相对于 面向对象而言,主要说明 static在类中的作用。
参考资料:
如果成员变量是静态的,那么直接在A类中通过“B变量名称”的形式即可。
如果成员变量是动态的,需要在B类中创建变量的set和get方法,之后在A类中:
B b =new B();进行B类实例化
bsetName("zhangsan");//赋值
bgetName();获取到成员变量值。
有两种方法:a
定义线程函数为全局函数
b
定义线程函数为类的静态成员函数
针对线程函数为类的静态成员进行说明。如果是静态数据成员,当然可以直接访问,但是如果要访问非静态数据成员,直接访问是做不到的。如果要想在线程函数中访问和 *** 作类的非静态成员变量,可以把线程函数作为一个适配器,在适配器中调用类的非静态成员函数。例如:
class
CMyClass{public:
void
TestFunc();
static
int
ThreadFunc(LPVOID
pParam);//
Adapterprotected:
int
ThreadFuncKernal();//
Kernal}void
CMyClass::TestFunc(){
AfxBeginThread(TreadFunc,
this);}//
Thread
function
Adapter
int
CMyClass::ThreadFunc(LPVOID
pParam){
CMyClass
pObj
=
(CMyClass
)pParam;
return
pObj-ThreadFuncKernal();}//
Thread
function
kernal
int
CMyClass::ThreadFuncKernal(){while(1){
以上就是关于java如何利用反射机制得到一个类中为数组类型的成员变量的值全部的内容,包括:java如何利用反射机制得到一个类中为数组类型的成员变量的值、类成员变量和实例成员变量分别指什么有什么区别(举例说明)、如何在一个类中访问其他类的成员变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)