正则表达式
Java中无论正则表达式是否有边界匹配(^$)都是做全匹配验证
- boolean matches(String regex);
根据给定的正则表达式来验证当前字符串是否满足格式要求,满足返回true - String[] spilt(Strig regex);
将当前字符串中满足给定正则表达式的部分进行拆分,返回所有剩下的部分 - String replaceAll(String regex,String str);
将当前字符串中满足给定正则表达式(regex)的部分替换为给定的字符串(str)
Object类
- Object类是java中所有类的顶级父类,若我们定义的一个类没有显式的使用extends继承某个类时,默认就是继承自Object的
- 重写toString方法
*当我们调用一个类的toString方法时,就应当重写该方法,因为Object提供的toString方法返回的句柄没有什么实际意义
*重写后返回的字符串没有具体的格式要求,原则是将需要关注的属性信息拼在一起以字符串形式返回
*Java api中大部分的类都重写了toString,若是我们自己定义的类的实例需要被该方法输出到控制台,通常这个类就需要重写toString() - System.out.println(Object o)该方法可以将任何Java中的对象输出到控制台实际上,它输出的是给定的对象toString()方法返回的字符串
- 重写equals方法,目的是比较两个对象的内容是否一致,并不是说所有属性都一样,才叫内容一致
- 对于引用类型变量而言:
*”==”:值比较,在这里就是地址的比较,所以两个引用类型变量指向同一个对象时才为true,所以比较的是是否为”同一个”
*”equals”:内容比较,比较的是两个对象的内容是否一样,所以比较的是”像不像”
注意:Object默认的equals方法规则等同于==
包装类
- 基本类型由于没有面向对象特性,所以不能直接参与面向对象开发,为此java为8个基本类型定义了8个包装类,使用包装类可以将基本类型以对象的形式存在,从而参与面向对象开发
- 6个数字类型包装类继承自Number,Number要求数字类型包装类提供了6个数字类型转换的方法:例:int intValue()转换成int值
- 基本类型转换为包装类推荐使用静态方法valueOf();
- 数字类型包装类支持两个常量
*MAX_VALUE:包装类对应基本类型的最大值
*MIN_VALUE:包装类对应基本类型的最小值 - 包装类都提供了一个静态方法:parseXXX(String str)
可以将给定的字符串转换为对应的基本类型值,但是前提是该字符串必须能正确描述该基本类型值 - JDK在1.5(5.0)之后推出了一个新特性—自动拆装箱
*自动拆装箱是编译器认可,而不是JVM认可的
*编译器在编译源程序时,自动补充了代码在基本类型与引用类型之间转换的过程,称为自动拆装箱
日期操作
java.util.Date
- Date的每一个实例可以表示一个确切的时间
- 内部维护一个long值,该值为UTC(1970年元旦)到这个时间点之间所经过的毫秒值
long getTime()方法可以获取其内部维护的long值
setTime()使当前Date表示给定的毫秒值表示的时间,也可创建一个Date的同时让其表示给定的时间 - 我们现在常用的计量时间的标准是格林威治时间
- 由于Date设计存在缺陷,所以大部分针对时间操作的方法全部过时,现在仅用该类表示一个时间,其他操作由Calendar完成
java.text.SimpleDateFormat
- 该类的作用是可以按照给定的日期格式,将String与Date相互转换
- 学习该类需要记住两件事:会写日期格式和记住两个转换方法
- Date和String的互转
*String format(Date date)将给定的Date表示的时间按照指定的日期格式进行转换
*Date parse(String str)按照指定的日期格式解析字符串,将其转换成Date对象来表示该时间
java.util.Calendar日历类
- 用于操作时间的类,常用实现类为格里高利历法
Calendar是抽象类,提供了便于操作时间的相关方法定义 - Calendar getInstance()静态方法
该方法会根据当前系统所在地区返回合适的Calendar实现类,通常是GregorianCalendar即:公历 - Date和Calenda的互转
*Date getTime()该方法会将其表示的时间以Date类型返回
*void setTime(Date date)该方法会使当前Calendar表示给定的Date所表示的时间 - void set(int field,int value)对指定时间分量(时间单位)设置值的方法
- int get(int field)获取指定时间分量所对应的值
- int getActualMaximum(int field)方法用于获取给定时间分量所允许的最大值
- void add(int field,int value)对指定的时间分量加上指定的值,若指定的值是负数,则是减去指定的值,计算后可能会影响其他时间分量的值,会自动对应好
集合
java.util.Collection集合,存放的是元素的引用(地址)
- 用于存放一组元素,这一点与数组一致,但是其提供了维护元素的相关方法,比数组使用方便
- Collection是所有集合的顶级接口,规定了所有集合都应当具有的功能(方法)
- boolean add(E e)方法用于向集合中添加新元素,成功则返回true
- int size()获取当前集合的元素数量
- boolean isEmpty()判断集合是否为空集合
- void clear()清空集合
- contains(Object o)用于判断给定的元素是否被包含在集合中,若包含则返回true,否则返回false
*contains判断集合是否包含指定元素是依靠元素自身equals的比较结果,只要集合中现有元素与给定元素有equals比较为true的,集合则认为包含该元素,而不是这个元素必须在集合中 - boolean remove(E e)从集合中删除指定元素,删除成功返回true
*删除元素也是删除集合中第一个与给定元素equals比较为true的元素 - boolean addAll(Collection c)将给定的集合中的元素存入到当前集合中当执行完毕后,当前集合元素发生了改变,则返回true
- boolean containsAll(Collection c)判断当前集合是否包含给定集合中的所有元素,包含依然是依据元素自身equals比较的结果
- 遍历集合元素使用迭代器
*Collection提供了一个方法Iterator iterator(),该方法可以获取一个用来遍历当前集合的迭代器
*迭代器Iterator本身是一个接口,定义了遍历集合的相关方法,但并没有具体实现
*不同的集合实现类都提供了可以遍历自身的迭代器实现类 - 遍历集合需要遵循步骤:问,取,删其中删除不是必须操作
*boolean hasNext()该方法用于判断当前集合中是否还有元素可以被取出,若有则返回true,不论次数的循环,用while
*E next()取得过程,该方法会将集合中下一个元素返回
*使用迭代器遍历集合的过程中,不能通过集合的方法改变元素数量,否则可能导致迭代器遍历失败,我们可以通过迭代器提供的void remove()方法删除通过next方法遍历出来的元素
java.util.List
- List集合是可重复集,并且有序.Set集合是不可重复集,大部分无序
- List集合特点是可以通过下标操作元素,常用实现类:ArrayList:数组实现(更适合遍历)LinkedList:链表实现(更适合增删元素)
- List集合独有方法
*E get(int index)获取指定下标对应的元素
*E set(int index,E e)将给定元素设置到指定位置上,返回值为原位置上的元素—替换元素操作 - List集合提供了一对额外的add,remove方法,允许我们通过下标增删指定元素
*void add(int index,E e)将给定的元素插入到指定位置,原位置及后续元素顺序向后移动
*E remove(int index)删除指定位置处的元素并将其返回 - List subList(int start,int end)可以获取指定范围内子集的方法(注意:对子集的操作都会影响原集合)
- Collection接口提供了方法toArray()可以将现有集合转换为数组
*该方法要求我们传入一个要转换成的数组,长度与集合的size一致即可, 若不一致,该方法会判断当前数组是否可以保存的下集合中的所有元素,若可以就用这个数组,不可以,则创建一个与给定数组同类型的数组并将集合元素存入后返回 - 数组转换为集合,使用Arrays的静态方法asList(),数组只能转换为List集合
- 数组转换的集合是不能添加新元素的(可以进行替换操作,此时原数组元素也一起改变),若想增删元素,需要自行创建一个集合
- 所有的集合都支持一个参数为Collection的构造方法
该构造方法创建的集合实例会同时包含参数传入的集合中的所有元素,所以该构造方法也成为集合的复制构造器 - java.util.Collections是集合的工具类,提供了便于操作集合的相关功能方法
*static void sort(List list)该方法会对集合进行自然排序(从小到大) - 新循环,又名:增强型循环,增强for循环,for_each
*for(元素类型 e : 集合或数组){ 循环体 } - 新循环是JDK1.5(5.0)之后推出的新特性
- 新循环不代替传统for循环的工作,其使用目的是为了方便遍历集合或数组
- 新循环并非真正的新语法,这个是编译器认可而非虚拟机,编译器会将新循环改成迭代器后再生产class文件
- 编译器在编译程序时,若发现使用新循环遍历集合时,会将代码改为迭代器方式所以新循环遍历集合本质上就是迭代器遍历集合,所以不能在遍历过程中用集合的方法增删元素
泛型
泛型 JDK5.0之后推出的新特性
- 泛型又称为参数化类型,即:使用时才将实际类型传入来确定(不可用基本类型)
- 泛型的实际类型是Object,只不过使用泛型后,编译器会帮助检查实际应用时的类型是否匹配,以及自动造型
- 泛型在集合中的应用:在集合中使用泛型是用来说明集合中的元素类型,这样可以规定集合只能是存放该类型元素,获取时也无需再次造型
- 迭代器的泛型应当与其遍历的集合的泛型一致