1.throw和throws的区别?
答:throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
throws是声明异常,运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。
2.什么时候需要声明异常,什么时候不需要声明异常?
答:如果方法内通过throw抛出了编译时异常,而没有进行try...catch捕获处理,那么必须通过throws进行声明,让调用者去处理。声明时可以同时声明多个异常,用逗号隔开。
如果异常是运行中异常,那么可以声明异常处理,也可以选择不需要声明异常。
3.异常有几种处理方式?
答:两种。
(1)声明异常:使用throws关键字对异常进行声明,表示当前不处理该异常,让调用者处理。
(2)捕获异常:使用throw关键字来抛出一个指定的异常对象,将这个异常对象抛给调用者,并结束当前方法的执行。使用try...catch代码块对异常对象进行捕获,可以对异常进行指定的方式处理,处理后,之后的程序继续运行。
4.什么是并发,什么是并行?
答:并发:指两个或多个事件在同一个时间段内发生。
并行:指两个或多个事件在同一时刻发生(同时发生)
5.什么是进程,什么是线程?
答:进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程。
6.run()方法和start()方法的区别?
答:系统通过调用线程类的start()方法来启动一个线程,此时该线程就处于就绪状态,而非运行状态,也就意味着这个线程可以被JVM来调度执行。在调度过程中,JVM通过调用线程类的run()方法来完成实际的操作,当run()方法结束后此线程就会终止。
如果直接调用线程类的run()方法,这会被当作一个普通的函数调用,程序中仍然只有主线程这一个线程,也就是说start()方法能够异步的调用run()方法,但是直接调用run()方法却是同步的因此也就无法达到多线程的目的。 |