这个问题很好解决,当抛出异常时,你看下控制台抛出的异常信息,看最上面的那句话,里面就包含你的那个对象为空,大多数这种异常是你的对象为null,又调用了其方法,比如有两个类: Student.java public class Student{ private Teacher teacher; public Student(){} public Teacher getTeacher(){ return teacher; }public static void main(String args[]){ Student s = new Student(); s.getTeacher().teach(); } }Teacher.java class Teacher{ public void teach(){ } } 此时就会抛出空指针异常:看下异常信息: Exception in thread "main" java.lang.NullPointerException at Student.main(Student.java:12) 定位到12行,即这条语句:s.getTeacher().teach(); 这时有两种可能: 1、s为null, 2、s.getTeacher()为null 经过你分析s是你new出来的,不可能为null,只可能为第2中情况
编译期异常是一种编程方式,可以通过抛出编译期异常从而向调用方提供方法调用失败的各种详细信息。
运行期异常是一种编程错误,是java对于常见编程错误的一种包装,比如空指针、溢出、除以零等……
java编译器对于编译期异常是非常严格的,要求开发者必须指定一个处理的方法,或者指定由jvm来处理(也就是在main方法中声明抛出此类异常);但是编译器对于运行期异常不做检查,因为他们不可能知道你的编程错误,比方说什么地方调用空指针的方法、什么时候除数是零……这个是由开发者负责检查的。
如果一个方法抛出运行期异常后,没有任何一个方法处理它,最终会由jvm来处理:如果是主线程的异常,jvm会打印它的stackTrace(也就是调用栈的跟踪信息)然后结束程序;如果是其他线程的异常,最终会导致线程失败(线程停止运行),但是没有其他信息显示出来,也不影响主线程的运行。可见,这样的异常是很可怕的——程序异常,但是用户看不到,还以为它在正常运行。
编程的时候,必须要认真检查这些错误,这样才能避免发生不可预料的结果。
一般找哪 传值 返回值 取值
基本问题解决
Student.java
public class Student{
private Teacher teacher;
public Student(){}
public Teacher getTeacher(){
return teacher;
}public static void main(String args[]){
Student s = new Student();
s.getTeacher().teach();
}
}Teacher.java
class Teacher{
public void teach(){
}
}
此时就会抛出空指针异常:看下异常信息:
Exception in thread "main" java.lang.NullPointerException
at Student.main(Student.java:12)
定位到12行,即这条语句:s.getTeacher().teach();
这时有两种可能:
1、s为null,
2、s.getTeacher()为null
经过你分析s是你new出来的,不可能为null,只可能为第2中情况