1、 Object类
是java语言中的根类,即所有类的父类
该类的方法有很多,用什么就查看JDK帮助文档进行查看
1.1、常用:
equals方法:用于比较两个对象是否相同,它其实就是使用两个对象的内存地址比较,内部使用的就是==比较运算符
class Person extends Object{
int age ;
//复写父类的equals方法,实现自己的比较方式
public boolean equals(Object obj) {
//判断当前调用equals方法的对象和传递进来的对象是否是同一个
if(this == obj){
return true;
}
//判断传递进来的对象是否是Person类型
if(!(obj instanceof Person)){
return false;
}
//将obj向下转型为Perosn引用,访问其属性
Person p = (Person)obj;
return this.age == p.age;
}
}
toString方法:返回该对象的字符串表示,该字符串内容就是对象的类型+@+内存地址值
因此,需重写
class Person extends Object{
int age ;
//根据Person类的属性重写toString方法
public String toString() {
return "Person [age=" + age + "]";
}
}
一般基本数据类型,引用类型都已重写toString方法
2、 String类
2.1、概念
字符串是一个常量,一旦创建,不能改变。
String str = "12345";
str = "66666";
这里的不能改变是指12345一旦创建了为常量不能再改变值,但引用变量的指向为改变
2.2、字符串的定义方式有2个:
直接=
使用String类的构造方法
String s3 = "aaa";
String s4 = new String("aaa");
System.out.println(s3==s4);//false,引用类型数据,比较对象地址
//String类继承Object类。重写了父类的方法equals,建立了字符串自己的比较方法,判断的是字符串中每个字符是否相等
System.out.println(s3.equals(s4));//true
3、DateFormat类
3.1、日期/时间格式化子类的抽象类
//创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//对日期进行格式化
String str= df.format(new Date());
System.out.println(str);
3.2、把String转成Date对象
Date date=df.parse(str);
```bash
当出现y时,会将y替换成年
当出现M时,会将M替换成月
当出现d时,会将d替换成日
当出现H时,会将H替换成时
当出现m时,会将m替换成分
当出现s时,会将s替换成秒
4、List集合
集合:用于存储数据的容器;
集合的特点:对象封装数据,对象的个数明确使用数组、对象的个数不明确时使用集合;
4.1、概念
它是一个元素**存取有序**的集合。
它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
4.2、List接口的常用子类:
4.2.1 ArrayList集合
ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,
由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
4.2.2 LinkedList集合
LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。
4.3、常用方法
增加元素方法
add(Object e):向集合末尾处,添加指定的元素
add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移
删除元素删除
remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素
remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素
替换元素方法
set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素
查询元素方法
get(int index):获取指定索引处的元素,并返回该元素
5、Set集合
5.1、概念
集合中存放不重复的元素,通过元素的equals方法,来判断是否为重复元素
5.2、Set接口常用子类
HashSet集合
此类实现Set接口,由哈希表支持(实际上是一个 HashMap集合)。
HashSet集合不能保证的迭代顺序与元素存储顺序相同。
HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。
6、Map集合
6.1、概念
Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Collection中的集合称为单列集合,Map中的集合称为双列集合。
6.2、Map接口常用的子类
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
6.2.1、HashMap集合
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
6.2.2、LinkedHashMap集合
LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构;
通过链表结构可以保证元素的存取顺序一致;
通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
6.3、Map集合遍历键找值方式
public class MapDemo1 {
public static void main(String[] args) {
//创建Map对象
Map<String, String> map = new HashMap<String,String>();
//给map中添加元素
map.put("1", "java");
map.put("2", c#");
map.put("3", "算法");
//获取Map中的所有key
Set<String> keySet = map.keySet();
//遍历存放所有key的Set集合
Iterator<String> it =keySet.iterator();
while(it.hasNext()){
//得到每一个key
String key = it.next();
//通过key获取对应的value
String value = map.get(key);
System.out.println(key+"="+value);
}
}
}
6.4、Entry键值对对象
public class MapDemo2 {
public static void main(String[] args) {
//创建Map对象
Map<String, String> map = new HashMap<String,String>();
//给map中添加元素
map.put("1", "java");
map.put("2", c#");
map.put("3", "算法");
//获取Map中的所有key与value的对应关系
Set<Map.Entry<String,String>> entrySet = map.entrySet();
//遍历Set集合
Iterator<Map.Entry<String,String>> it =entrySet.iterator();
while(it.hasNext()){
//得到每一对对应关系
Map.Entry<String,String> entry = it.next();
//通过每一对对应关系获取对应的key
String key = entry.getKey();
//通过每一对对应关系获取对应的value
String value = entry.getValue();
System.out.println(key+"="+value);
}
}
}
7、总结点
7.1、哪些集合类是线性安全的
vector:比arraylist多了个同步化机制(线程安全),效率较低,
statck:栈类,先进后出。
hashtable:比hashmap线程安全。
enumeration:枚举,相当于迭代器。
7.2、边遍历边移除 Collection 中的元素
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
it.remove();
}
错误的方式为:
Iterator<Integer> it = list.iterator();
for(Integer i : list){
list.remove(i)
}
运行错误的方式的代码会报 ConcurrentModificationException 异常。因为当使用 foreach/for(Integer i : list)语句时,会自动生成一个iterator 来遍历 list,但同时 list 正在被 Iterator.remove() 修改。Java 一般不允许一个线程在遍历 Collection 时另一个线程修改它。
Iterator 的特点是只能单向遍历,但是更加安全,因为它可以确保在当前遍历的集合元素被更改的时候,就抛出 ConcurrentModificationException 异常。
7.3、实现数组和 List 之间的转换
数组转 List
Arrays. asList(数组名) 。
List 转数组
List 的 toArray()方法 。
7.4、Array 和 ArrayList 的区别
Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
7.5、 compareTo 和 compare的区别
都用于排序
compareTo来自java.lang包下的Comparable
public interface Comparable<T>
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
int compareTo(T o)
比较此对象与指定对象的顺序。
compare来自 java.util 包下的Comparator
int compare(T o1, T o2)
比较用来排序的两个参数。
8、异常
8.1、概念
Java异常时java提供的一种识别及响应错误的一致性机制。可以使得程序中的异常代码和正常业务代码分离,提高程序健壮性。
java.lang
类 Exception
java.lang.Object
继承者 java.lang.Throwable
继承者 java.lang.Exception
Throwable
包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示发生了异常情况
包含了其线程创建时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。
8.2、Error(错误)
概念
程序中无法处理的错误,表示运行应用程序中出现了严重的错误。
特点
此类错误一般表示代码运行时 JVM 出现问题,为不受检异常,非代码性错误。
通常有OutOfMemoryError:内存不足错误;StackOverflowError等。此类错误发生时,JVM 将终止线程。
8.3、Exception(异常)
概念
程序本身可以捕获并且可以处理的异常。Exception 异常又分为两类:运行时异常和编译时异常。、
运行时异常(代码有问题)
RuntimeException 类及其子类,表示 JVM 在运行期间可能出现的异常。
Java 编译器不会检查它,且由 Java 虚拟机自动抛出并捕获。如ArrayIndexOutBoundException。
受检异常
编译器不会进行检查并且不要求必须处理的异常,也就是当程序中出现异常时,即使没有try…catch…finally等方式去捕获,编译也会正常通过。
编译时异常
除了RuntimeException 类及其子类之外的异常。
Java 编译器会检查它,在代码里添加捕获语句来处理该异常。如ClassNotFoundException。
受检异常
编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种捕获方式进行处理。除 RuntimeException 及其子类外,其他的 Exception 异常都属于受检异常。
8.4、方式
抛出异常 throw
声明异常 throws
捕获异常 try…catch…finally
如果catch中有return语句,是在finally代码执行完之后才返回。
8.5、自定义异常
class 异常名 extends Exception {
public 异常名(){
}
public 异常名(String message){
super(message);
}
}