分享一下当初的Java学习笔记,首先通过下图来了解一下Java的数据类型:
关于Java的数据类型长度,如下表所示:
数据类型 | boolean | char | byte | short | int | long | float | double |
字节 | — | 2 | 1 | 2 | 4 | 8 | 4 | 8 |
注意:其中char为2个字节,采用Unicode编码;long为8个字节。
1、每个字符串对象都表示一个匿名对象,字符串的内容一旦声明是不可改变的,改变的只是其内存地址的指向。
2、使用this调用构造函数方法必须放在构造函数的第一行。(因为:构造方法是在实例化对象时被自动调用的,在类的所有方法中,只有构造方法是最先被调用的)
类类型的值是对某个类实例的引用;数组类型的值是对数组对象的引用;接口类型的值是对实现了该接口的某个类实例的引用。
基本类型体现在程序中是普通变量,基本类型的包装类是类,体现在程序中是引用变量。基本类型存储在栈中,而基本类型包装类存储在堆中。
关于super和this关键字在构造器中的使用差异
super调用,用于显式调用父类构造器;
this调用,用于显式调用本类中另一个重载的构造器。
super调用和this调用都只能在构造器中使用,而且都必须作为构造器的第一行代码。(构造器中的super调用和this调用最多只能使用其中之一,而且最多只能调用一次)
创建任何Java对象时,系统总是会先依次调用父类的非静态初始化块、构造器执行初始化,然后才调用本类的非静态初始化块、构造器执行初始化。
(1)子类构造器中的第一行代码使用super显式调用父类的构造器,系统将根据super调用传入的实参列表来确定调用父类的哪一个构造器;
(2)子类构造器中的第一行代码使用this显式调用本类中另一个重载的构造器,系统将根据this调用传入的实参列表来确定调用子类的另一个构造器;
(3)子类构造器中既没有super调用,也没有this调用,系统将会在执行子类构造器之前,隐式调用父类的无参数的构造器。
继承成员变量与继承方法的差别:
如果子类中定义了与父类中完全同名的实例变量,则在子类中定义的变量会隐藏父类中定义的变量(不会覆盖父类中定义的实例变量,在创建子类对象时,依然会为父类中定义的、被隐藏的变量分配内存空间)。
如果子类覆写了父类中的方法,这个方法会覆盖父类中定义的方法。
子类对象中保存了其所有父类定义的全部实例变量。
将一个子类对象赋给一个父类对象时,会执行向上转型。
类变量在类初始化阶段完成初始化,实例变量则在对象初始化阶段完成初始化。