首页 > 其他分享 >异常

异常

时间:2023-09-10 10:00:50浏览次数:20  
标签:java int list System println 异常 out

import java.util.Scanner;

import java.util.TreeMap;

public class Main {

public static void main(String[] args) {

TreeMap cm = new TreeMap();

Scanner sc = new Scanner(System.in);

System.out.println("请输入字符串:");

String s = sc.nextLine();

//字符串转字符数组 char[] chars = s.toCharArray(); //增强for遍历key for (char key : chars) { //如果集合里存在key if (cm.containsKey(key)){ //key存在 Integer value = cm.get(key);//获取到key value++; cm.put(key,value); }else{ //key不存在 cm.put(key,1); } } //遍历 for (Character key : cm.keySet()) { Integer value = cm.get(key); System.out.print(key+"(" + value + ")"); } }

}

一,Properties

1,概述

-Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。

属性列表中的每个键及其对应的值都是一个字符串。

package com.momo.demo;

import com.momo.po.Stu;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Properties;

public class Demo1 {

public static void main(String[] args) throws IOException {

Properties ps = new Properties();

// ps.put(new Stu(),"b");

// ps.setProperty("aa","234");

ps.load(new FileInputStream("C:\Users\67823540\Desktop\keda\day15\src\com\momo\demo\a.txt"));

Object o = ps.get("name");

System.out.println(o);

String name = ps.getProperty("name");

System.out.println(name);

System.out.println(ps);

}

}

2,构造方法

Properties()

创建一个没有默认值的空属性列表。

Properties(Properties defaults)

创建具有指定默认值的空属性列表。

3,成员方法

String getProperty(String key)

使用此属性列表中指定的键搜索属性。

String getProperty(String key, String defaultValue)

使用此属性列表中指定的键搜索属性。

void load(InputStream inStream)

从输入字节流读取属性列表(键和元素对)。

void load(Reader reader)

以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。

void loadFromXML(InputStream in)

将指定输入流中的XML文档表示的所有属性加载到此属性表中。

Object setProperty(String key, String value)

致电 Hashtable方法 put 。

二,Collections

1,概述

-是一个集合操作工具类,成员都是静态的

2,成员变量

static List EMPTY_LIST

空列表(不可变)。

static Map EMPTY_MAP

空地图(immutable)。

static Set EMPTY_SET

空集(不可变)。

package com.momo.demo;

import java.util.Collections;

import java.util.List;

public class Demo2 {

public static void main(String[] args) {

/* List list = Collections.EMPTY_LIST;

System.out.println(list);

System.out.println(list.size());

list.add("123");

System.out.println(list);

System.out.println(list.size());*/

}

}

3,成员方法

static boolean addAll(Collection c, T... elements)

将所有指定的元素添加到指定的集合。

static int binarySearch(List> list, T key)

使用二叉搜索算法搜索指定对象的指定列表。

static int binarySearch(List list, T key, Comparator c)

使用二叉搜索算法搜索指定对象的指定列表。

static void copy(List dest, List src)

将所有元素从一个列表复制到另一个列表中。

static >

T max(Collection coll)

根据其元素的 自然顺序返回给定集合的最大元素。

static T max(Collection coll, Comparator comp)

根据指定的比较器引发的顺序返回给定集合的最大元素。

static >

T min(Collection coll)

根据其元素的 自然顺序返回给定集合的最小元素。

static T min(Collection coll, Comparator comp)

根据指定的比较器引发的顺序返回给定集合的最小元素。

static list, T oldVal, T newVal)

将列表中一个指定值的所有出现替换为另一个。

static void reverse(List list)

反转指定列表中元素的顺序。

static void shuffle(List list)

使用默认的随机源随机排列指定的列表。

static >

void sort(List list)

根据其元素的natural ordering对指定的列表进行排序。

static list, Comparator c)

根据指定的比较器引起的顺序对指定的列表进行排序。

static list) 有很多类似的,把不安全的变安全

返回由指定列表支持的同步(线程安全)列表。

package com.momo.demo;

import com.momo.po.Stu;

import java.util.*;

