Java学习笔记

java基本功16课:(2)对象与内存控制

2017-06-17  本文已影响27人  蓝汝丶琪

前言

上一节提到了实例变量和实例对象的区别,那么这节就继续深入一下变量以及对象。
主要内容:

1. 实例变量和类变量

1.1 定义

1.2 区别

1.3 初始化

class test{
    //1.weight 初始化的值是多小
    double weight=2.3;
    {
        weight=4.3;
    }   
    test(){
        this.weight=4.6;
    }


    // 2.向前引用(为什么)
    int num1=num2+2;
    static int num2=4;
    

    // 3.请说出name 初始化的值应该是什么
    static{
        name="我爱java";
    }
    static String name="给我丶鼓励";


}

2. 父,子类实例变量和内存分配机制

2.1 继承的初始化

class father{
    int age=44;

   //构造方法
    father(){
        System.out.println("父类的构造输出"+this.age);
        this.say();
    }
    public void say(){
        System.out.println("父类的say"+this.age);
    }
}

class son extends father{
    int age=33;
   //构造方法
    son(){
      System.out.println("子类构造方法");
    }
    public void say(){
        System.out.println("子类的say:"+this.age);
    }
}

public class second{
    public static void main(String[] ages){
       son myson=new son();

    }
}
父类的构造输出44
子类的say:0
子类构造方法
"因为子类son把父类的say()重写了,因此,当调用的时候,是调用子类的say()的。"

恩~其实这个说话不正确的。首先需要理解这个this是谁。其实这个this是son。不信?

System.out.println(this.getClass());

输出结果是:class son 。
所以,this.say()调用的自然是son的say()方法了。
那为什么输出是0呢?
因为值此时赋值只是到父类,子类的age还没赋值,还是初始值0呢。

2.2 继承的变量和方法的区别以及内存控制

       son myson=new son();
       father myfather=myson;

       System.out.println(myson.age);
       myson.say();
       System.out.println(myfather.age);
       myfather.say(); 
      //将会输出什么
33
子类的say:33
44
子类的say:33
father myfather=myson

明明是new 子类,但却可以输出父类的age呢?

3. final 的注意事项

3.1 final方法不能被重写,只能被程序显式地赋值一次。
3.2 final最大作用是"宏替换"
3.3 在内部类中的局部变量,需要用final。

上一篇下一篇

猜你喜欢

热点阅读