集合的简单运用以及流的异常

首先我还是想聊一聊集合这个东西。
集合的嵌套可以用来做很多事情,我在写集合嵌套时老是无法有一个完整的结构思路,不知道是不是搬的少的缘故,套路见的有点少吗?HashMap的键值对,TreeSet的有序性等,搞起来有点无从下手的缘故,总之无法将记住的变成自己的,还是得多练啊!

public class MyTest {
    public static void main(String[] args) {
        //斗地主排序版
        HashMap<Integer, String> pokerBox = new HashMap<>();
        //创建一个索引集合
        ArrayList<Integer> indexs = new ArrayList<>();
        int index = 0;
        //生成牌
        String[] colors = {"♠", "♥", "♦", "♣"};
        //数字
        String[] nums = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        for (String num : nums) {
            for (String color : colors) {
                pokerBox.put(index, num.concat(color));
                indexs.add(index);
                index++;
            }
        }
        //手动添加大小王
        pokerBox.put(index, "★");
        indexs.add(index);
        index++;
        pokerBox.put(index, "☆");
        indexs.add(index);
        //洗牌 洗索引集合
        Collections.shuffle(indexs);
        Collections.shuffle(indexs);
        Collections.shuffle(indexs);
        //发牌
        TreeSet<Integer> 11 = new TreeSet<Integer>();
        TreeSet<Integer> 22 = new TreeSet<Integer>();
        TreeSet<Integer> 33 = new TreeSet<Integer>();
        TreeSet<Integer> 44= new TreeSet<Integer>();
        for (int i = 0; i < pokerBox.size(); i++) {
            //留底牌
            if (i >= indexs.size() - 3) {
                底牌.add(indexs.get(i));
            } else if (i % 3 == 0) {
                11.add(indexs.get(i));
            } else if (i % 3 == 1) {
                22.add(indexs.get(i));
            } else {
                33.add(indexs.get(i));
            }
        }

        //看牌
        lookPoker("11", 11, pokerBox);
        lookPoker("22", 22, pokerBox);
        lookPoker("33", 33, pokerBox);
        lookPoker("底牌", 底牌, pokerBox);
        //System.out.println(pokerBox);
        //System.out.println(indexs);
    }

    private static void lookPoker(String name, TreeSet<Integer> set, HashMap<Integer, String> pokerBox) {
        System.out.println(name);
        for (Integer key : set) {
            String s = pokerBox.get(key);
            System.out.print(s + "\t");
        }
        System.out.println();
    }
}

如上就是集合的嵌套例子,还是多练为主吧。

Io流的异常处理

IO流的学习首先就是File类的学习了,因为IO中file的上传和下载我认为很重要?。
然后接下来就是在这个过程中的异常处理了。

异常的概述和分类

A:异常的概述: 异常就是Java程序在运行过程中出现的错误。
B:异常的继承体系
异常的基类: Throwable
严重问题: Error 不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出
非严重问题: Exception
编译时异常: 非RuntimeException
运行时异常: RuntimeException
运行期异常:可以处理,也可以不处理
不处理,那就交由JVM去处理,JVM的默认处理方式,打印异常,信息,停掉JVM
try 里面一般放有可能 会出现问题的代码
A:异常处理的两种方式
a:try…catch…finally
b:throws
B:try…catch处理异常的基本格式
catch里面是try里面出现问题时才去执行的,

try	{
	可能出现问题的代码 ;
}catch(异常名 变量名){
	针对问题的处理 ;
}finally{
	释放资源;
}

注意事项:
a: try中的代码越少越好
b: catch中要做处理,哪怕是一条输出语句也可以.(不能将异常信息隐藏)
异常的话能处理就处理,有的时候抛出没法解决问题。

编译期异常

编译期异常只的是非RuntimeException异常,这个当然是需要必须解决的。
一般如下将出现的错误打印出来,那么估计有人会问,我不处理异常虚拟机也会自动抛出异常啊,但是如果你将虚拟机抛出异常它会停止程序并打印出异常,而你处理的话程序会运行下去?,当然你也可以对异常做其他处理,但现在的话就只是这样就可以了。

e.printStackTrace();
            System.out.println(e.toString());
             System.out.println(e.getMessage());

就像下面的异常一样

 while (true) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个整数");
            try {
                int num = scanner.nextInt();
                break;
            } catch (InputMismatchException e) {
                System.out.println("输入的类型不正确,请重写输入");
            }

