本帖最后由 小石姐姐 于 2018-4-20 11:12 编辑
JavaSE 5-8天笔记
第5天API第1章 Object类 & System类1.1 Object类1.1.1 概述Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。 在Object类众多方法中,我们先学习equals方法与toString方法,其他方法后面课程中会陆续学到。 1.1.2 获取字节码对象的方式1.通过Object类的getClass()方法获取 2.通过类名调用属性class来获取 3.通过Class类的静态方法forName()来获取 1.1.3 toString()方法由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 1.1.4 equals()方法 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。 在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。 1.2 System类 System 类包含一些有用的类字段和方法。它不能被实例化。 1.2.1 成员方法static void arraycopy(Objectsrc, int srcPos, Object dest, int destPos, int length) : 从src源数组的srcPos索引开始,复制length个元素 从destPost位置开始将这些元素放至到dest数组中 static longcurrentTimeMillis() 返回以毫秒为单位的当前时间 static void 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(long time) 2.2 DateFormat类 & SimpleDateFormat DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。 我们通过这个类可以帮我们完成日期和文本之间的转换。 继续阅读API,DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。 2.2.1 DateFormat&SimpleDateFormat的常用方法要格式化一个当前语言环境下的日期也就是日期 -> 文本),要通过下面的方法来完成。DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象。 A:SimpleDateFormat构造方法 2.3 Calendar类2.3.1 Calendar类概述Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。 Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下: Calendar类静态方法 Calendar c = Calendar.getInstance(); //返回当前时间 2.3.2 Calendar类常用方法第3章 包装类&正则表达式3.1 包装类在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的。而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等。那么,想实现字符串与基本数据之间转换怎么办呢? Java中提供了相应的对象来解决该问题,基本数据类型对象包装类:java将基本数据类型值封装成了对象。封装成对象有什么好处?可以提供更多的操作基本数值的功能。 3.2 包装类的常用方法3.3 包装类的自动装箱与拆箱在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。 比如: 基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。 相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。 自动拆箱:对象转成基本数值 自动装箱:基本数值转成对象 3.4 正则表达式3.4.1 正则表达式概述正则表达式是专门解决字符串规则匹配的工具。 正则表达式也是一个字符串,用来定义匹配规则。 参照帮助文档,在Pattern类中有简单的规则定义,可以结合字符串类的方法使用。 3.4.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] 例如:匹配规则为"\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之间
第6天 集合第1章 集合&迭代器1.1 集合体系结构1.2Collection中常用功能boolean add (Object e):向集合中添加元素 void clear():清空集合中所有元素 boolean contains(Object o):判断集合中是否包含某个元素 boolean isEmpty():判断集合中元素是否为空 boolean remove(Object o ):根据元素内容来删除某个元素 int size():获取集合的长度 Object[] toArray():能够将集合转换成数组并把集合中的元素储存到数组中 1.3迭代器Iterator接口提供了遍历集合的安全方式 boolean hasNext():判断是否有元素可以获取 E next():返回下一个元素 package com.itheima_01;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*定义一个ArrayList集合,存储字符串
存储 Hello,world,java 三个字符串
分别使用普通的方式和迭代器的方式遍历集合*/
public class Practice02 {
public static void main(String[] args) {
Collection c = new ArrayList<>();
c.add("Hello");
c.add("world");
c.add("java");
Object[] arr = c.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr);
}
Iterator it = c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}1.4并发修改异常ConcurrentModificationException 迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常. package com.itheima_01;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/*创建字符串集合, 存入字符串”hello”, “world”, “java”
分别使用普通的方式和迭代器的方式判断集合中是否包含元素java,如果有则添加元素android
查看哪种操作会出错*/
public class Practice03 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
/*Object[] arr = list.toArray();
for (int i = 0; i < arr.length; i++) {
String value = (String)arr;
if(value.equals("java")){
list.add("android");
}
}*/
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){
String value = (String)listIterator.next();
if(value.equals("java")){
listIterator.add("android");
}
}
System.out.println(list);
}
}第2章 泛型&增强for2.1泛型泛型:是一种广泛的类型,把明确数据类型的工作的工作提前到了编译时期,借鉴了数组的特点. 泛型好处: 避免了类型转换的问题 可以减少黄色警示线 可以简化我们代码的书写
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*新建一个Student类
属性:姓名,年龄
创建两个学生对象属性分别为:
”zhangsan”,18 和”lisi”,19
将这两个学生对象存入ArrayList集合
利用迭代器遍历集合,打印出每个学生的姓名*/
public class Practice04 {
public static void main(String[] args) {
Collection<Student> c = new ArrayList<Student>();
Student s1 = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
c.add(s1);
c.add(s2);
Iterator<Student> it = c.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println(s.getName());
}
}
}
class Student{
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}2.2增强forforeach:增强for循环,一般用于遍历集合或者数组 格式:
for(元素的数据类型 变量 : Collection集合or数组){
可以直接使用变量
}
package com.itheima_01;
import java.util.ArrayList;
import java.util.Collection;
/*新建一个Student类
属性:姓名,年龄
创建两个学生对象属性分别为:
”zhangsan”,18 和”lisi”,19
将这两个学生对象存入ArrayList集合
利用foreach遍历集合,打印出每个学生的姓名*/
public class Practice05 {
public static void main(String[] args) {
Collection<Student> c = new ArrayList<Student>();
Student s1 = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
c.add(s1);
c.add(s2);
for(Student s:c){
System.out.println(s.getName());
}
}
}第3章 常见数据结构3.1数组数组,采用该结构的集合,对元素的存取有如下的特点: 查找元素快:通过索引,可以快速访问指定位置的元素 增删元素慢 ,每次添加元素需要移动大量元素或这创建新的数组 3.2链表链表,采用该结构的集合,对元素的存取有如下的特点: A:多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。 B:查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素 C:增删元素快: 增加元素:只需要修改连接下个元素的地址即可。 删除元素:只需要修改连接下个元素的地址即可。 第7天 集合第1章 HashSet集合1.1 Set集合的特点:A.无序(存储和读取的顺序有可能不一样) B.不允许重复(要求元素唯一) C.没有索引 1.2HashSet 使用&唯一性原理
package com.ithema_01;
import java.util.HashSet;
/*定义一个Student类,里面包含name和age属性
创建三个学生对象,为学生的姓名和年龄赋值, 其中2个学生的属性值是相同的
然后将这三个学生对象放入HashSet集合
遍历HashSet集合,打印每个学生的姓名和年龄, 查看是否去重*/
public class Practice01 {
public static void main(String[] args) {
Student s1 = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
Student s3 = new Student("lisi",19);
HashSet<Student> hs = new HashSet<Student>();
hs.add(s1);
hs.add(s2);
hs.add(s3);
for(Student student:hs){
System.out.println(student);
}
}
}
class Student{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}第8天第1章 异常的产生&异常的处理1.1 异常概述1.2 异常处理1.2.2 try...catch方式处理异常
try {
//需要被检测的语句。
}
catch(异常类 变量) { //参数。
//异常的处理语句。
}
finally {
//一定会被执行的语句。
}try...catch的执行顺序: 首先执行try语句 如果发现异常,异常下面的代码不再执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束. 如果没有发现异常,try语句执行结束后,try...catch直接结束,不再执行catch语句. 1.2.3 throws方式处理异常1.2.4 多异常处理如何处理多个异常: A:可以使用多个try...catch语句. B:使用一个try和多个catch. {多个catch之间的顺序: 多个catch之间可以有子父类; 平级之间没有顺序关系; 如果有子父类,父类异常必须放在后面} 第2章 Throwable常用方法&自定义异常String getMessage() 返回此 throwable 的详细消息字符串 String toString() 返回此 throwable 的简短描述 void printStackTrace() 打印异常的堆栈的跟踪信息 第3章 递归递归:把大问题拆成很多小问题,然后再把小问题拆成更多小问题 java中:方法自己调用自己 递归注意事项: A:递归一定要有出口 B:递归次数不宜过多
|