public class Demo3 {

public static void main(String[] args) {

/* ArrayList list = new ArrayList();

Collections.addAll(list,12,45,5,6,78,90,23,90,9,5,7,32);

*//*for (Integer i : list) {

System.out.println(i);

}

list.add(132);*//* System.out.println(list); Collections.sort(list); System.out.println(list); System.out.println(Collections.binarySearch(list, 9));*/ ArrayList<Stu> list = new ArrayList(); list.add(new Stu("aa",11)); list.add(new Stu("ab",12)); list.add(new Stu("cc",10)); System.out.println(list); System.out.println(Collections.max(list)); System.out.println(Collections.min(list, new Comparator<Stu>() { @Override public int compare(Stu o1, Stu o2) { return o1.getAge()-o2.getAge(); } })); // Stu s = new Stu("ab",12); /* Collections.sort(list); System.out.println(list); System.out.println(Collections.binarySearch(list,s)); System.out.println(list);*/ /* Collections.sort(list, new Comparator<Stu>() { @Override public int compare(Stu o1, Stu o2) { return o1.getAge()-o2.getAge(); } }); System.out.println(list);*/ /* Collections.binarySearch(list,s,new Comparator<Stu>(){ @Override public int compare(Stu o1, Stu o2) { return o2.getAge()-o1.getAge(); } }); System.out.println(list);*/ /* ArrayList<Integer> list = new ArrayList(4); list.add(111); list.add(222); list.add(333); ArrayList<Integer> list2 = new ArrayList(6); list2.add(123); list2.add(1); list2.add(13); list2.add(23); Collections.copy(list2,list); System.out.println(list2); System.out.println(list);*/ ArrayList<Integer> list2 = new ArrayList(6); list2.add(2); list2.add(1); list2.add(3); list2.add(6); // Collections.shuffle(list2); Collections.shuffle(list2,new Random(123)); System.out.println(list2); /* Collections.replaceAll(list2,1,111); System.out.println(list2); Collections.reverse(list); System.out.println(list);*/ List<Integer> list3 = Collections.synchronizedList(list2); System.out.println(list3); }

}

4,相关问题

-Collection和Collections的区别?

5,练习

-模拟斗地主洗牌,发牌,看牌

难点在于如何组装一副牌

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collections;

public class Demo4 { public static void main(String[] args) { //三个玩家 ArrayList card = new ArrayList<>(); String[] size = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; String[] color = {"?","?","?","?"}; for (int i = 0; i < size.length; i++) { for (int j = 0; j < color.length; j++) { card.add(color[j] + size[i]); } } card.add("大王"); card.add("小王"); //System.out.println(card); //洗牌 Collections.shuffle(card); System.out.println(card); //发牌 for (int i = 0; i < card.size(); i++) { if(i>=card.size()-3){ a4.add(card.get(i)); }else if(i%3==0){ a1.add(card.get(i)); }else if(i%3==1){ a2.add(card.get(i)); }else if(i%3==2){ a3.add(card.get(i)); } } System.out.println("发哥:"+a1); System.out.println("高进:"+a2); System.out.println("刀仔:"+a3); System.out.println("底牌:"+a4); } }

三,异常

1,概述

-就是java程序出现的错误(不正常情况)

-异常也是一个具体存在的事物,java也通过类的形式把这些问题进行了描述(封装)

封装成了各种各样的异常对象。(空指针异常,索引越界异常,类型转换异常....)

-Throwable类是Java语言中所有错误和异常的父类。

2,分类

-Thorwable

Error:错误

Error以及Error的子类都表示严重问题,应用程序不应该试图捕获。

这类问题我们无法解决。和程序代码无关。我们不做处理

内存不够,导致溢出

Exception:异常

编译期异常:除了RuntimeException之外的都是编译期异常

代码写错了,必须改代码,不改代码程序无法执行

运行期异常:RuntimeException和RuntimeException的所有子类

大部分情况下都是因为代码写的不够严谨导致的(一般可以通过加判断,优化代码解决)

还有一部分是我们解决不了(权限不够,能力不够,交给有能力的人来解决)

这类问题我们可以处理:

程序出错后还可以继续执行

也可以不处理

将来jvm会执行默认处理机制,但是程序不会继续执行

3,jvm的默认处理机制

-把异常名称,原因以及出现的位置输出到控制台上

-同时结束程序。

/*

Exception in thread "main" java.lang.ArithmeticException: / by zero

at com.momo.demo.Demo6.main(Demo6.java:9)

jvm在执行程序的时候发现违反了数学运算规则,而java把这种(常见)问题都已经

进行过描述了。 当前这个问题,java已经使用ArithmeticException这个类进行描述了

所以当我们在程序中一旦出现了除0运算,jvm就会产生一个该类型的具体对象,

我们没有做处理,就把这个对象抛给了main函数的调用者 jvm

new ArithmeticException("by zero")

最终执行jvm默认处理机制

我们也可以自己处理,程序就可以继续执行

*/

package com.momo.demo;

public class Demo6 {

public static void main(String[] args) {

System.out.println("sdfsdf");

int a = 5;

// int b = 2;

int b = 0;

int c = a/b;

System.out.println(c);

System.out.println("撒旦立刻解放都是垃圾"); }

}

-程序出现问题,我们不处理,最终会执行jvm默认处理机制,程序会结束

这不是我们想要的,我们想要的是即使程序出现问题,也不要影响后面代码的执行

为了能够实现这样的效果,所以我们就需要自己处理异常。

4,异常的两种处理方式

-try...catch...finally

-throws

5,try...catch...finally 完整格式

-try{

可以出现问题的代码

}catch(异常类名 变量名){

针对问题的处理方案

}finally{

释放资源

}

-这个有很多变形格式

try...catch

try...catch...catch...catch

try...catch...catch...catch...finally

try...finally

6,try...catch 处理异常

-一个异常

-多个异常

平级关系

子父关系

-注意:try里面代码越少越好

catch中必须有处理方式,哪怕就是一个输出语句

多个异常

分开处理:一个异常一个try...catch

一起处理:一个try...多个catch

多个异常平级关系,先后无所谓

多个异常存在子父级关系,父类异常必须在最后

能明确异常类型,尽量明确,不要用大的

try里面一旦出现问题,就会立马把问题跑出去,和catch里面进行匹配

一旦有匹配的,就执行对应的处理方式,然后结束try...catch,执行后面代码

package com.momo.demo;

//一个异常

public class Demo6 {

public static void main(String[] args) {

System.out.println("sdfsdf");

int a = 5;

// int b = 2;

int b = 0;

int c = 0; //ctrl+alt+t 快捷键 try { c = a/b; // } catch (Exception e) { //Exception e = new ArithmeticException() } catch (ArithmeticException e) { //ArithmeticException e = new ArithmeticException() System.out.println("不能除0!!!"); } System.out.println(c); System.out.println("撒旦立刻解放都是垃圾"); }

}

package com.momo.demo;

/*

  • 多个异常
  • 分开处理
  • /

public class Demo7 {public static void main(String[] args) {/

int b = 0;

try {

System.out.println(a/b);

} catch (ArithmeticException e) {

System.out.println("不能除0");

}

int[] arr = {1,2,3}; try { System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("索引越界了。。。。"); }

*/

/* int a = 5; int b = 1; int[] arr = {1,2,3}; try { System.out.println(a/b); System.out.println(arr[1]); } catch (ArithmeticException e) { System.out.println("不能除0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("索引越界了。。。。"); }*/ int a = 5; int b = 1; int[] arr = {1,2,3}; try { System.out.println(a/b); System.out.println(arr[3]); } catch (Exception e) { System.out.println("服务器忙。。。"); } System.out.println("后面代码。。。"); }

}

package com.momo.demo;

/*

  • 多个异常
  • 分开处理
  • 一起处理
  • /

public class Demo7 {public static void main(String[] args) {/

int b = 0;

try {

System.out.println(a/b);

} catch (ArithmeticException e) {

System.out.println("不能除0");

}

int[] arr = {1,2,3}; try { System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("索引越界了。。。。"); }

*/

int a = 5; int b = 1; int[] arr = {1,2,3}; try { System.out.println(a/b); System.out.println(arr[3]); System.out.println("其他代码。。。"); } catch (ArithmeticException e) { System.out.println("不能除0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("索引越界了。。。。"); } catch (Exception e) { //Exception e = ? System.out.println("出问题了。。。"); } /* int a = 5; int b = 1; int[] arr = {1,2,3}; try { System.out.println(a/b); System.out.println(arr[3]); } catch (Exception e) { System.out.println("服务器忙。。。"); }*/ System.out.println("后面代码。。。"); }

}

package com.momo.demo;

/*

  • 多个异常的另一种处理方式
  • try{}catch(异常名1|异常名2... 变量名){}
  • 多种异常只能是一种处理方式
  • 多个异常必须是平级的
  • */

public class Demo8 {

public static void main(String[] args) {

int a = 5;

int b = 1;

int[] arr = {1,2,3};

try {

System.out.println(a/b);

System.out.println(arr[3]);

System.out.println("其他代码。。。");

} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {

System.out.println("服务器忙");

}

System.out.println("后面代码。。。");

}

}

7,编译期异常的处理

-必须显示处理,否则编译不通过,程序无法执行

package com.momo.demo;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Demo9 {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String s = sdf.format(new Date()); String ss = "2020-06:06"; try { Date d = sdf.parse(ss); System.out.println(d); } catch (ParseException e) { System.out.println("解析时出错,格式不匹配。。。"); } System.out.println("后面代码"); }

}

8,Throwable中的常用方法(获取异常信息的方法)

String getMessage()

返回此throwable的详细消息字符串。

void printStackTrace()

将此throwable和其追溯打印到标准错误流。

void printStackTrace(PrintStream s)

将此throwable和其追溯打印到指定的打印流。

void printStackTrace(PrintWriter s)

将此throwable和其追溯打印到指定的打印作者。

String toString()

返回此可抛出的简短描述。

package com.momo.demo;

import java.io.FileNotFoundException;

import java.io.PrintStream;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

/*

  • jvm默认处理机制信息:
  • Exception in thread "main" java.text.ParseException: Unparseable date: "2020-06:06" at java.base/java.text.DateFormat.parse(DateFormat.java:399) at com.momo.demo.Demo9.main(Demo9.java:16)

getMessage():

Unparseable date: "2020-06:06"

printStackTrace():

java.text.ParseException: Unparseable date: "2020-06:06"

at java.base/java.text.DateFormat.parse(DateFormat.java:399)

at com.momo.demo.Demo9.main(Demo9.java:20)

toString():

  • java.text.ParseException: Unparseable date: "2020-06:06"

  • */

public class Demo9 {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String ss = "2020-06:06"; try { Date d = sdf.parse(ss); System.out.println(d); } catch (ParseException e) { //ParseException e = new ParseException(); //调用对象的方法,获取异常信息,进行操作 // System.out.println("解析时出错,格式不匹配。。。"); // System.out.println(e.getMessage()); // e.printStackTrace(); // System.out.println(e.toString()); try { e.printStackTrace(new PrintStream("a.txt")); //跳转到 服务器忙 页面。。。 } catch (FileNotFoundException ex) { System.out.println("文件找不到。。。"); } } System.out.println("后面代码");

}

}

9.throws

-定义方法时,需要把可能会出现的问题暴漏出来,让调用者来处理,那么就需要

使用throws 在方法上进行标注

-格式:thorows 异常类名

注意:这个格式必须跟在方法的()后面

到main方法了就不要在抛了,但是后面讲课时我会这样做

-抛编译期异常

调用者必须处理

-抛运行期异常

调用者可以不处理

package com.momo.demo;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Demo10 {

public static void main(String[] args) {

System.out.println("程序开始");

/* try {

fun1();

} catch (ParseException e) {

e.printStackTrace();

}*/

try { fun2(); } catch (ArithmeticException e) { e.printStackTrace(); } System.out.println("程序结束"); } //编译期异常 public static void fun1() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String ss = "2020-06-06"; Date d = sdf.parse(ss); System.out.println(d); } //运行期异常 public static void fun2() throws ArithmeticException{ int a = 5; int b = 1; System.out.println(a/b); }

}

10,throws和throw的区别

-throws 在方法()后面,跟的是异常类名,可以根多个用逗号隔开

表示抛出某异常,由调用者来处理

表示一种可能性,并不一定会发生

-throw 在方法内,跟的是异常对象,只能抛一个对象

表示抛出异常,由方法内部语句处理

表示已经抛出了某种异常

package com.momo.demo;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Demo10 {

public static void main(String[] args) {

System.out.println("程序开始");

/* try {

fun1();

} catch (ParseException e) {

e.printStackTrace();

}*/

/* try { fun2(); } catch (ArithmeticException e) { e.printStackTrace(); }*/ try { fun3(); } catch (Exception e) { System.out.println("aaa"); } System.out.println("程序结束"); } //编译期异常 public static void fun1() throws ParseException,NullPointerException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String ss = "2020-06-06"; Date d = sdf.parse(ss); System.out.println(d); } //运行期异常 public static void fun2() throws ArithmeticException{ int a = 5; int b = 1; System.out.println(a/b); } public static void fun3() { int a = 5; int b = 0; if(b==0){ throw new ArithmeticException(); }else{ System.out.println(a/b); } }

}

11,到底该如何处理异常?

-原则:

能优化代码就优化代码

能try就try,程序可以继续执行

throws,后面代码不执行

12,finally

-特点

被finally控制的语句一定会执行

除了特殊情况:在执行到finally之前,jvm退出了。

System.exit(0);

-作用:释放资源

-问题:

final,finally,finalize的区别?

如果catch语句中有return,请问finally代码还会执行吗?

会,是在return前还是return后执行?

package com.momo.demo;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Scanner;

public class Demo11 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //String ss = "2020-06:06"; String ss = "2020-06-06"; Date d = null; try { System.out.println(4/0); d = sdf.parse(ss); } catch (ParseException | ArithmeticException e) { System.out.println("aaa"); e.printStackTrace(); // System.exit(0); } finally { System.out.println("来了,老弟。。"); sc.close(); } System.out.println(d); } }

package com.momo.demo;

public class Demo12 {

public static void main(String[] args) {

System.out.println(get());

}

public static int get(){ int a = 5; try { System.out.println("1"); System.out.println(a/0); a = 55; } catch (ArithmeticException e) { System.out.println("2"); a = 555; return a; /* * 当代码执行到return a; 这个时候a的值是555,这里的return a 其实是return 555, * 返回值和返回路径已经确定了, * 但是发现后面有finally,所以程序要执行finally中的代码 ,给a这个变量重新赋值 5555 * 完了之后再次回到之前的返回路径 return 555; * */ } finally { System.out.println("3"); a = 5555; return a; /* * 如果在这里也有return,返回的就是 5555 * */ } // return a; }

}

标签:java,int,list,System,println,异常,out
From: https://blog.51cto.com/u_16230968/7423631

相关文章

