导航:首页 > 编程语言 > java指针异常处理

java指针异常处理

发布时间:2022-12-17 21:37:24

1. java中的空指针异常怎么解决

原文:https://www.hu.com/question

你这个问题的解决

问题定位:

在堆栈异常信息的第一行就可以定位到是哪里出了空指针,倘若这里不是你写的类,可以往下翻一下,找到你写的类,就是这里出现的空指针。

问题解决:

对一个空对象调用里面的方法或者属性的时候会报空指针,检查这个对象为什么是空即可。

Java 空指针异常的若干解决方案

Java 中任何对象都有可能为空,当我们调用空对象的方法时就会抛出 NullPointerException 空指针异常,这是一种非常常见的错误类型。我们可以使用若干种方法来避免产生这类异常,使得我们的代码更为健壮。本文将列举这些解决方案,包括传统的空值检测、编程规范、以及使用现代 Java 语言引入的各类工具来作为辅助。

运行时检测

最显而易见的方法就是使用 if (obj == null) 来对所有需要用到的对象来进行检测,包括函数参数、返回值、以及类实例的成员变量。当你检测到 null 值时,可以选择抛出更具针对性的异常类型,如 IllegalArgumentException,并添加消息内容。我们可以使用一些库函数来简化代码,如 Java 7 开始提供的 Objects#requireNonNull 方法:

public void testObjects(Object arg) {
Object checked = Objects.requireNonNull(arg, "arg must not be null");
checked.toString();}

Guava 的 Preconditions 类中也提供了一系列用于检测参数合法性的工具函数,其中就包含空值检测:

public void testGuava(Object arg) {
Object checked = Preconditions.checkNotNull(arg, "%s must not be null", "arg");
checked.toString();
}

我们还可以使用 Lombok 来生成空值检测代码,并抛出带有提示信息的空指针异常:

public void testLombok(@NonNull Object arg) {
arg.toString();

生成的代码如下:

public void testLombokGenerated(Object arg) {
if (arg == null) {
throw new NullPointerException("arg is marked @NonNull but is null");
}
arg.toString();
}

这个注解还可以用在类实例的成员变量上,所有的赋值操作会自动进行空值检测。

编程规范

·通过遵守某些编程规范,也可以从一定程度上减少空指针异常的发生。

使用那些已经对 null 值做过判断的方法,如 String#equals、String#valueOf、以及三方库中用来判断字符串和集合是否为空的函数:

if (str != null && str.equals("text")) {}
if ("text".equals(str)) {}

if (obj != null) { obj.toString(); }
String.valueOf(obj); // "null"

// from spring-core
StringUtils.isEmpty(str);
CollectionUtils.isEmpty(col);
// from guava
Strings.isNullOrEmpty(str);
// from commons-collections4
CollectionUtils.isEmpty(col);

·如果函数的某个参数可以接收 null 值,考虑改写成两个函数,使用不同的函数签名,这样就可以强制要求每个参数都不为空了:

public void methodA(Object arg1) {
methodB(arg1, new Object[0]);
}

public void methodB(Object arg1, Object[] arg2) {
for (Object obj : arg2) {} // no null check
}

·如果函数的返回值是集合类型,当结果为空时,不要返回 null 值,而是返回一个空的集合;如果返回值类型是对象,则可以选择抛出异常。Spring JdbcTemplate 正是使用了这种处理方式:

// 当查询结果为空时,返回 new ArrayList<>()
jdbcTemplate.queryForList("SELECT * FROM person");

// 若找不到该条记录,则抛出
jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class);

// 支持泛型集合
public <T> List<T> testReturnCollection() {
return Collections.emptyList();
}

静态代码分析

Java 语言有许多静态代码分析工具,如 Eclipse IDE、SpotBugs、Checker Framework 等,它们可以帮助程序员检测出编译期的错误。结合 @Nullable 和 @Nonnull 等注解,我们就可以在程序运行之前发现可能抛出空指针异常的代码。