Throw和Throws的区别

throw 和 throws 的区别
throw 他是在方法内部进行异常的抛出
throws 是在方法声明上进行异常的抛出
throws抛出的是一些,异常的类名,可以抛出多个异常
throw 抛出的是一个异常对象
throws 是抛出多种异常的肯能性
throw 一旦抛出了异常,那么肯定是他遇到了这种异常
就像下面一样在一个方法中

   private static void show() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个整数");
        int a = scanner.nextInt();
        System.out.println("请输入第二个整数");
        int b = scanner.nextInt();
        if(b==0){
            throw new ArithmeticException("你傻啊,除数为0了");
        }else{
            System.out.println(a/b);
        }

final,finally和finalize的区别
final 可以修饰变量,类,方法
finally 用在异常处理语句中,不管try里面有没有遇到异常,那么finally里面的语句,都会执行。如果catch里面有return语句,finally的代码还会执行 ,并且是在return前执行。
finalize Obejct类中的一个方法,用来回收垃圾

自定义的异常

除了Java中自带的异常之外,还有些我们自己定义的异常。这时就需要将我们的异常纳入系统的异常体系中去
如下,即继承运行异常

public class SocreExcetion extends RuntimeException{
    public SocreExcetion(String msg) {
        super(msg);
    }
}


   Scanner scanner = new Scanner(System.in);
        System.out.println("请输入");
        int i = scanner.nextInt();
        if (i>100||i<0){
            throw new SocreExcetion("成绩不合法");
        }else {
            System.out.println(i);
        }


   //ctrl+alt+T 可以捕获异常代码
        try {
            System.out.println(1 / 0);
        } catch (Exception e) {
            e.printStackTrace();
        }


        //编译期异常:按alt+enter 纠错键,选择抛出还是try catch
        try {
            new SimpleDateFormat("yyyy-MM-dd").parse("2019-10-10");
        } catch (ParseException e) {
            e.printStackTrace()    				

首先如果编译报错则通过打印的错误找到位置,在通过ctrl+alt+T 捕获并处理.

如果有了继承关系,我们在重写父类方法时,注意异常的语法
1.父类方法有抛出异常,子类在重写父类方法时,可以抛出和父类一样的异常,也可以不抛出异常
2.父类方法没有抛出异常,子类在重写父类方法时,就不能抛出异常
3,子类不能抛出,父类没有抛出的异常
4.子类不能抛出的异常,不能比父类的大,只能跟父类的一样,或者比父类小
当然此限定在编译期异常,运行期异常会抛给虚拟机.

File类

A:File类的概述
文件和目录路径名的抽象表示形式
这个File类可以用来表示文件,也可以用来表示目录
B:构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

方法

 public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了 注意这个方法只能创建单层目录 如果创建多层目录得一层一层创建
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 可以创建多层目录 当然也可以创建单层目录

上面两个方法第一次创建成功返回ture,第二次重复创建返回false。
当然delete这个方法也一样,第一次删除成功返回ture,第二次就是false了,并且它只能删除空文件夹,有内容的需写程序实现。(被该命令删除的文件或命令在回收站找不到)
注意renameTo(file1);这个方法,如果我们传入的这个文件对象,跟源文件在同一个目录下,是重命名
如果如果我们传入的这个文件对象,跟源文件不在同一个目录下,剪切并重命名。

有关判断的方法

判断是否是一个文件
boolean file1 = file.isFile();
判断是否是一个目录
boolean directory = file.isDirectory();
判断文件或目录是否存在
boolean exists = file1.exists();

    boolean b = file.canRead();//判断文件是否可读
    boolean b1 = file.canWrite();//判断文件是否可写入
    boolean hidden = file.isHidden();//判断文件是否隐藏

获取功能

public String getAbsolutePath(): 获取绝对路径(说通俗点就是在你计算机的CDEF盘中存放的路径)
public String getPath(): 获取相对路径(相对来说,它是抽象的,一般在你的虚拟机工程里)
public String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
public File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节
public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节
public String getName(): 获取名称
public long length(): 获取长度。字节数
public long lastModified(): 获取最后一次的修改时间,毫秒值
public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组
String absolutePath = file.getAbsolutePath(); 获取绝对路径的字符串表现形式
File file1 = file.getAbsoluteFile(); 获取绝对路径的Flie表现形式,这种形式更加灵活
忘记回顾(日期格式转化)Date date = new Date(time);
SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String format1 = format.format(date);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值