遇到的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。

 

posted on 2013-11-07 20:50  happinessqi  阅读(673)  评论(0编辑  收藏  举报