不能调用“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)
- 第二种情况:创建了一个引用类型的数组,却没有给数组元素指向对象而调用了。(示例2)
- 第三种情况:是在类中定义了引用类型属性,却没有指向对象而调用了非静态的方法或属性,和第一种情况类似,这里就不给代码了
示例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());
}
}
}