2020.10.9收获
学习内容:
变量的初始化:在定义变量时,Java要求必须显式初始化变量
对象变量的初始化:对象变量如果不引用一个真实的对象,则必须声明为null;
注:特殊值null代表一个对象变量不引用任何对象
引用对象后的对象变量
MyClass obj = new MyClass();
当对象不再使用时,JVM会回收MyClass对象所占用的内存,这个过程称为“垃圾回收”
理解赋值“=”的含义
独特的对象引用:this
对象中所有数据字段都是通过this指针间接引用的
同一类中的方法可以相互调用,或者直接存取本类定义的字段,可看成其中隐含了一个this调用
作为常量的对象变量
可以使用final定义一个“常量”对象变量
final MyClass obj = new MyClass();
注意:“常量”对象变量不能指向另一个对象,但可以修改对象,比如设置它所引用对象的某共有字段值
对象判等
对于原始数据类型的变量(比如int),可以直接使用“==”判断两变量值是否相等
重写基类的equals 方法
class MyTestClass{ public int Value; @Override public boolean equals(Object obj){ return ((MyTestClass) obj).Value == this .Value; } public MyTestClass(int initValue){ Value = initValue; } }
注意:左边这种重写equals()方式是简化的,在实际开发中不应该这样写,应该加上对参数有效性的检测代码
equals()方法从哪来?
当你定义一个类时,如果不显式指明它的“父亲”类是哪个,则默认是Object.
Object是Java的最顶层基类,其中定义了equals()方法
自定义 equals()方法
除了重写基类的equals方法,也可以重载(overload) equals()方法:
注意:
与前面“重写”方式的代码相比,equals()方法的参数类型是 MyTestClass,而不是Object,并且方法本身也没有附加“@Override”标记
类的构造方法
当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值
如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”
如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造发法。
多构造函数
同一类可以有多个构造函数,多个构造函数之间通过参数来区别,这是方法重载的一个实例
构造函数之间可以相互调用
class Fruit{ int grams; int calsPerGram; Fruit(){ this(55,10); } Fruit(int g,int c){ grams=g; calsPerGram=c; } }
类的初始化块
可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员
类的这种“没有名字"的”成员”,多用于初始化类的字段
类字段的初始化顺序
(1)执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
(2)执行类的构造函数
类的初始化块不接收任何的参数,而且只要一创建类的对象,它门就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”
访问类的静态字段
class Employee { String name; long salary; short employee_id; static int total_employees; static void clear(){ total_employees=0; } }
类的静态方法只能访问类的静态成员
包装类
基本数据类型仅仅提供了数据,却缺少一些常用的功能,为此,Java提供了包装类
包装类=基本数据类型的数据+扩充的一些方法和字段
包装类是引用类型,可以创建相应的对象
Java中的包装类:
装箱和拆箱
BoxAndUnbox.java
public class BoxAndUnbox { /** * @param args */ public static void main(String[] args) { int value=100; Integer obj=value; //装箱 int result=obj*2; //拆箱 } }