  • 异常
    title:异常index_img:https://tuchuangs.com/imgs/2023/08/10/6e572ca2666c699d.pngtags:-JavaSEcategories:-JavaSEexcerpt:异常处理异常异常继承体系Error系统级错误(不是异常)Exception程序可能出现的问题(不是错误),是异常的父类RuntimeExceptio......
  • ConcurrentModificationException异常原因和解决方法
    ConcurrentModificationException异常原因和解决方法publicstaticvoidmain(String[]args){List<Integer>list=newArrayList<Integer>(){{add(1);add(2);add(3);}};Iterator<Intege......
  • live555流媒体服务器在解决客户端异常掉线后没有释放相应资源问题的解决方法
    我们在基于live555研发流媒体服务器EasyRTSPServer,经过一年多的商用,已经表现得非常稳定了,今天有个客户反馈,在客户端突然断电后,EasyRTSPServer中有部分资源没有释放。分析问题压力测试都已经做过了,包括7x24小时不间断的频繁断连,都没有问题。突然断电….这个嘛…还没试过。其实这......
  • live555流媒体服务器解决客户端异常掉线后导致服务端通道阻塞的问题
    live555在Linux环境下会因为客户端异常掉线后,偶现导致部分通道不能再被访问的问题,我们描述一下这个问题修复的过程。本来是分析服务端CLOSE_WAIT的问题,在调试的过程中,却又发现了阻塞,认真分析了live555的事件调用流程后,发现只要从客户端收到数据,就会执行GenericMediaServer::Clien......
  • Python中的异常处理机制
    finally语句是Python中异常处理机制的一部分,它总是会被执行,无论是否发生异常。finally语句通常用于释放资源或执行清理操作。下面是一个简单的例子:try:#代码段1passexceptExceptionType:#代码段2passelse:#代码段3passfinally:#代码段4......
  • 3. Oracle数据库异常关闭,导致错误3. Oracle数据库异常关闭,导致错误ERROR: ORA-01034:
    之前由于电脑没电,强制关机,导致Oracle数据库异常关闭,再次启动电脑登陆数据库时,发生以下错误:当我尝试重新启动数据库时,发生错误:经过查阅资料后得知:缺少INITXE.ORA文件,需要从下图目录中复制到上图指定目录中,并重命名为initXE.ora即可(这里initxxx.ora中的xxx要取决于你的SID)再......
  • 异常处理
    异常处理异常:报错语法异常(错误都是SyntaxError)出现SyntaxError:invalidsyntax语法无效if #SyntaxError0=1 #SyntaxError逻辑异常(错误类型)出现ZeroDivisionError:divisionbyzero除零错误等1/0 #ZeroDivisionErrordic={}print(dic['skldfj']) #......
  • RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?
    EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台,可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务,可覆盖全终端平台(电脑、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧校园等场景中有大量落地应用。 有用户反馈,在项目现场启动Ea......
  • 有意思的bug:Input在谷歌浏览器下会出现异常显示问题!
    ❝这篇文章要感谢抖音:程序员小山与BUG!你说是bug吧也算是bug,不是bug吧也不是bug,不影响使用,触发情况也不多,但万一测试提了这个bug还是要解决的[doge],在此记录一下这个有意思的bug!❞Bug说明谷歌浏览器是前置条件还要加上input输入框但输入框要有2个附加条件:type是number以及css的te......
  • drf—过滤、分页、异常
    session回顾写一个登录接口——保存用户登录状态签发阶段:做了三件事情:1、生成一个随机字符串2、django—session表中插入数据3、把随机字符串以cookie形式返回给前端(存在浏览器的cookie中)认证阶段:前端自动携带cookie到后端,sessionid:随机字符串session的流......