(1)
public static void main(String[] args){
int i = 0;
for(int j=0; j<100; j++){
i=i++;
System.out.println(i);
}
}
这个程序的输出结果为什么是100个0啊?i=i++;i初值为0先赋给i后再++呀,i不是1吗?(2)try{
div2();
System.out.println("=====我想要执行====");
}catch(Throwable a){
a.printStackTrace();
System.out.println("------------");
System.out.println(a.getCause());
}
System.out.println("-----");
public static void div() throws Throwable{
throw new Throwable("div 中的Throwable。");
}
public static void div2() throws Throwable{
try{
div();
return;
}catch(Throwable a){
a.printStackTrace();
System.out.println("----------------");
throw new Throwable("div2 中的Throwable。", a);
}finally{
System.out.println("==========我想永远都执行==========");
}
}这段程序到底有没有对div2()方法进行捕获啊?而且怎样才能让System.out.println("=====我想要执行====");执行呢?
public static void main(String[] args){
int i = 0;
for(int j=0; j<100; j++){
i=i++;
System.out.println(i);
}
}
这个程序的输出结果为什么是100个0啊?i=i++;i初值为0先赋给i后再++呀,i不是1吗?(2)try{
div2();
System.out.println("=====我想要执行====");
}catch(Throwable a){
a.printStackTrace();
System.out.println("------------");
System.out.println(a.getCause());
}
System.out.println("-----");
public static void div() throws Throwable{
throw new Throwable("div 中的Throwable。");
}
public static void div2() throws Throwable{
try{
div();
return;
}catch(Throwable a){
a.printStackTrace();
System.out.println("----------------");
throw new Throwable("div2 中的Throwable。", a);
}finally{
System.out.println("==========我想永远都执行==========");
}
}这段程序到底有没有对div2()方法进行捕获啊?而且怎样才能让System.out.println("=====我想要执行====");执行呢?
public static void main(String[] args){
int i = 0;
for(int j=0; j<100; j++){
i=++i;
System.out.println(i);
}
}
i++的话 i会不停的往上加,就是你需要的结果但你搞了个i = i++
这样,i好不容易加了1,又被你玩回去了,明白不
原因:
i = i++
赋值运算符的优先级是从右到左结合。i++作为表达式,它的值是0,然后i的值加1,i就是1了。最后,=的左边是给i赋值,就是i++表达式=0.根因:=操作符的结合顺序以及i++的特性
i=i++;就使虽然执行了 i(new)=i(old)+1但给i赋值始终是i(old)即为0
对于第二个有对div2()方法进行捕获,因为捕获了所有才不会有System.out.println("=====我想要执行====")的输出
i=i++的意思就是,把0首先赋值给i,然后i再加1
这样,i始终都是0
你应该这样写public static void main(String[] args){
int i = 0;
for(int j=0; j<100; j++){
//直接写i++就可以,输出结果是1-100
i++;
System.out.println(i);
}
}
int i = 0;
for(int j=0; j<100; j++){
i=(i++);
System.out.println(i);
}
}为什么这句话 i=(i++);加了括号还是会先运行赋值语句呀,为什么结果还是100个0呀???
帮忙看一下吧!!!
你这问题
第一个,i=i++;(先是赋值了,再++的,蛋来蛋去,还是自己玩~)
第二个,捕获了不会执行FINALLY后面的,反之,就会。
第一步:t=i;
第二步:i=i+1;
第三步:需要表达式i++的值的地方,用t来代替。
因此:你的代码: i=(i++);
其实就是:
t=i; //对应第一步
i=i+1; //对应第二步
i=t; //对应第三步
package exceptionDemo;public class Test2 {
public static void main(String[] args) {
try {
div2();
System.out.println("=====我想要执行====");
} catch (Throwable a) {
//a.printStackTrace();
System.out.println("------------2");
System.out.println(a.getCause());
}
System.out.println("-------3");
} public static void div() throws Throwable {
throw new Throwable("div 中的Throwable。");
} public static void div2() throws Throwable {
try {
div();
return;
} catch (Throwable a) {
//a.printStackTrace();
System.out.println("----------------1");
throw new Throwable("div2 中的Throwable。", a);
} finally {
System.out.println("==========我想永远都执行==========");
} }
}
执行顺序。系统执行语句打印异常的顺序是不定的,暂时注释便于看清
----------------1
==========我想永远都执行==========
------------2
java.lang.Throwable: div 中的Throwable。
-------3div2()方法抛出了异常并且被捕获,所以不会执行“我想要执行”语句
就须在捕获之前进行,如果捕获了,就不会执行了,如下就会执行("=====我想要执行====");public class Test2 {
public static void main(String[] args) {
try {
System.out.println("=====我想要执行====");
div2();
} catch (Throwable a) {
//a.printStackTrace();
System.out.println("------------");
System.out.println(a.getCause());
}
System.out.println("-------");
} public static void div() throws Throwable {
throw new Throwable("div 中的Throwable。");
} public static void div2() throws Throwable {
try {
div();
return;
} catch (Throwable a) {
//a.printStackTrace();
System.out.println("----------------");
throw new Throwable("div2 中的Throwable。", a);
} finally {
System.out.println("==========我想永远都执行==========");
} }
}