JavaSe基础9

第九章 异常

1、Error: 不可处理,只能采用规避的方式

2、Exception: 可处理

1 NullPointerException:空指针,引用数据类型没有初始化

2 ArrayIndexOutOfBoundsException:数组越界,数组下标超出数组索引范围

3 StringIndexOutOfBoundsException:同ArrayIndexOutOfBoundsException

4 ClasssCastException:类型转换异常,一般是类型不一致所导致的

5 ArithmeticException:除数为0导致

6 NumberFormatException:字符串解析成数字,如果字符串内容不是数字会导致

3、处理Exception方式

try{
   ...
}catch(异常){
    ...
}catch(异常){
    ...
}...
finally{
    //try...catch...执行完成后总会执行里面的内容
}

1 如果try里面代码有Exception异常,并且catch捕获这个异常,异常代码后半部分不会执行,会直接跳转到catch代码块

2 如果try里面代码有Exception异常,但是catch里面没有声明,程序会崩溃

3 如果try里面代码没有Exception异常,catch代码不会执行

4 try…catch…以外的代码正常执行

5 try…catch…执行完成后总会执行里面的内容

6 在方法里如果finally,try,catch都有return那么方法会执行finaly的return

7 写多个catchd的时候要注意父类异常写到之类异常的后面

8 throws: 用在方法上,可以将方法中的异常抛出到使用者,RuntimeException以上的异常会强制使用者处理

4、throw:用来手动抛出异常,还是需要方法使用者处理异常否则程序会崩溃

语法:new 异常类名(String):参数:提示的信息

1 如果throw的异常是RuntimeException或RuntimeException的子类是不需要throws的,否则需要throws

2 自定义异常:类只要继承了其他异常就是异常类,继承Exception类的异常是必须要处理的

5、Optional:

1 Optional.of(类判空的对象):没用的

2 Optional.ofNullable(类判空的对象):初始化Optional

第十章 集合

1、相同点:都是容器

不同点:1 数组长度不可变,集合长度可变

2 数组可以存任意类型,集合只能存引用数据类型

3 集合API比数组多

2、Collection:本身是接口,创建集合只能newCollection的子类

1 Collection使用时需要指定泛型,如果不指定默认为Object类型

2 add(泛型); 添加元素

3 size(); 获取集合中元素数量

4 contains(Object); 判断集合内是否有该元素

5 isEmpty(); 判断集合内是否有元素

6 clear(); 清空集合内的所有元素

7 remove(Object); 删除指定元素

3、集合遍历

1 获取迭代器Iterator

2 使用for增强

4、List集合:有序的,可重复

添加方式:add(int,泛型类型):往指定索引添加数据

获取方式:get(int):获取指定索引位的值

移除方式:remove(int)。如果调用这个方法需要将数字强转成Integer

是否包含某个元素:contains(Object);

1 ArrayList: 数组结构,线程不安全

2 LinkedList: 链表结构,线程不安全

3 Vector: 线程安全

5、栈结构:先进后出

6、队列结构:先进先出,后进后出

7、数组:查询快,增删慢

8、链表:增删快,查询慢

9、集合的remove(Object)方法,使用时需要对应的引用数据类型重写equals方法

10、泛型:

1 在类里声明泛型格式:类型,T代表任意引用数据类型

2 在类里声明多个泛型格式:类型<T,E,…>,T,E代表任意引用数据类型

3 在方法上声明泛型格式:权限修饰符 返回值(可以使用泛型) 方法名(泛型 变量名)

4 在接口上声明泛型类型格式:类名,类实现接口时可以将接口·的泛型指定为类上的泛型或者指定成固定的泛型

5 类型通配符:?只能用在指定泛型时

6 设置边界的格式:<? extend 类型名>,只能使用指定类型名或其子类

<? super 类型名>,只能使用指定类型名或其父类

11、Set集合:本身是集合,是Collection子类

底层结构:数组+链表+红黑树

1 不可重复,无序的没有索引

2 实现类

1 HashSet

2 TreeSet:不可重复,从添加元素角度是无序的,从排序角度是有序的

1 红黑树

