标题javaSe阶段模块三笔记
第十一章常用类的概述和使用
常用的包(熟悉):java.lang包,改包是Java语言的核心包,并且该包中的所有内容由java虚拟机自动导入。如:System类、String类 ·java.util包 - 该包是Java语言的工具包,里面提供了大量工具类以及集合类等。如:Scanner类、Random类、List集合、…
java.io包 - 该包是Java语言中的输入输出包,里面提供了大量读写文件相关的类等。如:FileInputStream类、FileOutputStream类、…
java.io包 - 该包是Java语言中的输入输出包,里面提供了大量读写文件相关的类等。如:FileInputStream类、FileOutputStream类、…
java.net包 - 该包是Java语言中的网络包,里面提供了大量网络编程相关的类等。如:ServerSocket类、Socket类、…
java.sql 包 - 该包是Java语言中的数据包,里面提供了大量操作数据库的类和接口等。如:DriverManager类、Connection接口、…
Java程序员在编程时可以使用大量类库,因此Java编程时需要记的很多,对编程能力本身要求不是特别的高。
Object类(重点)
java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间
接子类。
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类为 java.lang.Object 类。
Object类定义了“对象”的基本行为, 被子类默认继承。
包装类
包装类的概念:通常情况下基本数据类型的变量不是对象,为了满足万物皆对象的理念就需要对基本数据类型的变
量进行打包封装处理变成对象,而负责将这些变量声明为成员变量进行对象化处理的相关类,叫做包装类。
包装类的分类java.lang.Byte byte,java.lang.Short short,java.lang.Integer int,java.lang.Long long
java.lang.Float float,java.lang.Double double,java.lang.Boolean boolean,java.lang.Character char
数学处理类(熟悉)
Math类的概念:java.lang.Math类主要用于提供执行数学运算的方法,如:对数,平方根
BigDecimal类的概述:由于float类型和double类型在运算时可能会有误差,若希望实现精确运算则借助java.math.BigDecimal类型加以述。
BigInteger类的概念:若希望表示比long类型范围还大的整数数据,则需要借助java.math.BigInteger类型描述。
第十二章 String类的概述和使用
String类的概念(重点)
java.lang.String类用于描述字符串,Java程序中所有的字符串字面值都可以使用该类的对象加以描述,如:“abc”。
该类由final关键字修饰,表示该类不能被继承。
从jdk1.9开始该类的底层不使用char[]来存储数据,而是改成 byte[]加上编码标记,从而节约了一些空间。
该类描述的字符串内容是个常量不可更改,因此可以被共享使用。
如:
String str1 = “abc”; - 其中"abc"这个字符串是个常量不可改变。
str1 = “123”; - 将“123”字符串的地址赋值给变量str1。
- 改变str1的指向并没有改变指向的内容
常量池的概念(原理)
由于String类型描述的字符串内容是常量不可改变,因此Java虚拟机将首次出现的字符串放入常量
池中,若后续代码中出现了相同字符串内容则直接使用池中已有的字符串对象而无需申请内存及创建对
象,从而提高了性能。
常用的构造方法(练熟、记住)
String() 使用无参方式构造对象得到空字符序列
String(byte[] bytes, int offset, intlength) 使用bytes数组中下标从offset位置开始的length个字节来构造对象
String(byte[] bytes) 使用bytes数组中的所有内容构造对象
String(char[] value, int offset, intcount) 使用value数组中下标从offset位置开始的count个字符来构造对象
String(char[] value) 使用value数组中的所有内容构造对象
String(String original) 根据参数指定的字符串内容来构造对象,新创建对象为参数对象的副本
常用的成员方法(练熟、记住)
String toString() 返回字符串本身
byte[] getBytes() 将当前字符串内容转换为byte数组并返回
char[] toCharArray() 用于将当前字符串内容转换为char数组并返回
char charAt(int index) 方法charAt用于返回字符串指定位置的字符。
int length() 返回字符串字符序列的长度
boolean isEmpty() 判断字符串是否为空
int compareTo(String anotherString) 用于比较调用对象和参数对象的大小关系
int compareToIgnoreCase(String str) 不考虑大小写,也就是’a’和’A’是相等的关系
String concat(String str) 用于实现字符串的拼接
boolean contains(CharSequence s) 用于判断当前字符串是否包含参数指定的内容
String toLowerCase() 返回字符串的小写形式
String toUpperCase() 返回字符串的大写形式
String trim() 返回去掉前导和后继空白的字符串
boolean startsWith(String prefix) 判断字符串是否以参数字符串开头
boolean startsWith(String prefix, int toffset) 从指定位置开始是否以参数字符串开头
boolean endsWith(String suffix) 判断字符串是否以参数字符串结尾
boolean equals(Object anObject) 用于比较字符串内容是否相等并返回
int hashCode() 获取调用对象的哈希码值
boolean equalsIgnoreCase(StringanotherString) 用于比较字符串内容是否相等并返回,不考虑大小写,如:'A’和’a’是相等
int indexOf(int ch) 用于返回当前字符串中参数ch指定的字符第一次出现的下标
int indexOf(int ch, int fromIndex) 用于从fromIndex位置开始查找ch指定的字符
int indexOf(String str) 在字符串中检索str返回其第一次出现的位置,若找不到返回-1
int indexOf(String str, intfromIndex) 表示从字符串的fromIndex位置开始检索str第一次出现的位置
int lastIndexOf(int ch) 用于返回参数ch指定的字符最后一次出现的下标
int lastIndexOf(int ch, intfromIndex) 用于从fromIndex位置开始查找ch指定字符出现的下标
int lastIndexOf(String str) 返回str指定字符串最后一次出现的下标
int lastIndexOf(String str, intfromIndex) 用于从fromIndex位置开始反向搜索的第一次出现的下标。
String substring(intbeginIndex, int endIndex) 返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串
String substring(intbeginIndex) 返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串
正则表达式的概念(了解)
正则表达式本质就是一个“规则字符串”,可以用于对字符串数据的格式进行验证,以及匹配、查
找、替换等操作。该字符串通常使用^运算符作为开头标志,使用$运算符作为结尾标志,当然也可以省
略。
[abc] 可以出现a、b、c中任意一个字符
[^abc] 可以出现任何字符,除了a、b、c的任意字符
[a-z] 可以出现a、b、c、……、z中的任意一个字符
[a-zA-Z0-9] 可以出现az、AZ、0~9中任意一个字符
. 任意一个字符(通常不包含换行符)
\d 任意一个数字字符,相当于[0-9]
\D 任意一个非数字字符
\s 空白字符,相当于[\t\n\x0B\f\r]
\S 非空白字符
\w 任意一个单词字符,相当于[a-zA-Z_0-9]
\W 任意一个非单词字符
X? 表示X可以出现一次或一次也没有,也就是0 ~ 1次
X* 表示X可以出现零次或多次,也就是0 ~ n次
X+ 表示X可以出现一次或多次,也就是1 ~ n次
X{n} 表示X可以出现恰好 n 次
X{n,} 表示X可以出现至少 n 次,也就是>=n次
X{n,m} 表示X可以出现至少 n 次,但是不超过 m 次,也就是>=n并且<=m次
boolean matches(Stringregex) 判断当前正在调用的字符串是否匹配参数指定的正则表达式规则
String[] split(String regex) 参数regex为正则表达式,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组
String replace(char oldChar, charnewChar) 使用参数newChar替换此字符串中出现的所有参数oldChar
String replaceFirst(String regex,String replacement) 替换此字符串匹配给定的正则表达式的第一个子字符串
String replaceAll(String regex,String replacement) 将字符串中匹配正则表达式regex的字符串替换成replacement
第十三章可变字符串类和日期相关类
可变字符串类(重点) 基本概念
由于String类描述的字符串内容是个常量不可改变,当需要在Java代码中描述大量类似的字符串时,只能单独申请和存储,此时会造成内存空间的浪费。
为了解决上述问题,可以使用java.lang.StringBuilder类和java.lang.StringBuffer类来描述字符序列可以改变的字符串,如:“ab”。
StringBuffer类是从jdk1.0开始存在,属于线程安全的类,因此效率比较低。
StringBuilder类是从jdk1.5开始存在,属于非线程安全的类,效率比较高。
StringBuilder类常用的构造方法
StringBuilder() 使用无参方式构造对象,容量为16
StringBuilder(int capacity) 根据参数指定的容量来构造对象,容量为参数指定大小
StringBuilder(String str) 根据参数指定的字符串来构造对象,容量为:16+字符串长度
StringBuilder类常用的成员方法
int capacity() 用于返回调用对象的容量
int length() 用于返回字符串的长度,也就是字符的个数
StringBuilder insert(int offset, String str) 插入字符串并返回调用对象的引用,就是自己。
StringBuilder append(String str) 追加字符串
StringBuilder deleteCharAt(int index) 将当前字符串中下标为index位置的单个字符删除
StringBuilder delete(int start,int end) 删除字符串
StringBuilder replace(int start,int end,String str) 替换字符串
StringBuilder reverse() 字符串反转
返回值的设计
StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:returnthis。
由此可见,这些方法在对StringBuilder所封装的字符序列进行改变后又返回了该对象的引用。基于这样设计的目的在于可以连续调用。
Java8之前的日期相关类(熟悉)
System类的概述:Java.lang.System类中提供了一些有用的类字段和方法。
Date类的概述:java.util.Date类主要用于描述特定的瞬间,也就是年月日时分秒,可以精确到毫秒。
SimpleDateFormat类的概述:java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换。
Calendar类的概述:java.util.Calender类主要用于描述特定的瞬间,取代Date类中的过时方法实现全球化。
**
多态的使用场合****(重中之重)**
通过方法的参数传递形成多态;
public static void draw(Shape s){
s.show();
}
draw(new Rect(1, 2, 3, 4));
在方法体中直接使用多态的语法格式
Account acc = new FixedAccount();
通过方法的返回值类型形成多态
Calender getInstance(){
return new GregorianCalendar(zone, aLocale);
}
该类是个抽象类,## 标题因此不能实例化对象,其具体子类针对不同国家的日历系统,其中应用最广泛的
是GregorianCalendar(格里高利历),对应世界上绝大多数国家/地区使用的标准日历系统。
Java8日期类的概述
Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理。
java.time包:该包日期/时间API的基础包。
java.time.chrono包:该包提供对不同日历系统的访问。
java.time.format包:该包能够格式化和解析日期时间对象。
java.time.temporal包:该包包含底层框架和扩展特性。
java.time.zone包:该包支持不同时区以及相关规则的类。
LocalDate类的概述
java.time.LocalDate类主要用于描述年-月-日格式的日期信息,该类不表示时间和时区信息。
LocalTime类的概述
java.time.LocalTime 类主要用于描述时间信息,可以描述时分秒以及纳秒。
LocalDateTime类的概述
java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间,如2007-12-
03T10:15:30。
Instant类的概述
java.time.Instant类主要用于描述瞬间的时间点信息。
DateTimeFormatter类的概述
java.time.format.DateTimeFormatter类主要用于格式化和解析日期。
第十四章 集合类库(上)
集合的概述(重点)
当需要在Java程序中记录单个数据内容时,则声明一个变量。
当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。
当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。
当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。
当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合。
集合的框架结构
Java中集合框架顶层框架是:java.util.Collection集合 和 java.util.Map集合。
其中Collection集合中存取元素的基本单位是:单个元素。
其中Map集合中存取元素的基本单位是:单对元素。
Collection集合(重点)
java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此该接口里定义的方法
既可用于操作List集合,也可用于操作Queue集合和Set集合。
boolean add(E e); 向集合中添加对象
boolean addAll(Collection<? extends E>c) 用于将参数指定集合c中的所有元素添加到当前集合中
boolean contains(Object o); 判断是否包含指定对象
boolean containsAll(Collection<?> c) 判断是否包含参数指定的所有对象
boolean retainAll(Collection<?> c) 保留当前集合中存在且参数集合中存在的所有对象
boolean remove(Object o); 从集合中删除对象
boolean removeAll(Collection<?> c) 从集合中删除参数指定的所有对象
void clear(); 清空集合
int size(); 返回包含对象的个数
boolean isEmpty(); 判断是否为空
boolean equals(Object o) 判断是否相等
int hashCode() 获取当前集合的哈希码值
Object[] toArray() 将集合转换为数组
Iterator iterator() 获取当前集合的迭代器
Iterator接口(重点)
java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素。
java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭代器对象。
boolean hasNext() 判断集合中是否有可以迭代/访问的元素
E next() 用于取出一个元素并指向下一个元素
void remove() 用于删除访问到的最后一个元素
for each循环(重点)
Java5推出了增强型for循环语句,可以应用数组和集合的遍历。
是经典迭代的“简化版”。
语法格式
for(元素类型 变量名 : 数组/集合名称) {
循环体; }
List集合(重中之重)
java.util.List集合是Collection集合的子集合,该集合中允许有重复的元素并且有先后放入次序。
该集合的主要实现类有:ArrayList类、LinkedList类、Stack类、Vector类。
其中ArrayList类的底层是采用动态数组进行数据管理的,支持下标访问,增删元素不方便。
其中LinkedList类的底层是采用双向链表进行数据管理的,访问不方便,增删元素方便。
可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList更适合于随
机访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别。
其中Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做栈(last in first out LIFO)。
其中Vector类的底层是采用动态数组进行数据管理的,该类与ArrayList类相比属于线程安全的类,效率比较低,以后开发中基本不用。
void add(int index, E element) 向集合中指定位置添加元素
boolean addAll(int index, Collection<? extends E> c) 向集合中添加所有元素
E get(int index) 从集合中获取指定位置元素
int indexOf(Object o) 查找参数指定的对象
int lastIndexOf(Object o) 反向查找参数指定的对象
E set(int index, E element) 修改指定位置的元素
E remove(int index) 删除指定位置的元素
List subList(int fromIndex, int toIndex) 用于获取子List
Queue集合(重点)
java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系。
该集合的主要用于描述具有先进先出特征的数据结构,叫做队列(first in first out FIFO)。
该集合的主要实现类是LinkedList类,因为该类在增删方面比较有优势。
boolean offer(E e) 将一个对象添加至队尾,若添加成功则返回true
E poll() 从队首删除并返回一个元素
E peek() 返回队首的元素(但并不删除)
集合类库(下)
泛型机制(熟悉)
通常情况下集合中可以存放不同类型的对象,是因为将所有对象都看做Object类型放入的,因此
从集合中取出元素时也是Object类型,为了表达该元素真实的数据类型,则需要强制类型转换,
而强制类型转换可能会引发类型转换异常。
为了避免上述错误的发生,从Java5开始增加泛型机制,也就是在集合名称的右侧使用<数据类型>
的方式来明确要求该集合中可以存放的元素类型,若放入其它类型的元素则编译报错。
泛型只在编译时期有效,在运行时期不区分是什么类型。
通配符的使用
<?> 无限制通配符:表示我们可以传入任意类型的参数。 <? extends E> 表示类型的上界是E,只能是E或者是E的子类。 <? super E> 表示类型的下界是E,只能是E或者是E的父类。 **Set集合(熟悉)** java.util.Set集合是Collection集合的子集合,与List集合平级。 该集合中元素没有先后放入次序,且不允许重复。 该集合的主要实现类是:HashSet类 和 TreeSet类以及LinkedHashSet类。 其中HashSet类的底层是采用哈希表进行数据管理的。 其中TreeSet类的底层是采用红黑树进行数据管理的。 其中LinkedHashSet类与HashSet类的不同之处在于内部维护了一个双向链表,链表中记录了元 素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。 **Map集合(重点)** java.util.Mapstatic void shuffle(List<?> list) 使用默认的随机源随机置换指定的列表
static <T extends Comparable<? super T>> voidsort(List list) 根据其元素的自然顺序将指定列表按升序排序
static void sort(List list, Comparator<? super T> c) 根据指定比较器指定的顺序对指定列表进行排序
static void swap(List<?> list, int i, int j) 交换指定列表中指定位置的元素