如果没有在定义处初始化,那么除非发生了不可避免的运行期异常,否则将不能保证信息在发送给对象引用之前已经被初始化。这是java编程思想了的一句话,怎么理解?

解决方案 »

  1.   

    应该指的是延迟绑定。是指Java直到运行时才检查类、域、方法的名称,而不象C/C++的编译器那样在编译期间就清除了类、域、方法的名称,代之以偏移量数值——这是Java二进制兼容得以发挥作用的要害。
      
      由于采用了延迟绑定技术,方法、域、类的名称直到运行时才解析,意味着只要域、方法等的名称(以及类型)一样,类的主体可以任意替换——当然,这是一种简化的说法,还有其他一些规则制约Java类的二进制兼容性,例如访问属性(private、public等)以及是否为abstract(假如一个方法是抽象的,那么它肯定是不可直接调用的)等,但延迟绑定机制无疑是二进制兼容的核心所在。
      
      只有把握了二进制兼容的规则,才能在改写类的时候保证其他类不受到影响。
      

  2.   

    定义A               (不初始化,有些类型 编译器会赋初始值)
    [赋值A]           (有可能)
    引用A               就推出定义的时候不初始化A,在引用A的时候就有可能为null  这有什么难理解的? 
      

  3.   

    private String a;public void run1(){
        System.out.println(a.length());
    }public void run(int index){
        if(index==1){
           a="abc";
        }
    }如果运行run()传过来的index不等于一,那么运行run1()的时候会怎么样呢?
      

  4.   

    意思就是,比如object o;o.equals();
    这样就会报错,而object o=new object();o.equals();
    这样就不出错,如果一个引用没有new的话,你再去使用它,就是错误的,明白了?