*************************************************************************
线程:
Thread /θred/
先看“多任务”(multitasking):
同时开多个程序:电脑挂着qq,听着音乐,浏览网页。。。
线程是在较低层次上拓展了多任务的概念:一个程序执行多个任务,通常每个任务称为一个线程(Thread),如网易云音乐的边缓冲边播放,一个线程负责下载,一个播放
下载(缓冲),另外一个负责播放;迅雷同时下载多个文件,而且也有边下边看功能
(实际上电脑运行的所有线程可以在任务管理器里中找到)
进程:概念???
1. 实际上电脑运行的所有进程可以在任务管理器里中找到
2. 进程和线程的区别:
① 进程比线程更轻量级,一个线程“可以”包含多个进程
② 每个线程拥有自己的一整套变量,线程则共享数据。
(当然,不同线程也有可能存取相同的对象。。。)
Java开发中,我们实现多线程,有两种方式, 一种是继承Thread类,一种是实现Runnable接口
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法,这样新的ThreadObject.start();就可以开启线程了
Runnable接口只有一个run方法,需要使用Thread类来启动。
***********************************************************************
P475 :java异常处理流程
try{...}
catch(XXX e){...}
finally{...}
other statements........
机制来处理异常。
其中try{...}中放入要检查可能抛出异常的语句
catch((XXX e)先进行条件判断,如果满足,进入
finally是必然会执行的语句,执行完毕后other statements。
但是,上述流程容易产生误解,即other statements始终都会执行,故可以省略掉finally(或者说将原本finally的语句放入other statements中来)。
在实测中,发现当catch条件满足时,先执行catch中语句,再执行finally语句(如果有),最后执行other statements;但是,当catch条件不满足时(即实际检测抛出的异常与catch条件句的异常并不一致),会执行finally语句(如果有),但是并不会继续执行other statements。
废话不多说,上代码:
public class testExceptionFlow{
public static void main(String[] args) throws Exception{
try{
int[] arr = new int[5];
arr[10] = 7;
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("异常:"+e);
}
finally{
System.out.println("执行Finally!");
}
System.out.println("执行other statements!");
}
}
结果:
但是,如果换成NullPointerException,如下:
public class testExceptionFlow{
public static void main(String[] args) throws Exception{
try{
int[] arr = new int[5];
arr[10] = 7;
}
catch(NullPointerException e){ //此处换成并非本例抛出的异常
System.out.println("异常:"+e);
}
finally{
System.out.println("执行Finally!");
}
System.out.println("执行other statements!");
}
}
结果:
并没有执行other statements中的
System.out.println("执行other statements!");
若程序的目的并不希望因为判断异常类型错误导致程序运行中断,即不需要准确判断类型,或者不需要为某种特定类型异常进行处理,则可以采用catch(Exception e)的办法。
Exception是java所有具体异常类的父类。
如上例条件这样改:
public class testExceptionFlow{
public static void main(String[] args) throws Exception{
try{
int[] arr = new int[5];
arr[10] = 7;
}
catch(Exception e){ //此处改为Excetion e
System.out.println("异常:"+e);
}
finally{
System.out.println("执行Finally!");
}
System.out.println("执行other statements!");
}
}
则结果:
另外,注意
1.本例为防止IDE中间可能进行的处理,用的是命令行模式调试
2.即使try中没有任何异常产生,仍然会进入finally,执行相关语句。
3.总结记忆:只有正确地捕获(catch)了异常,才不会打断other statements执行,即使对异常的处理可能为空(catch{...}没有任何语句,实测结论)。不然程序必然会报错终止。
究其原因,若catch没有捕获,则交由JVM默认的异常处理机制处理:输出异常信息,终止程序
参考资料:
https://blog.csdn.net/u012355934/article/details/53494973
******************************************************************************
P.386——P.
***********
使用包装类的一大好处就是利用包装类已有的方法,进行8种数据类型之间的类型转换。
特别是字符串类型转换为其他7种类型:
String str = "123";
int i = Integer.parseInt(str);
Integer: public static int parseInt(String s);
Double: public static double parseDouble(String s);
Boolean: public static boolean parseBoolean(String s);
等等
但是对于包装类Character,没有提供parseCharacter()方法,而是得使用String类自己的charAt(Int Index)方法
*********
将基本类型转换为字符串怎么办:
①
int i = 123;
String str = i + “”;
Java中,使用“+”对左右操作数进行操作时,如果有字符串,则全部转化为字符串类型(理解最高优先级),这一点在System.out.println()就知道。
但是这种方法必然要引入一个字符串(即使是''"),产生了垃圾,不建议使用。
②
int i = 123;
String str = String.valueOf(x);
Java提供了其他类型转化为String类型的静态方法valueOf() (因为是静态方法,所以可以直接通过类型调用)。
注意:java 1.5开始引入了自动装箱(auto boxing),但是如下:
自动装箱拆箱只会在赋值,比较大小和传入参数时进行,并不是部分场合地将基本类型和包装类型混为一谈。