创建对象
创建对象需声明:声明对象类型以及名称
相关:变量
对象构造
Java中编写构造器的机制
对象拷贝
clone()
浅拷贝:只复制当前对象的所有基本类型以及相应的引用变量,但没复制引用对象的实际对象
(对象默认方法是浅拷贝)
一般拷贝
彻底深拷贝:clone对象之后此对象与母对象在任何引用路径上都不存在共享的实例对象,且难度越大。
深拷贝实现:复写clone方法实现引用对象的深度遍历式拷贝。
重载
定义:有的类有多个构造器,构造器方法中相同名字,不同参数
重载解析:通过个方法给出的参数类型与调用所使用的值类型进行匹配挑选相应方法
方法签名:完整描述一个方法,指出方法名以及参数类型
注:不能有名字相同、参数类型相同但不同返回值的两个方法
默认域初始化
两种方法:
- 构造器中设置值
- 声明中赋值
- 初始化块:构造类的对象,这些块都会执行
若无显式给构造器赋值,则会自动赋值默认值:数值为0,布尔值false,对象引用为null。
无参构造函数:很常见
对象与对象变量
传递给方法:System.printIn
将toString对象应用到构造的实例上:变量名.toString
对象包装器类
不可变,构造包装器之后不允许更改其中的值;是final,不能定义他们的子类
派生的6个类
派生于公共的超类Number的6个类:
Interger、long、Float、Double、Short、Byte、Character
Void
Boolean
使用场景:
- 需要将int这类数据类型转换为对象
- 定义整形列表,尖括号类型参数不允许是基本类型
自动装拆箱
自动装箱
添加int类的元素到ArrayList<Interger>
:
list.add(3);
list.add(Interger.valueOf(3));
自动拆箱
Interger对象赋给int值:
int n = list.get(i);
int n = list.get(i).inValue();
自动装箱的问题
- 包装器可以引用为null,可能会抛空指针异常
- 在条件表达式中混合使用Interger和Double类型,前者自动拆箱提升Double,再装箱。