(二)java中级1

一、异常处理和I/O操作

1.关于异常处理

try:里面放可能出现错误的代码
catch:如果try中出现错误,就运行catch中的代码(相当于解决了错误);如果try中没有出现错误,就不执行catch
finally:不管try有没有错误,finally中的代码都会被执行

2.throw和throws的区别:

2.1. throws

出现在方法声明上,而throw通常都出现在方法体内。

2.2. throws

表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。

3.异常的分类

• 错误 :不要求强制捕捉
• 运行时异常:不要求强制捕捉
• 可查异常:要求使用try catch强制捕捉

4.Throwable类

Throwable是类,Exception和Error都继承了该类
所以在捕捉的时候,也可以使用Throwable进行捕捉
如图: 异常分Error和Exception
Exception里又分运行时异常和可查异常。
在这里插入图片描述

5.FileStream和FileReader

5.1Filetream为了能够正确的读取中文内容

• .必须了解文本是以哪种编码方式保存字符的
• 使用字节流读取了文本后,再使用对应的编码方式去识别这些数字,得到正确的字符
比如:一个文件中的内容是字符中,编码方式是GBK,那么读出来的数据一定是D6D0。
再使用GBK编码方式识别D6D0,就能正确的得到字符中
注: 在GBK的棋盘上找到的中字后,JVM会自动找到中在UNICODE这个棋盘上对应的数字,并且以UNICODE上的数字保存在内存中。

6.使用缓存流读取数据

6.1缓存流

(BufferedReader,PrintWriter)缓存流必须建立在一个存在的流的基础上(字符流)
如代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
public class TestStream {
 
    public static void main(String[] args) {
        // 准备文件test.txt其中的内容是
        //this is the first line
        // and this is the second line
        // hahaha,this is the third line
        File f = new File("d:/test.txt");
        // 创建文件字符流
        // 缓存流必须建立在一个存在的流的基础上
        try (
                        FileReader fr = new FileReader(f); 
                        BufferedReader br = new BufferedReader(fr);
                ) 
        {
            while (true) {
                // 一次读一行
                String line = br.readLine();
                if (null == line)
                    break;
                System.out.println(line);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

6.2flush

有的时候,需要立即把数据写入到硬盘,而不是等缓存满了才写出去。 这时候就需要用到flush

7.梳理图

在这里插入图片描述

二、容器和泛型

1.集合框架与数组的区别

1.1数组的局限性

如果要存放多个对象,可以使用数组,但是数组有局限性
比如 声明长度是10的数组,不用的数组就浪费了超过10的个数,又放不下。

1.2引入容器

为了解决数组的局限性,引入容器类的概念。 最常见的容器类就是ArrayList
容器的容量"capacity"会随着对象的增加,自动增长,只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题

2.容器的常用方法

在这里插入图片描述

3.泛型

不指定泛型的容器ArryList,可以存放任何类型的元素
ArrayList heros = new ArrayList();
List heros = new ArrayList();(List为ArrayList接口)
指定了泛型的容器,只能存放指定类型的元素以及其子类
List genericheros = new ArrayList();
List genericheros2 = new ArrayList<>();

4.遍历容器

• 使用for循环
• 使用增强型for循环
• 使用迭代器
使用迭代器遍历代码:

List<Hero> heros = new ArrayList<Hero>(); 
        //放5个Hero进入容器
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero name " +i));
        }
Iterator<Hero> it= heros.iterator();
        //从最开始的位置判断"下一个"位置是否有数据
        //如果有就通过next取出来,并且把指针向下移动
        //直到"下一个"位置没有数据
        while(it.hasNext()){
            Hero h = it.next();
            System.out.println(h);
        }

5.集合框架还有

5.1

• LinkedList是一个双向链表结构的list
除了实现了List接口外,LinkedList还实现了双向链表结构Deque
LinkedList ll =new LinkedList();
• LinkedList 除了实现了List和Deque外,还实现了Queue接口(队列)。
Queue q= new LinkedList();

5.2二叉树

public class Node {
// 左子节点
public Node leftNode;
// 右子节点
public Node rightNode;
// 值
public Object value;
}

5.3HashMap键值对

HashMap<String,String> dictionary = new HashMap<>();

5.4HashSet

Set中的元素,不能重复
HashSet names = new HashSet();
//第二次插入同样的数据,是插不进去的,容器中只会保留一个names.add(“gareen”);

5.4.1几种不同的Set

HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序

5.5Collection

• Collection是 Set List Queue和 Deque的接口
关系汇总:
在这里插入图片描述
• Collections是一个类,容器的工具类,就如同Arrays是数组的工具类

6.比较器

Comparator:如果一个类中存在多个可比较的属性,直接用
Collections.sort也无法确定所以要指定到底按照哪种属性进行排序,这里就需要提供一个Comparator给定如何进行两个对象之间的大小比较
Comparable:使类实现Comparable接口,在类里提供比较算法,Collections.sort就有足够的信息进行排序了,也无需额外提供比较器Comparator

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值