读书笔记——java从入门到精通的笔记(4th Edition)

*************************************************************************

线程:

 


Thread  /θred/ 
先看“多任务”(multitasking):
同时开多个程序:电脑挂着qq,听着音乐,浏览网页。。。
线程是在较低层次上拓展了多任务的概念:一个程序执行多个任务,通常每个任务称为一个线程(Thread),如网易云音乐的边缓冲边播放,一个线程负责下载,一个播放
下载(缓冲),另外一个负责播放;迅雷同时下载多个文件,而且也有边下边看功能
(实际上电脑运行的所有线程可以在任务管理器里中找到)

进程:概念???
1. 实际上电脑运行的所有进程可以在任务管理器里中找到
2. 进程和线程的区别:
① 进程比线程更轻量级,一个线程“可以”包含多个进程
② 每个线程拥有自己的一整套变量,线程则共享数据。
(当然,不同线程也有可能存取相同的对象。。。)

 Java开发中,我们实现多线程,有两种方式, 一种是继承Thread类,一种是实现Runnable接口

Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法,这样新的ThreadObject.start();就可以开启线程了
Runnable接口只有一个run方法,需要使用Thread类来启动。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

***********************************************************************

P475 :java异常处理流程

读书笔记——java从入门到精通的笔记(4th Edition)_第1张图片

 

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!");

       }
}

结果:

读书笔记——java从入门到精通的笔记(4th Edition)_第2张图片

 

但是,如果换成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!");

       }
}

 

结果:

读书笔记——java从入门到精通的笔记(4th Edition)_第3张图片

并没有执行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!");

       }
}

 

则结果:

读书笔记——java从入门到精通的笔记(4th Edition)_第4张图片

 

另外,注意

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),但是如下:

读书笔记——java从入门到精通的笔记(4th Edition)_第5张图片

自动装箱拆箱只会在赋值,比较大小和传入参数时进行,并不是部分场合地将基本类型和包装类型混为一谈。

 

 

 

 

 

你可能感兴趣的:(Java基础问题)