遇到的java 运行时错误:
NullPointerException空指针 ,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)
遇到一个错误:
No enclosing instance of type Employee is accessible
在StacticBlock.java中定义了Employee 类和 Manager类。
class Employee{ public Employee (String aName,double aSalary){ name= aName; salary=aSalary; } ... } class Manager extends Employee{ public Manager(String aname,double asalary) { super(aname,asalary); this.bonus =0; } ... }
在另外一个Emp.java中报错:No enclosing instance of type Employee is accessible
Manager m = new Manager("sgs",203.2); //error m.setBonus(800); Employee e = new Employee("dingwei",8300); Employee f= new Employee("pangzi",8000);
解决办法: 将Manager类改成:public static class Manager extends Employee{...}
网上查了下,很多说到是静态方法调用动态方法了。
关于静态方法和实例方法到区别:
在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
在hasStaticMethod.java中定义两个方法:
public class hasStaticMethod { public static void callMe() { System.out.println("I'm a static method from hasStaticMethod."); } public void callAgain() { System.out.println("I'm not static method"); } }
在InvokeStaticMethod.java中调用两种方法时:
public class InvokeStaticMethod { public static void main(String[] args){ //静态方法可以直接调用,不用实例化 hasStaticMethod.callMe(); //实例方法,需要先实例化一个对象。 hasStaticMethod d = new hasStaticMethod(); d.callAgain(); } }
public class staticMethod { private static int sa; //定义一个静态成员变量 private int ia; //定义一个实例成员变量 //下面定义一个静态方法 static void statMethod(){ int i = 0; //正确,可以有自己的局部变量sa = 10; //正确,静态方法可以使用静态变量 otherStat(); //正确,可以调用静态方法 ia = 20; //错误,不能使用实例变量 insMethod(); //错误,不能调用实例方法 } static void otherStat(){} //下面定义一个实例方法 void insMethod(){ int i = 0; //正确,可以有自己的局部变量 sa = 15; //正确,可以使用静态变量 ia = 30; //正确,可以使用实例变量 statMethod(); //正确,可以调用静态方法 } }
静态方法只能访问静态成员,实例方法可以访问静态和实例成员。
之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。