2 存自定义类型时,自定义的类需要实现comparable接口,默认从小到大排序

3 自定义比较器:在TreeSet的构造方法中实现Comparator接口

3 Set存储自定义类型时需要重写hashcode和equals方法,重写时要保证两个方法重写的属性一致

4 遍历只能用迭代器或者for增强

12、二叉树:每个节点最多有两个分支,最顶端的结点叫做根节点,最末端的结点(没有分支的结点)叫做叶子结点,二叉树最大层数就是它的高度。

13、二叉查找树:

1 小的值存到左侧,大的值存到右侧,相同的值不存

14、平衡二叉树:维持节点的左子树和右子树的高度差小于等于1

1 左旋时,如果新的支点有左右子树,旋转时将左子树断开放到老支点的右侧

2 右旋时,如果新的支点有左右子树,旋转时将右子树断开放到老支点的左侧

注:字符串不可变

15、Map集合

key重复时,值会被覆盖,无序的

1 put(key,value):存值

2 get(key):通过key获取value

3 keySet()获取Map集合里面所有key的Set集合

4 entrySet():获取map集合所有键值对类(Entry)的Set集合,Entry: getkey():获取key,getvalue():获取value

两种方式遍历:

1:
Set<String> strings = map.keySet();
for (String str:strings){
    System.out.println("key: "+str+"  values: "+map.get(str));
}
2:
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for (Map.Entry<String,String> entry: entrySet){
    System.out.println(entry.getKey()+","+entry.getValue());
}

5 remove(key):通过key删除Map集合指定数据

6 clear():清空集合

7 isEmpyt():判断Map集合是否为空的

8 size():获取map中数据数量

9 containsKey(key):判断Map集合是否包含参数

10 containsValue(value):判断Map集合是否包含参数

16、Collections:

1 addAll(Collection,…):向集合里添加元素

2 sort(Collection):对集合进行排序

3 binarySearch(Collection,object):查找元素

4 shuffle(Collection):将集合顺序打乱

5 reverse(Collection):将集合反转

6 可变参数:

方法参数定义时在类型后面加…

第十一章

1、Stream流

1 获取Stream流

1 Collection子类的stream()

2 stream.of()

2 中间运算

1 filter(Predicate):筛选,true通过,false不通过

2 limit(int):截取指定数量

3 skip(int):跳过指定的数量

4 distinct():去重

5 Stream.concat(stream1,stream2):合并流

6 map(Function):对数据进行自定义修改

3 终结

1 forEach(Consumer):遍历

2 count():获取数据数量

4 Stream流收束:

1 collect(Collectors.toList())

2 collect(Collectors.toSet())

3 collect(Collectors.toMap(Function,Function))

/*
	collect(Collectors.toMap(Function,Function))举例
*/
Map<String,String> studentMap = conact.collect(Collectors.toMap(student -> student.name,student -> String.valueOf(student.age)));
        System.out.println(studentMap);

2、File:用来映射文件,文件夹

1 构造:1 new File(路径全名)

2 new File(父路径,文件名)

2 绝对路径:带盘符的路径

相对路径:不带盘符,默认工程所在目录为根目录

3 API:

1 length():获取文件大小,单位B

2 getName():获取文件名

3 getPath():获取File创建时的路径

4 getAbsolutePath():获取文件绝对路径

5 isFile():判断是否为文件,true是,false不是

6 isDirectory():判断是否为文件夹

7 exists():判断File是否存在于工程

8 lastModified():获取文件最后修改时间

//示例
Date date = new Date(file.lastModified());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));

9 file = new File(“a”); createNewFile()创建文件,父路径必须存在

10 file.mkdir():创建文件夹,父路径必须存在

//原有文件路径
String name = "22-12-29.iml";
File file = new File(name);
//创建文件名
file = new File("文件名");
//创建文件
file = new File(file,"0101.txt");
//创建文件夹
boolean mkdir = file.mkdir();
//创建文件夹的判断
System.out.println(mkdir?"创建成功":"创建失败");
//创建文件的判断
try {
    boolean newFile = file.createNewFile();
    System.out.println(newFile?"创建成功":"创建失败");
}catch (IOException e){
    e.printStackTrace();
}

