1.Object类
1). 浅克隆与深克隆
浅克隆==>复制引用;深克隆==>复制堆内存(对象);
2). clone()方法
一 clone()方法将对象复制一份并返回给调用者
a.对任何的对象x,都有x.clone()!=x // 克隆对象与原对象不是同一个对象;
b.对任何对象x,都有x.clone().getclass()==x.getclass() // 克隆对象与原对象类型一致;
c.若对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立;
二 对象的克隆
a.为获取一份对象的拷贝,可利用Object类的clone()方法;
b.在派生类中覆盖基类的clone()方法,并声明为public;
c.在派生类的clone()方法中,调用super.clone();
d.在派生类中实现cloneable接口;
3). equals()方法
用于判断对象的值是否相等,若用“==”来判断对象是否相等,实际比较的是引用的值(对象的地址)。程序员应该自己覆盖
equals()方法,使得该类的对象能够比较值是否相等。若不覆盖equals()方法,将使用Object类中equals()的定义,直接比较地址
是否相等。
基本类型比较用==;引用类型与Null比较用==;引用类型之间比较(非空引用)用equals();对象的比较用equals();
4). toString()方法
toString()方法的调用方式:
a. 在进行String与其他类型数据的连接操作时,将自动调用该对象类的toString()方法;
b. 默认情况下,toString()方法返回的字符:
getClass().getName() + "@" + Integer.toHexString( hashcode() )
2.String类及对象池
String对象是一组不可改变的unicode字符序列;
得到String对象的两种方法:
String str = "bruce"; // 对象池。对象池的存在是为了避免频繁的创建和销毁对象而影响系统性能。
String str = new String("bruce"); // 在内存中new对象
3.内部类(Inner Class)
定义:在一个类内部的类叫做内部类,可看做属性、方法,不可被封装。
分类:静态内部类、成员内部类、局部内部类、匿名内部类。
意义:1.更小层次的封装,把一个类隐藏在另一个类的内部;
2.方便的在内部类中访问外部类的私有成员。
匿名内部类:
概念:特殊的局部内部类;
特性:无类名;无class关键字;无构造;有继承、无继承关键字;
适用:在生成对象时才给出接口的实现,可以实现运行时接口回调;
4.集合(Collection Framework)
集合是一种数据结构,为了实现快速处理和高效的内存利用率。
1). List(Java.util.List)
List是一个接口,一个有序、元素可重复的集合。
a.LinkedList:
List接口的链表实现。增删快,查询慢,不同步。
得到LinkedList对象实例:LinkedList list = new LinkedList();
添加元素:list.add(e) // 添加元素e到链表尾部; list.addfirst(e) // 添加元素e到链表头部;
删除元素:list.clear() // 移除所有元素; list.remove() // 移除第一个元素; list.remove(index) // 移除指定元素;
循环遍历每个元素:
Public static void printList(List list){
ListIterator iterator = list.listIterator();
while(iterator.hasNext()){
System.out.print(iterator.next());
}
}
b.ArrayList:
List接口的数组实现。查询快,增删慢,线程不安全。
得到ArrayList对象实例: ArrayList arraylist = new ArrayList();
添加元素:list.add(e) // 添加元素e至末尾; list.add(index,e) // 添加元素e至下标index处;
删除元素:list.clear() // 移除所有元素; list.remove(index) // 移除下标为index的元素;
循环遍历每个元素:
List list = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()){
String[ ] li = it.next();
System.out.println( li[0] );
}
c.Vector:
List接口的数组实现。线程安全,重量级。
2). Set(Java.util.Set)
无序集合,不可重复元素。
a. 实现类:HashSet // equals 返回true,hashcode返回相同的整数
b.子接口:SortedSet 实现类:TreeSet // 二叉树实现
3). Map(Java.util.Map)
a. Hash Map 键(Key)值(Value)对。key不能重复,Value可以重复。
b. Tree Map 实现Map接口。把元素存储在树中。
c. Hash table 把关键字对象映射到值对象,提供允许基于关键字搜索的快速查找方法。
d. Sorted Map Map的子接口。
5. 泛型(Generic)
泛型的本质是参数化类型。即所操作的数据类型被指定为一个参数。这种参数类型可用在类、接口、方法的创建中,称为
泛型类、泛型接口、泛型方法。泛型最初的目的是希望类或方法具备更加广泛的表达能力。
泛型的核心概念:告诉编译器想使用什么类型,然后编译器帮你处理一切细节。在使用泛型时,只需要指定其名称和类型即可。
泛型的特点:1.规范参数类型(安全性); 2.避免强制类型转换(高可读性);
泛型出现的位置:1.类名后。List<String> list = new LinkedList<String>(); 2.方法返回前。
泛型的六种不能:1.泛型不能new; 2.不支持泛型数组; 3.不能是基本类型; 4.不能用static修饰; 5.Exception、Throwable
子类不支持<>; 6.异常处理时,可以抛出,但在catch中不能使用;
6. 异常(Exception)
Java的异常机制:
1.执行到引起异常的语句时,生成异常对象(记录异常信息)并抛出;
2.寻找catch语句,若找到catch语句,则执行,异常处理到此结束;若找不到,继续向上抛出异常,直到找到为止;
3.若在main方法中还未找到,程序中断;
4.每抛出一层,结束本层程序;
异常分类:
1.运行时异常:Runtime Exception类及其子类,可通过编译;
2.受检查异常:除了Runtime Exception类及其子类外,其他的Exception类及子类都属于受检查异常;
异常的处理方式:
1. try...catch...finally // 捕获异常;
2.throws // 抛出异常;异常未处理,只是保证编译通过;throws用于抛出异常,但不处理异常,只能检测;
异常处理的语法结构:
try{
// 可能发生异常的语句;
}catch(Exception e){
// 异常处理语句,语句块不能为空;
}finally{
// 异常处理中一定会执行的语句;
}
异常处理遵循的规则:谁知道谁处理,谁负责谁处理,谁导致谁处理。
异常是伴随着方法的调用产生和传递的,异常经历的所有方法调用的过程叫做异常的方法栈。
7.反射(Reflection)
反射的机制:
在java运行环境,对于任意一个类可获知这个类的属性、方法,对任意一个对象可调用它的方法。这种动态获取类的信息,以及
动态调用类的方法的功能来源与java的反射。由于反射的存在使得java具有动态语言的特性。