概述
文章目录
- 集合应用-----------斗地主洗牌发牌
- 代码如下:
- 异常
- 异常处理的方法
- 多个异常的处理
- 编译时期异常,运行时期异常
- Throwable中的一些方法
- Throws和Throw的区别
- 异常的注意事项
- 异常捕获的标准格式
- 面试题
- 自定义异常
- 多线程
集合应用-----------斗地主洗牌发牌
分析: 用HashMap<Integer,String>集合作为牌盒,key键存储牌的编号,value值存储牌
用ArrayList集合存储牌的编号,用作后面的发牌
定义String[] 存储牌的点数{“3”,“4”,“5”,“6”…“A”,“2”};
定义String[] 存储牌的花色{“♠”,“♥”,“♣”,“♦”};
定义int index=0,用作编号的存储
通过增强for循环嵌套,完成装除了大小王牌的操作,同时ArrayList集合中装入对应的编号
再添加大小王和对应的编号
//洗牌
利用Collections集合工具类中的public static void shuffle(List<?> list)随机置换ArrayList中牌的编码
创建四个TreeSet集合,分别代表玩家1,玩家2,玩家3,底牌
利用for循环语句将牌分别发给上面四个
编写看牌方法,将玩家的牌和底牌打印出来
代码如下:
package poker2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
import javax.swing.LookAndFeel;
public class Poker {
public static void main(String[] args) {
// TODO Auto-generated method stub
//牌盒 k存储编号 v存储牌
HashMap<Integer,String> hm=new HashMap<Integer,String>();
//存储编号
ArrayList<Integer> array=new ArrayList<Integer>();
//点数和花色数组
String[] num= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] colors= {"♠","♥","♣","♦"};
int index=0;
//装牌,装编号
for (String n : num) {
for (String c : colors) {
String str=c.concat(n);
hm.put(index, str);
array.add(index);
index++;
}
}
hm.put(52, "小王");
hm.put(53, "大王");
array.add(52);
array.add(53);
//洗牌
Collections.shuffle(array);
//发牌
TreeSet<Integer> player1=new TreeSet<Integer>();
TreeSet<Integer> player2=new TreeSet<Integer>();
TreeSet<Integer> player3=new TreeSet<Integer>();
TreeSet<Integer> dipai=new TreeSet<Integer>();
for(int i=0;i<array.size();i++) {
if(i>=array.size()-3) {
dipai.add(array.get(i));
}else if(i%3==0){
player1.add(array.get(i));
}else if(i%3==1){
player2.add(array.get(i));
}else if(i%3==2){
player3.add(array.get(i));
}
}
look("张三", player1, hm);
look("李四", player2, hm);
look("王五", player3, hm);
look("底牌", dipai, hm);
}
public static void look(String name,TreeSet<Integer> ts,HashMap<Integer,String> hs) {
System.out.print(name+"的牌是: ");
for (Integer i : ts) {
System.out.print(hs.get(i)+" ");
}
System.out.println();
}
}
异常
* 什么是异常
*
程序出现了问题,使用"异常"来描述问题
* 举例:
*
生活中一些问题
*
*
班长骑车去旅行
*
1)在骑行的过程中,路面塌陷了,导致不能骑行了!----- 不可抗力的因素!(严重问题)
*
2)在准备骑行的时候,车胎没气了,导致不能骑行了!----
*
在骑行前应该检查的工作(可以检查维修,可以解决的)
*
3)在骑行过程中,中间路面是平坦的,两边是石子,就在两边上骑行,导致车胎没气了
*
-----
*
在骑行的时候,no zuo no die (自己的原因导致)
*
* java.lang.Throwable:异常类( Java 语言中所有错误或异常的超类(父类))
*
error:严重错误(严重问题)
*
比如:内存异常!OOM(Out Of Memory)
*
通过加入内存条...或者将Linux虚拟机的内存空间设置小一点!
*
*
Exception: 可以捕获合理的程序!
*
编译时期异常:只要不是RuntimeException中的子类都是属于编译时期
*
必须要处理的,不处理编译通不了,没有办法运行的!
*
运行时期异常RuntimeException:
*
程序在执行过程中出现的问题
*
代码逻辑不够严谨导致的!
异常处理的方法
* 异常的处理方案有哪些:
*
*
1)try...catch...finally:标准格式
捕获异常
*
2)throws:抛出异常 (抛出到方法上)
*
* 方式1:捕获异常的变形格式
*
try...catch...
*
try...catch...catch...
*
try...finally...
(线程中:Lock锁)
*
* 格式:流程
*
try{
*
...
*
...
*
可能出现问题代码
*
}catch(异常类名 变量名){//具体异常的类
*
//处理异常
*
//自己手动处理
*
//Throwable类中一些方:处理方式(jvm将异常信息输出在控制台并且可以跟踪异常类源码)
*
}
多个异常的处理
* 如果try中存在多个异常,如何处理
*
1)一个一个try...catch...
*
2)一个try多个catch...
* try...catch...finally(标准格式)
* 变形格式:
*
try...catch...
*
try...catch...catch...(推荐)
编译时期异常,运行时期异常
* 编译时期异常和运行时期的区别?
*
*
编译时期的异常:
*
举例:
*
String---Date---解析的方法parse(String source) throws ParseException{}
*
*
IO流:IOException
*
...
*
开发者必须要进行显示处理,否则编译通过不了!
*
*
运行时期异常:
*
1)代码逻辑的问题,不进行显示处理,在代码中加入一些逻辑判断
*
2)也可以进行显示处理:try...catch...
Throwable中的一些方法
* 关于Throwable中的一些方法
*
* public String getMessage():获取异常的消息字符串
*
* public String toString():获取异常信息的简单描述
*
异常的全限定名称:包名.类名: 调用该异常对象的getMessage()详细的消息字符串
*
* public void printStackTrace():
*
将此对象的信息追踪到堆栈中,具体获取到具体源码中哪一块出问题了
Throws和Throw的区别
* 针对异常处理的另一种方式:
*
*
throws:抛出异常
*
抛出在方法声明上,如果方法中的语句体出现了异常,将异常交给jvm,jvm将异常信息输出
* 控制台上...
*
*
* 面试题
*
throws和throw的区别
*
* throws:抛出
*
1)书写位置是在方法声明上
*
2)throws的后面跟的异常类名,而且可以跟多个异常类名,中间使用逗号隔开
*
3)对于throws它是由调用者进行处理,必须要对带throws的方法进行处理!
*
4)throws表示抛出异常的一种肯能性(这个方法可能出现问题/可能没有问题!)
* throw:抛出
*
1)书写位置是在方法体中
*
2)throw的后面跟的异常对象,一般都是匿名对象 new XXXException()
*
而且只能跟一个异常对象
*
3)由方法中逻辑判断进行处理(由方法体中语句进行处理)
*
4)throw:表示抛出异常一种肯定性(执行到逻辑的时候,一定会执行这个异常!)
异常的注意事项
-
异常的注意事项:
-
1)子类继承父类的时候,对父类的成员方法进行重写,如果父类的成员方法有异常
-
那么子类的该方法针对异常处理,要么是跟父类的异常类名一致,要么是父类异常类的子类
-
2)子类继承父类重写父类的方法的时候
-
父类的成员方法没有抛出异常,子类的该方法不能抛出异常,只能try…catch…
异常捕获的标准格式
* 捕获的标准格式 * try{ * //可能出现问题的代码 * }catch(异常类名 对象名){ * 对象名.printStackTrice() ; * }finally{ * //释放相关系统资源close() * //举例:IO流中: createNewfile():创建文件的方法 * //举例:JDBC:java 连接数据库 * //Connection: 连接对象---- 使用完毕需要关闭相关的系统资源! * //Statement:执行对象(增删查改的操作):---使用完了也需要释放系统资源 * } * * try中代码如果不存在问题,代码正常执行,需要执行finally语句,释放系统资源! * finally特点: * 释放相关的系统资源,而且finally中的代码一定会执行的;除非在执行finally语句之前 * JVM退出了! System.exit(0) ;
面试题
* 面试题 * 如果捕获异常的时候, * try...catch...finally,catch中如果有return语句,那么finally中的代码还会执行吗? * 在return之前执行还是return之后执行 * 会执行,除非Jvm退出了不执行! * return 之前 * */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getNum(10)); } private static int getNum(int a) { System.out.println(a); //10 //重新给a赋值 try { a = 20 ; //a =20 System.out.println(a/0);//除数为0的异常 } catch (Exception e){//执行catch语句: 捕获具体的异常 a = 30 ; //a = 30 return a ; //return 30 :已经形式返回路径! ,如果catch中有return语句,finally代码一定会执行, //在catch之前执行! }finally { a = 40 ; //a = 40 } return a; } }
自定义异常
自定义的异常!
1)自定义一个类,继承自Exception或者RuntimeException
2)提供无参构造方法 /有参构造 传递String参数(消息字符串)
多线程
要实现多线程—线程是依赖于进程,创建进程---->创建系统资源
但是Java语言不能够直接创建系统的,JDK提供一个类:Thread
线程类
jvm是可以运行多个线程并发的执行
并发:在同一个时间点同时发生的!
方式1:
1)自定义一个类 继承Thread类 :线程类
2)重写Thread类中的run方法
3)在当前用户线程中(main)中创建该类对象,
启动线程 :start()方法
设置线程的名称
public final void setName(String name)
获取线程的名称
多线程—线程是依赖于进程,创建进程---->创建系统资源
但是Java语言不能够直接创建系统的,JDK提供一个类:Thread
线程类
jvm是可以运行多个线程并发的执行
并发:在同一个时间点同时发生的!
方式1:
1)自定义一个类 继承Thread类 :线程类
2)重写Thread类中的run方法
3)在当前用户线程中(main)中创建该类对象,
启动线程 :start()方法
设置线程的名称
public final void setName(String name)
获取线程的名称
public final String getName()
最后
以上就是甜美白昼为你收集整理的集合应用,异常,多线程集合应用-----------斗地主洗牌发牌异常多个异常的处理编译时期异常,运行时期异常Throwable中的一些方法Throws和Throw的区别异常的注意事项异常捕获的标准格式面试题自定义异常多线程的全部内容,希望文章能够帮你解决集合应用,异常,多线程集合应用-----------斗地主洗牌发牌异常多个异常的处理编译时期异常,运行时期异常Throwable中的一些方法Throws和Throw的区别异常的注意事项异常捕获的标准格式面试题自定义异常多线程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复