我觉得空指针很容易解决的 像下面的报错 我知道 那个文件是我写过的 并且 提示我ChangeTreeHandler.java:78错误发生在78行 直接按Ctrl就转到错误点了。然后看下代码你就知道那个暴的空指针了Stack: java.lang.NullPointerException at com.res.vms.handlers.ChangeTreeHandler.prepareDisplay(ChangeTreeHandler.java:78) at com.res.vms.handlers.ChangeTreeHandler.process(ChangeTreeHandler.java:159) at com.res.framework.handler.OnlineHandler.handleRequest(Unknown Source)
以后你还会见很多异常, null与它们相比,毛毛雨啦到时候你就会像我一样希望出的是null异常
我只知道空指针就是在一个null值的变量使用.xxx的操作.就看哪个变量为null,然后再去找原因.String s = request.getParameter("cc"); if(s.equals("010")) {} 如果那里出现了空指针,我就知道是 request.getParameter("cc");这里没有取到值,也就是说没有这个参数,然后再找上一步,为什么没有带这个参数,是不是写错了?或者是不是少了一个&连接符的.
一堆操作
return true/false;
}如果改成:public boolean hasAdminRole(String username) {
if(StringUtil.isBlank(username)) {
return false;
}
一堆操作
return true/false;
}
public class StringUtil {
public boolean isBlank(String str) {
return (str == null) || (str.trim().length == 0);
}
}这样的话,就不会产生空指针异常。总之凡不是常量值都必须检查参数的有效性和非空性。
昨天又碰上空指针了,原因是JSP跳转的时候用了request.sendRedirect(),而不是request.getRequestDispatcher()导致对象不能传给下个页面,就报了空指针。。
这种东西,感觉除了自己细心,多做判断,经验也十分重要啊,就像我这个例子,即使你找到了空指针,但是不知道是什么原因导致的话,改起来挺麻烦的。
如果不加区分把所有变量都判空,那么就会隐藏错误,导致程序bug
java.lang.NullPointerException
at com.res.vms.handlers.ChangeTreeHandler.prepareDisplay(ChangeTreeHandler.java:78)
at com.res.vms.handlers.ChangeTreeHandler.process(ChangeTreeHandler.java:159)
at com.res.framework.handler.OnlineHandler.handleRequest(Unknown Source)
if(s.equals("010"))
{}
如果那里出现了空指针,我就知道是
request.getParameter("cc");这里没有取到值,也就是说没有这个参数,然后再找上一步,为什么没有带这个参数,是不是写错了?或者是不是少了一个&连接符的.
public format(String str){
if(str==null) return "";
else return str.trim();
}
方法里面的东西可以自己随意界定,小日本的项目都是这么做的
if(str==null) return "";
else return str.trim();
}
即可
一些小的细节 如 "".equals(name) 或者 null == name 这样写也可避免报空指向啊
if(list !=null && list。size != 0)if(list ==null || list。size == 0)
或者实在不放心的话还是在使用之前先判断下是否为null
出错的时候就会最小化的将错误定位到一个小功能
null指针一般都是传递数据时没处理好
没什么方法,仔细找
程序逻辑判断中比如引用进来的参数等加以是否null的判断。。
出现null指针错误的时候,根据错误信息回溯到错误代码中的第几行。。很方便的。。
java的运行时异常通常是告诉程序员:程序不够健壮,需要改进!
几个容易出空指针异常的地方:
1.从各类容器中取数据的时候
2.从诸如session、request中取参数或属性的时候
....等等等等
总之,所有不一定能保证初始化或是有的地方,都要加判断。
如:List list=getList()//用list来接收业务方法的返回值,如果返回值为null的话,
此时用list.size()或者list.get(0)就会报空指针了!
Integer.parseInt(String str)
Long.parseLong(String str)
new BigDecimal(String str)......
在用这些方法前,一定要确定被转换的String对象str有没有是null或""的可能,有的话要处理
②对象强制转换的时候,要考虑对象有没有null的可能
③执行对象的方法的时候,如果对象为null
如:
List list=null;
......--中间一定要有对实例化或进行引用的代码
int size=list.size();--如果list=null,肯定会抛空指针异常又:
obj.equals("YES"),一定要确定obj不为null,否则抛空指针异常
可以这样写 :"YES".equals(obj),这样是调用对象"YES"的equals方法
暂时想到这么多
返回值不要设为 void 类型!
常见 更正一下,呵呵!
还一个就是我看了楼主都是jsp页面的,你要注意数据传参,如你用page存数据到其他页面去取的话那肯定会出现空指针,这些提示希望对楼主你有用
getParameter的命名问题.
使用对象前注意先看new了没.
细心细心...
对象为空的话我先Syso看看
遇到问题后查看堆栈信心就知道是哪里出错了啊.. 再认真仔细的分析下该是很容易搞定!!!!
是的话,不会你执行.XX方法,都会报空指针,而且这种和往方法传参传null
是经常由于疏忽导致的最多的。
我感觉比用C的指针幸福多了.