第05天 API 第1章 Object类 & System类1.1 Object类1.1.1 概述 Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。 1.1.2 toString()方法 由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 StringtoString() : 返回该对象的字符串表示 * return getClass().getName() + "@"+Integer.toHexString(hashCode()); * getClass():返回一个字节码对象 * Integer.toHexString():返回指定参数的十六进制字符串形式 * hashCode():返回该对象的哈希码值(内部地址) * * * * booleanequals(Object obj) 1.1.3 equals()方法 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。 在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。 1.2 System类 System 类包含一些有用的类字段和方法。它不能被实例化。 1.2.1 成员方法 static voidarraycopy(Objectsrc, int srcPos, Object dest, int destPos, int length) : 从src源数组的srcPos索引开始,复制length个元素 从destPost位置开始将这些元素放至到dest数组中 staticlongcurrentTimeMillis() 返回以毫秒为单位的当前时间 staticvoid exit(int status) 终止当前正在运行的 Java 虚拟机 第2章 日期相关类 2.1 Date类 Date: 表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间 2.1.1 Date类的构造方法 Date() :创建的是一个表示当前系统时间的Date对象 Date(long date) :根据"指定时间"创建Date对象 2.1.2 Date类常用方法 void setTime(longtime) long getTime() 2.2 DateFormat类 & SimpleDateFormat DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。 我们通过这个类可以帮我们完成日期和文本之间的转换。 继续阅读API,DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。 2.2.1 DateFormat&SimpleDateFormat的常用方法 要格式化一个当前语言环境下的日期也就是日期-> 文本),要通过下面的方法来完成。DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象。 2.3 Calendar类2.3.1 Calendar类概述 Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。 Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下: Calendar类静态方法 Calendar c =Calendar.getInstance(); //返回当前时间 第3章 包装类&正则表达式3.1 包装类 Java中提供了相应的对象来解决该问题,基本数据类型对象包装类:java将基本数据类型值封装成了对象。封装成对象有什么好处?可以提供更多的操作基本数值的功能。 8种基本类型对应的包装类如下: 其中需要注意int对应的是Integer,char对应的Character,其他6个都是基本类型首字母大写即可。 3.2 包装类的自动装箱与拆箱 在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。 比如: 基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。 相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。 自动拆箱:对象转成基本数值 自动装箱:基本数值转成对象 3.3 正则表达式3.3.1 正则表达式概述 正则表达式是专门解决字符串规则匹配的工具。 正则表达式也是一个字符串,用来定义匹配规则。 参照帮助文档,在Pattern类中有简单的规则定义,可以结合字符串类的方法使用。 3.3.2 正则表达式匹配规则 参照帮助文档,在Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母。我们来学习语法规则。 正则表达式的语法规则: 字符:x 含义:代表的是字符x 例如:匹配规则为 "a",那么需要匹配的字符串内容就是 ”a” 字符:\\ 含义:代表的是反斜线字符'\' 例如:匹配规则为"\\" ,那么需要匹配的字符串内容就是 ”\” 字符类:[abc] 含义:代表的是字符a、b 或 c 例如:匹配规则为"[abc]",那么需要匹配的内容就是字符a,或者字符b,或字符c的一个 字符类:[^abc] 含义:代表的是除了 a、b 或 c以外的任何字符 例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符 字符类:[a-zA-Z] 含义:代表的是a 到 z 或 A 到 Z,两头的字母包括在内 例如:匹配规则为"[a-zA-Z]",那么需要匹配的是一个大写或者小写字母 字符类:[0-9] 含义:代表的是 0到9数字,两头的数字包括在内 例如:匹配规则为"[0-9]",那么需要匹配的是一个数字 字符类:[a-zA-Z_0-9] 含义:代表的字母或者数字或者下划线(即单词字符) 例如:匹配规则为"[a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线 预定义字符类:. 含义:代表的是任何字符 例如:匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则"\\."来实现 预定义字符类:\d [0-9] 含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9] 例如:匹配规则为"\d ",那么需要匹配的是一个数字 预定义字符类:\w [a-zA-Z_0-9] 含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9] 例如:匹配规则为"\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线 数量词:X? 含义:代表的是X出现一次或一次也没有 例如:匹配规则为"a?",那么需要匹配的内容是一个字符a,或者一个a都没有 数量词:X* 含义:代表的是X出现零次或多次 例如:匹配规则为"a*" ,那么需要匹配的内容是多个字符a,或者一个a都没有 数量词:X+ 含义:代表的是X出现一次或多次 例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a 数量词:X{n} 含义:代表的是X出现恰好 n 次 例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a 数量词:X{n,} 含义:代表的是X出现至少 n 次 例如:匹配规则为"a{5,}",那么需要匹配的内容是最少有5个字符a 数量词:X{n,m} 含义:代表的是X出现至少 n 次,但是不超过 m 次 例如:匹配规则为"a{5,8}",那么需要匹配的内容是有5个字符a 到 8个字符a之间 第06天 集合 第1章 集合&迭代器1.1 Collection中的常用功能 boolean add(Objecte): 向集合中添加元素 void clear():清空集合中所有元素 booleancontains(Object o):判断集合中是否包含某个元素 boolean isEmpty():判断集合中的元素是否为空 booleanremove(Object o):根据元素的内容来删除某个元素 int size():获取集合的长度 Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中 1.2 迭代器 java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。 Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。 集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法如下 hasNext()方法:判断集合中是否有元素可以迭代 next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。 1.3 并发修改异常: 并发修改异常产生原因: 当使用迭代器遍历集合的时候,使用了集合中的增加/删除 方法,导致并发修改异常产 第2章 增强for&泛型 2.1 泛型2.1.1 泛型的引入 我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换 使用集合存储自定义对象并遍历 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常, * 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型 2.1.2 泛型的使用 当类上定义<>的时候就可以使用泛型,例如ArrayList类的定义: class ArrayList<E>,那么我们在创建ArrayList对象的时候就可以指定<>中E的类型 ArrayList<String>al=newArrayList<String>(),那么String就把E替换掉了 使用集合存储自定义对象并遍历 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常, * 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型 * * 泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点 * 泛型好处: * 避免了类型转换的问题 * 可以减少黄色警告线 * 可以简化我们代码的书写 * * 什么时候可以使用泛型? * 问API,当我们看到<E>,就可以使用泛型了 2.2 增强for 增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。 格式: for(元素的数据类型 变量 : Collection集合or数组){ } 它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。 第3章 常见数据结构3.1 数组 数组,采用该结构的集合,对元素的存取有如下的特点: 查找元素快:通过索引,可以快速访问指定位置的元素 增删元素慢 ,每次添加元素需要移动大量元素或这创建新的数组 3.2 链表 链表,采用该结构的集合,对元素的存取有如下的特点: A:多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。 B:查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素 C:增删元素快: 增加元素:只需要修改连接下个元素的地址即可。 删除元素:只需要修改连接下个元素的地址即可 3.3 栈&队列 A:堆栈,采用该结构的集合,对元素的存取有如下的特点: 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。 B:队列,采用该结构的集合,对元素的存取有如下的特点: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。 第4章 List子体系4.1 List子体系特点 A:有序的(存储和读取的顺序是一致的) B:有整数索引 C:允许重复的 4.2 List的特有功能 void add(int index, E element) :将元素添加到index索引位置上 E get(int index) :根据index索引获取元素 E remove(int index):根据index索引删除元素 E set(int index, Eelement):将index索引位置的的元素设置为element 4.3 LinkedList特有功能 LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢 void addFirst(E e):向链表的头部添加元素 voidaddLast(E e):向链表的尾部添加元素 EgetFirst():获取链头的元素,不删除元素 EgetLast():获取链尾的元素,不删除元素 EremoveFirst():返回链头的元素并删除链头的元素 EremoveLast():返回链尾的元素并删除链尾的元素
|