throws用于方法声明中,指示当前方法在运行时将引发异常。调用该方法时,需要控制在方法体中使用异常抛出,手动创建异常,与try-catch-finally一起使用,中断代码的继续执行。当一段代码在运行期间可能出现异常并终止执行时,请使用。结构是try语句块中的try{//可能有异常的代码}catch(异常类型){//异常发生时的处理方法}finally{//其他必须执行的语句}。如果在代码执行过程中出现异常,它将被catch捕获,并在catch语句块中进行处理。如果没有异常,finally语句块中的代码将继续执行。不管try中是否有异常,这里的代码都会被执行。
(1)如果程序中需要抛出异常,应该使用throw语句,可以单独使用。throw语句抛出异常实例而不是异常类,一次只能抛出一个异常实例;
(2)如果throw语句抛出的异常是检查异常,则throw语句要么在try块中显式捕获异常,要么放在有throw声明的方法中,即异常交给方法的调用方处理;如果抛出语句抛出的异常是runtime异常,则该语句无须放在try块里,也无须放在throws声明的方法中;程序可以显式使用来捕获并处理该异常,也可以完全不理会异常,把异常交给调用者处理;
在delphi中使用线程,当窗体关闭时,如果窗体中启用了线程,一般需要手动关闭来释放资源。通常用来结束线程的代码是:
threads.terminative
threads.waitfor
也就是先触发terminate方法,然后等待线程结束。此方法要求不能使用线程。
freeonterminate:true
否则,an"无效句柄"当waitfor即将结束时将导致错误。当窗体关闭时,该方法将等待一个事件(因为等待)。
因此,如果我们不t在主窗体中结束线程,我们不不一定要使用waitfor。相反,下面的方法:用于在关闭表单的代码中直接调用freeonterminate:true。
threads.justfinishit.
note:ifathreadisset.onterminate:somefunctionisthencallingpcmthrd.trytoputthethreadbeforeending.terminal:nickell,以避免线程结束后somefunction中变量的空指针错误。当然,这不是绝对的,需要根据具体程序来确定。