11 mkdirs():同时创建多个文件

12 delete():删除文件或目录

13 listFiles():获取文件夹内所有文件数组

3、IO流:

1 字节流(节点流):以字节方式进行传输

1 字节读取流(InputStream):将磁盘数据读取到内存中

FileInputStream

1 read():读取一字节,当文件结尾时返回-1

2 close():关闭流

3 read(bytes):将数据读取到字符数组,当文件结尾时返回-1,否则返回读取的长度。

//1.
String str = "F:\\file\\ProcessFile\\SHUHDIAN\\abc.txt";
		FileInputStream fis = null;
        try {
            fis = new FileInputStream(str);
            int b = 0;
            StringBuilder stringBuilder = new StringBuilder();
            while (((b = fis.read()) != -1)) {
                stringBuilder.append(String.valueOf((char)b));
            }
            System.out.println(stringBuilder);
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
                try {
                    if (fis!=null) {
                        fis.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
//2.
String str = "F:\\file\\ProcessFile\\SHUHDIAN\\abc.txt";
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(str);
            byte[] bytes = new byte[8];
            int length;
            StringBuilder stringBuilder = new StringBuilder();

            while ((length = fis.read(bytes))!=-1){
                System.out.println(Arrays.toString(bytes));
                stringBuilder.append(new String(bytes,0,length));
            }
            System.out.println(stringBuilder);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
                try {
                    if (fis!=null) {
                        fis.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

2 字节写入流(OutputStream):将内存数据写入到磁盘中

FileOutputStream

​ *** new FileOutputStream(path,append):path: 文件路径 append: 是否为追加,true为追加,false为不追加,默认为false**

1 write():将数据写入指定文件中

2 flush():清空缓冲区,在所有write操作之后调用

3 close():关闭流

String str = "F:\\file\\ProcessFile\\SHUHDIAN\\abc.txt";
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(str,true/*如果不填默认false,覆盖原文件,true为追加文件内容*/);
            fileOutputStream.write(",你好".getBytes(StandardCharsets.UTF_8));
            fileOutputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

3 字节缓冲流(处理流):

BufferedInputStream

BufferedOutputStream

2 字符流:只能用来处理中文等多字节表示的文本

1 字符读取流(Reader): FileReader

2 字符写入流(Writer): FileWriter

3 BufferedReader:读取

String str = "F:\\shujujiegou\\a.txt";
        BufferedReader bufferedReader = null;
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(str);
            bufferedReader = new BufferedReader(fileReader);
            String line = null;
            while ((line = bufferedReader.readLine())!=null){
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bufferedReader!=null){
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

4 BufferWriter: 写入

String str = "F:\\shujujiegou\\a.txt";
        BufferedWriter bw = null;
        FileWriter fw = null;
        try {
            fw = new FileWriter(str,true);
            bw = new BufferedWriter(fw);
            bw.write("以上都是假的");
            bw.newLine();
            bw.write("其实我上一句是假的");
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

编码API:

  • Charset.forName(String):指定编码集

  • ASCLL: 1个字节表示,一个符号

  • GBK: 2个字节表示一个汉字

  • Unicode: UTF-8: 3~4个字节表示一个汉字

换行:windows: \r\n

linux: \n

3 对象流

1 对象写入流:写入的对象必须实现Serializable接口

2 ObjectOutputStream:

writeObject(Object):将Object写入到文件

3 ObjectInputStream:

readObject():将文件读取成对象

4 将对象写成文件的过程叫序列化;

将文件读取成对象的过程叫反序列化

5 serialVersionUID:防止因为类更改导致序列化失败

序列化后文件中的内容可能是乱码,其乱码为计算机可识别的语言,属于正常现象。

4 Properties:key和value只能是String类型,否则会报错

可以存取指定格式的文本文件

1 key : value

2 key = value

1 setProperty(String,String):数据存储

2 getProperty(String):通过Key获取value

3 store(fw,null):使用字符流读取键值对

4 load(Reader):将指定文件读取为Properties对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值