黑马程序员技术交流社区
标题:
关于空指向异常
[打印本页]
作者:
曹文涛
时间:
2011-9-14 12:22
标题:
关于空指向异常
昨天练习反射还很正常 今天重新写了一下就不行了[code=java]public class FieldDemo02 {
public static void main(String[] args) throws Exception {
Object per = null;
Class<?> c = Class.forName("com.huawei.interview.Person");
per = c.newInstance();
Field[] field = per.getClass().getFields();
for(Field fi:field){
if(fi.getType()== String.class){
String oldValue = (String)fi.get(per);
System.out.println(oldValue);
String newValue = oldValue.replace('d','a');
fi.set(per, newValue);
}
}
Method met = c.getMethod("toString");
System.out.println(met.invoke(per));
}
}[/code]报错:
null
Exception in thread "main" java.lang.NullPointerException
at com.huawei.interview.FieldDemo02.main(FieldDemo02.java:16)
9.14 14:36
好吧 我找到问题的所在了 我在Person里定义了一个public static String EXEC;
所以报错了 因为常量 的值不能改变 谢谢大家!
[
本帖最后由 曹文涛 于 2011-09-14 14:37 编辑
]
作者:
匿名
时间:
2011-9-14 12:28
自己现在没条件测试,大概看了下,会不会是[code]Method met = c.getMethod("toString"); [/code]出了问题
我记得应该是[code]Method met = c.getClass.getMethod("toString"); [/code]
作者:
匿名
时间:
2011-9-14 13:54
应该是Method met=per.getClass().getMethod("toString");
作者:
匿名
时间:
2011-9-14 14:23
错在此[code]Class<?> c = Class.forName("com.huawei.interview.Person");
05.
per = c.newInstance(); [/code]你这个Person类有问题,你提供一个无参的构造方法就行。
因为在c newinstance时会去找无参的构造方法,必须自行提供。
作者:
史卫平
时间:
2011-9-14 14:31
我只是改了你的Class.forName里面的参数,改成我自己建的类,运行没有问题
[
本帖最后由 史卫平 于 2011-09-14 14:35 编辑
]
作者:
匿名
时间:
2011-9-14 14:33
把15 16 两行 // 掉 也一样 报错的是 第11行 9行oldValue 的值为空 所以第10输出的时候 会输出个null
现在我就不懂它为什么为null了……空构造一直有
作者:
匿名
时间:
2011-9-14 14:50
你在Persion里初始化了各个属性没有。 你能执行到9 10行 说明你的field是有的,但是在输出值的时候是null,就说明你的field在persion里本来是没值。
如果你的persion的属性里有值的话,看看属性是否是pubilc的。默认的很私有的是不能提取到值的。
作者:
匿名
时间:
2011-9-14 14:53
不知道你理解没有,你的程序我做了各种测试,如我上面那段话。
Stutend[code]package com.itheima.test;
public class Student {
public String name;
public int age;
public float score;
public Student(){
name = "默认人物";
age = 20;
score = 520;
}
public Student(String name, int age, float score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String toString() {
return name + "\t" + age + "\t" + score;
}
}[/code][code]import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class FieldDemo02 {
public static void main(String[] args) throws Exception {
Object per = null;
Class<?> c = Class.forName("com.itheima.test.Student");
per = c.newInstance();
Field[] field = per.getClass().getFields();
System.out.println(field.length);
for (Field fi : field) {
Object oldValue = fi.get(per);
System.out.println(oldValue);
}
Method met = c.getMethod("toString");
System.out.println(met.invoke(per));
}
private static <T> void fillmethod(T[] a,T obj){
for(int i=0;i<a.length;i++){
a[i]=obj;
}
}
}[/code]
作者:
匿名
时间:
2011-9-14 21:44
标题:
回复 楼主 的帖子
public static String EXEC;
这不是常量吧,你的错误只是没有EXEC赋值
所以才有null异常
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2