但是,空值检测注解还没有得到标准化。虽然 2006 年 9 月社区提出了 JSR 305 规范,但它长期处于搁置状态。很多第三方库提供了类似的注解,且得到了不同工具的支持,其中使用较多的有:

2. java空指针异常怎么解决

找到空指针的引用,实例化对象就可以了

3. java 空指针异常

当应用程序试图在需要对象的地方使用 null 时就会抛出空指针异常
当polyNext.x[j]取到的值为空时,polyNext.x[j].degree所以就会报空指针异常

其他情况也是一样
比如
Test t=null;
t.a;//t为空的时候不管这里是调用t的方法还是属性就会报空指针异常了

4. 关于java中空指针异常

空指针异常产生的主要原因如下:
(1)当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在
(2)当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在
(3)字符串变量未初始化;
(4)接口类型的对象没有用具体的类初始化,比如:
List lt;会报错
List lt = new ArrayList();则不会报错了
当一个对象的值为空时,你没有判断为空的情况。你可以试着把下面的代码前加一行代码:
if(rb!=null && rb!="")
改成:
if(rb==null);
if(rb!==null&&rb!="") 或者if((“”).equals(rb))

空指针的解决办法:
重点关注报错发生的所在行,通过空指针异常产生的两条主要原因诊断具体的错误。同时为了避免空指针的发生,最好在做判断处理时将“null”或者空值放于设定的值之前。

5. java中空指针异常怎么解决

空指针异常是运行期的异常,编译的时候是不会检查的,只有运行的时候才会抛出,一般情况下如果出现了空指针异常,事先你不知道会有这个异常,就说明你的程序有bug,当然就要找出这个bug,然后在变量调用之前先给它赋值,另外有一种情况,你事先知道某个操作会抛出空指针异常,常见一些非法的操作,但是又无法避免用户执行这个操作,就可以通过try,catch块捕获这个异常,然后给用户一个反馈信息,告知这个操作是非法的,因为如果你直接抛出异常的话,用户可能会看不懂,比如抛出了java.lang.nullpointexception,一般的软件使用者是看不懂的,你试想一下如果你在玩一个游戏的时候,忽然之间抛出了一大堆异常,你肯定会埋怨这个游戏垃圾,竟然会出现这样的低级错误。

6. java 空指针异常问题。。。不知道该怎么解决。

空指针异常一般是你直接调用了未赋值的变量。比如前面你定了一个变量Sring str = null;后面没有另外赋值直接用就会报错。

7. java空指针异常如何处理

构造函数中初始化错误,你已经定义了这四个变量
...
TextField ip1,ip2,ip3,ip4;
Button bt;
test()
{
Frame f1=new Frame("index");
ip1=new TextField(5);
ip2=new TextField(5);
ip3=new TextField(5);
ip4=new TextField(5);
....
还有int check()函数记得要处理字符转数字的错误java.lang.NumberFormatException

8. java 空指针异常处理

Exception2
finally

分析:

首先NullPointerException被catch(Exception e1)捕获,打印Exception2,因为有finally,最终还会执行finally中的代码。

注意:

IOException不是运行期异常,方法显示抛出,所以,你的run方法肯定要抛出IOException,否则编译通不过。

9. java 出现空指针异常时默认为指定值,怎么处理

java 出现空指针异常时默认为指定值的解决方式:

  1. 查找对象是否初始化,定位代码出错点,进行赋值初始化。

  2. 检查数据是否越界访问,将数组的大小扩大。

如下代码:

packagecom.qiu.lin.he;

publicclassCeShi{
publicstaticvoidmain(String[]args){
CeShice=null;
System.out.println(ce.toString());//对象没有初始化,也会报空指针

int[]intStr=newint[]{1,2,3,4,5};
System.out.println(intStr[5]);//访问第六个下标就会出错
}

}

运行结果如下:

10. java空指针异常怎么弄

你只要将空指针处理就可以 了。
比如对象String s=way(dfsds);
if(s!=null){
s.way2();
}else{
system.out.println("对象为空");
}

阅读全文

与java指针异常处理相关的资料

热点内容
dvd光盘存储汉子算法 浏览:758
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:383
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163