空指针异常Cannot invoke “String.split(String)“ because “ui.socketDemo2.readLine“ is null

在这里插入图片描述
不能调用“String.split(String)”,因为readLine是空

查阅资料得:
1,多写一个字符
2,优先写了文件路径
3,java.lang.NullPointerException的问题与解决

资料3得到的启发:
用一个程序模拟出错的原因:

示例1

package trans;

class User{
    private String name;
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

public class testPointNull {
    public static void main(String[] args) {
        User user=null;
//        User user = new User();
//        user.setName("小明");
        System.out.println("user对象name的值为:"+user.getName());
    }
}

得到了同样的错误
在这里插入图片描述

package trans;

class User{
    private String name;
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

public class testPointNull {
    public static void main(String[] args) {
//        User user=null;
        User user = new User();
        user.setName("小明");
        System.out.println("user对象name的值为:"+user.getName());
    }
}

所以可以加一个判断是佛为空
在这里插入图片描述

package trans;

import java.io.IOException;
import java.util.IllegalFormatCodePointException;

class User{
    private String name;
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

public class testPointNull {
    public static void main(String[] args)  {
        User user=null;
        if (user==null){
            return ;
        }

//        User user = new User();
//        user.setName("小明");
        System.out.println("user对象name的值为:"+user.getName());
    }
}

添加一个判断是否为空,输出结果就可以避免报错了
在这里插入图片描述

4,总结的很好
总结:创建了一个引用类型变量,却没有指向任何对象,而又去通过这个引用类型变量加点的形式去访问非静态的方法和属性。

引用类型变量:就是需要指向一个对象,与指针有关

三种情况:

  1. 第一种情况,在启动类中定义了引用类型变量,赋值为空:(示例1)
  2. 第二种情况:创建了一个引用类型的数组,却没有给数组元素指向对象而调用了。(示例2)
  3. 第三种情况:是在类中定义了引用类型属性,却没有指向对象而调用了非静态的方法或属性,和第一种情况类似,这里就不给代码了

示例2

package trans;

class Books{
    private String name;
    private String author;
    private double price;
    public Books(){}
    public Books(String name,String author,double price){
        this.name=name;
        this.author=author;
        this.price=price;
    }
    public String getName()
    {
        return name;
    }

    public String getAuthor()
    {
        return author;
    }

    public double getPrice()
    {
        return price;
    }
}

//创建一个引用类型数组,却没有给数组元素指向对象而调用
public class testPointNull2 {
    public static void main(String[] args) {
        Books[] books = new Books[3];
        books[0] = new Books("沙漠之眼","小明",46);
        //这里使用: (循环变量类型,循环变量名称,要被遍历的对象)循环体
        for (Books book:books){
            System.out.println("name:"+book.getName()+",author:"+book.getAuthor()+",price"+book.getPrice());
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值