java中:System.exit(1);
创新互联从2013年创立,是专业互联网技术服务公司,拥有项目网站设计、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元成县做网站,已为上家服务,为成县各地企业和个人服务,联系电话:18980820575
C++中:return 1;或者exit(1),只是要包含stdlib.h
下面的程序输出结果为
2
1
当在输出2的时候,main已经结束了。但是程序依然执行,输出了1.
是因为main函数只是程序的入口,是一个程序中多条线程的其中一条。独立的线程间是互相不影响的,因此即便main线程结束了,其他线程依然会照常运行。
class test extends Thread{
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(1);
super.run();
}
}
public class Test{
public static void main(String[] args) {
//new Server();
System.out.println(0);
new test().start();
System.out.println(2);
}
}
Java中finally代码是肯定会被执行的,即使抛出异常或者return。看下面代码:
public static void main(String[] args) {
try {
System.out.println("Try");
return;
} finally {
System.out.println("Finally");
}
}
如果查看这段代码的汇编代码:
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Try
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
11: ldc #5 // String Finally
13: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
16: return
17: astore_1
18: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
21: ldc #5 // String Finally
23: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
26: aload_1
27: athrow
可以看到编译器编译时已经把finally中的代码(8,11,13)提前到了return之前(16)执行。return之后还会看到finally中的汇编,不过不会执行了。我的理解是编译的时候把return之后的语句拷贝到return之前的位置,但是没有删除return之后的语句。
方法如下:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("----------------");
Object o = sc.next();
String str = o.toString();
if ("-1".equals(str)) {
break;
}
int n1 = sc.nextInt();
int n2 = sc.nextInt();
//调用方法
}
}