public static void main(String[] args) {
// TODO Auto-generated method stub
int[] x = new int[3];
Scanner inputScan = new Scanner(System.in);
for(int i = 0; i < x.length;){
System.out.println("Please input the "+i+" integer:");
String inputInt = inputScan.nextLine();
try {
x[i++] = Integer.parseInt(inputInt); //1.和下面的两行有区别吗?
//x[i] = Integer.parseInt(inputInt);
//i++;
} catch (NumberFormatException e) {
System.out.println("您输入的日期格式有误,请重新输入");
}
}
System.out.println(Arrays.toString(x));
}假设现在i=0,按照分析,如果在第一行注释那边输入一个字符串"a",那么将会产生异常,应该执行不到i++
可是现在的情况是,即使异常发生,也会执行到同一行的i++。但是如果写成下面这两行就没有问题
// TODO Auto-generated method stub
int[] x = new int[3];
Scanner inputScan = new Scanner(System.in);
for(int i = 0; i < x.length;){
System.out.println("Please input the "+i+" integer:");
String inputInt = inputScan.nextLine();
try {
x[i++] = Integer.parseInt(inputInt); //1.和下面的两行有区别吗?
//x[i] = Integer.parseInt(inputInt);
//i++;
} catch (NumberFormatException e) {
System.out.println("您输入的日期格式有误,请重新输入");
}
}
System.out.println(Arrays.toString(x));
}假设现在i=0,按照分析,如果在第一行注释那边输入一个字符串"a",那么将会产生异常,应该执行不到i++
可是现在的情况是,即使异常发生,也会执行到同一行的i++。但是如果写成下面这两行就没有问题
解决方案 »
- java背景图片
- linux下运行JAVA问题,急~
- new Runnable() 问题?
- 如何在jlable上边显示出从数据库里查询出来的数据
- 哪位高手有解密的Optimizeit Suite 5下载?
- 在java中怎么获取系统当前进程~有哪位达人帮帮忙
- sdk
- 手头没有资料,急需一方法用法:
- where I can see all of the questions instead of only hot topics!
- 欲开发基于CORBA的分布式系统,高手请进...
- 求助!用JAVA 做个作业。。需求各种强人哥帮忙!!!The application is a currency application
- java读取磁盘资料
51: astore 4
53: aload_1
54: iload_3
55: iinc 3, 1
58: aload 4
60: invokestatic #59; //Method java/lang/Integer.parseInt:(Ljava/lang/Str
g;)字节码显示在第一种情况下,i++的操作会先于parseInt转换。
如果这时候报错,i++已经执行了。
暂时没找到相关的语言规范,如果有人看到的话,通知一声。
如:x[3+a-b]=x+y;编译器在生成目标代码时,是遵守大多数编译原理中讲解的处理方式:(原理性示范)
t1=3+a;
t2=t1-b;
//此时x[3+a-b]已编译处理成基本形式:x[t2]
t3=x+y;
x[t2]=t3;对于楼主的程序中:x[i++] = Integer.parseInt(inputInt);
其处理方式是:i++在JAVA中处理成:t=i;i=i+1;然后用t代替原i++。
t1=i;
i=i+1;
//此时x[i++] 编译处理成x[t]
call ..... 设返回值存放在t2中
x[t]=t2
方法
用javap程序,如:javap -s -v -l MyJavaProgram
从MyJavaProgram.class文件中得到JAVA的汇编代码。
是先执行i++.然后再执行Integer.parseInt(inputInt)