黑马程序员技术交流社区

标题: 关于反射问题的一道空指针错误?? [打印本页]

作者: 宋蕈    时间: 2012-4-5 14:30
标题: 关于反射问题的一道空指针错误??
编写了Person类:
package ason;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Person {
        private String name=null;
        private int age;
        private String password;
        private Date birthday;
        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 String getPassword() {
                return password;
        }

        public void setPassword(String password) {
                this.password = password;
        }

        public Date getBirthday() {
                return birthday;
        }

        public void setBirthday(Date birthday) {
                this.birthday = birthday;
        }
}

然后在另一个测试类Demo1.java中:一个测试方法:
public void test3() throws Exception{
            String name="Ason";
            String password="123";
            String age="23";
            String birthday="1989-01-03";
            Person p=new Person();
        --》    ConvertUtils.register((Converter) new DateLocaleConverter(), Date.class);
            BeanUtils.setProperty(p, "name", name);
            BeanUtils.setProperty(p, "password", password);
            BeanUtils.setProperty(p, "age", age);
            BeanUtils.setProperty(p, "birthday", birthday);
            
            System.out.println(p.getName());
            System.out.println(p.getPassword());
            System.out.println(p.getAge());
           Date date=p.getBirthday();
            System.out.println(date.toLocaleString());
        }
打箭头的那句为什么要my eclipse 8.6要提示强转为Converter啊?  但是强转后运行junit又报java.lang.NullPointerException
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:494)
        at com.sun.org.apache.commons.beanutils.locale.converters.DateLocaleConverter.<init>(DateLocaleConverter.java:88)
        at com.sun.org.apache.commons.beanutils.locale.converters.DateLocaleConverter.<init>(DateLocaleConverter.java:140)
        at com.sun.org.apache.commons.beanutils.locale.converters.DateLocaleConverter.<init>(DateLocaleConverter.java:115)
        at com.sun.org.apache.commons.beanutils.locale.converters.DateLocaleConverter.<init>(DateLocaleConverter.java:102)
        at ason.Demo1.test3(Demo1.java:106)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

错误?
作者: 宋蕈    时间: 2012-4-5 14:31
在线急等。。
(也顺便求个小分。。? 起步啊。)
作者: 宋蕈    时间: 2012-4-5 16:50
怎么没人回应啊貌似。。。。{:soso_e134:}
作者: 袁野    时间: 2012-4-5 17:03
  private Date birthday; 问题吃在这
  private Date birthday = new Date(); 应该可以了就
birthday 属于复和类型,可以看做是bean 。。。。
张老师的视频有讲到 这个是 一共出现了三个异常,这是第二个。
作者: 袁野    时间: 2012-4-5 17:06
Beanutils工具包:属于第三方jar包
解压好以后 导入到工程的里需要注意事项:
1.项目名-->BuildPath-->Libraries。这样只能自己使用而用户使用不了。
正确的方式:-->-->-->-->--> new Folder --> 把Jar-->Copy到Folder里-->在加到项目里-->
-->-->-->BuildPath-->OK(显示瓶子) -->成功了!

BeanUtils.getProperty("pt1",name);-->-->出现异常!
缺少异常日志,所以要下载第三方日志放到Folder目录下-->OK(显示瓶子) -->成功了!

设置Bean的属性:
Beanutils.setProperty(obj,name,value)// name ,value 都是字符串类型

private Date birhtday ;
set(){};
get(){};
Beanutils.setProperty(obj,name,value);-->-->出现异常!
空指针异常 :
解决办法----private Date birhtday = new Date();
birthday 属于复合类型变量 也可以看做为javabean

JDK 1.7特性:
bean转化成Map<>集合
Map map = <name:"xxx",age:9>
key value

BeanUtils.setProperty(map,"name","value");

PropertyUtils.setProperty(pt1,"x","9");
出现参数类型不匹配:  没有被转成字符串;你是什么类型就是什么类型,不需要帮助转换

总结:BeanUtils----> 都是字符串类型
PropertyUtils----> 数据的基本类型
作者: 宋蕈    时间: 2012-4-5 17:07
  好像是这么回事。。
作者: 袁野    时间: 2012-4-5 17:25
视频讲过 老师特意说了,你在去看看
作者: 宋蕈    时间: 2012-4-6 09:17
是啊。呵呵




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2