总是抛出异常,注释的很清晰大家帮我看看,头都晕了

love3days 2007-08-07 11:08:22



 /**
* Sofar.java,这是个测试类
* @author Sunny
* Intention:本代码主要是演示单例模式的应用及java反射机制的练习
* 主要加载了两个类Sofar.java和Sofar2.java
*
* ideal outcome: toString返回对象自身
* 发现first的信息
* 发现second的信息
* 发现third的信息
* 找到第1个非String类型的变量
*
* Bug: 已标识
*
* 完成日期:2007年8月5号

*/
import java.lang.reflect.*;

public class Sofar {
private static final String Sofar2 = null;

String num;

public Sofar(String num) {
this.num = num;
}

public String toString() {
return num + "返回对象自身";// 返回此对象本身

}

public static void main(String[] args) {
int i = 0;
Sofar t = new Sofar("toString");
System.out.println(t);

try {
Class c = Class.forName("tata.Sofar2");
Field[] fields = c.getDeclaredFields();//取得声明的域成员代表对象
for (Field field : fields) {

String m = field.getName();//显示域成员名称

if ((field.getType().getName()).equals("java.lang.String")//Sofar2声明的域成员类型为String且不为空
&& !m.equals("")) {

System.out.println("发现" + tata.Sofar2.getone(m));//调用Sofar2的getone()方法,传递的为String类型的m

} else {

System.out.println("找到第" + ++i + "个非String类型");

}

}
} catch (ClassNotFoundException e) {

System.out.println("找不到指定的类!");

}

}
}



/***********************************************************************
*************************************************************************
 *Sofar2.java
 ************************************************************************
*/
import java.util.*;

public class Sofar2 {
public static final String first="first的信息";
public static final String Second="second的信息";
public static final String Third="third的信息";

private static Map<String,String> map;


//单例模式的应用
public static Map getonereg(){

if(map==null){
Map<String,String> map = new HashMap<String,String>();
declareone();
}

return map ;
}


private static final void declareone(){
demo(first,"first");
demo(Second,"second");
demo(Third,"third");

}
private final static void demo(String value,String key){//注意这里的顺序
try{
map.put(key,value);//代码的问题出在这里,异常处理是自己加的
}
catch(NullPointerException e){
System.out.println(e);
}
}
public static Object getone(String key){
try{
return getonereg().get(key);//这里也抛出异常
}
catch(NullPointerException e){
System.out.println(e);
return "抛出异常";
}
}


}
...全文
223 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pdogz21 2007-08-12
  • 打赏
  • 举报
回复
private static final void declareone(){
demo(first,"first");
demo(second,"second");
demo(third,"third");

}
pdogz21 2007-08-12
  • 打赏
  • 举报
回复
Sofar2:
public static final String second="second的信息";
public static final String third="third的信息";

if(map==null){
map = new HashMap<String,String>();
declareone();
}

private static final void declareone(){
demo(first,"first");
demo(Second,"second");
demo(Third,"third");

}
hongke1490 2007-08-10
  • 打赏
  • 举报
回复
大小写有问题
love3days 2007-08-07
  • 打赏
  • 举报
回复
谢谢你的回答,单例模式返回一个实例.
请调试,问题不出在那里
beiouwolf 2007-08-07
  • 打赏
  • 举报
回复
你的Sofar2实例在哪里啊??
就算是静态对象,也需要对象实例啊
Alunifson 2007-08-07
  • 打赏
  • 举报
回复
你这个程序主要有几个错误的地方,最大的问题就是单例应用里面的那个Map<String,String> map = new HashMap<String,String>();
外面已经定义了个全局变量了为啥在这里面再这样声明一个呢?外面那个map始终都是空的这也难怪要报空指针错误了!改成:map = new HashMap<String,String>();另外如果你继续调试你会发现:只能发现first的信息以后得到的都是null!自己调试发现一下原因吧,为什么找不到second 和third?问题在declareone()里面,自己好好想想。还有一点就是一般来说定义成final的变量都是大写的,这是一个习惯问题。
再就是在就是你的回复: “谢谢你的回答,单例模式返回一个实例.请调试,问题不出在那里 。”个人觉得这样的回答不太礼貌,别人没有义务给你去这样调试的,摆一大堆程序在这里让人去调试一般是行不通的,还是要自己学会分析异常哟。
就废话这么多了,希望能对你有所帮助。
beiouwolf 2007-08-07
  • 打赏
  • 举报
回复
if(map==null){
Map<String,String> map = new HashMap<String,String>();
declareone();
}

你这里去定义一个新的MAP干吗...

这样:
if(map==null){
map = new HashMap<String,String>();
declareone();
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