Java 为什么我必须在这个程序中初始化a和b?
在这个程序中,为什么我必须初始化Java 为什么我必须在这个程序中初始化a和b?,java,scope,Java,Scope,在这个程序中,为什么我必须初始化a和b,因为它们的范围不受限制,但我不能在d=a+b行上使用它们 import java.util.Scanner; class DivAndSum { public static void main(String[] args) { int a = 0, b = 0; Scanner kb = new Scanner(System.in); try { a = kb.nextInt(
a
和b
,因为它们的范围不受限制,但我不能在d=a+b
行上使用它们
import java.util.Scanner;
class DivAndSum {
public static void main(String[] args) {
int a = 0, b = 0;
Scanner kb = new Scanner(System.in);
try {
a = kb.nextInt();
b = kb.nextInt();
int c = a / b;
System.out.println("Div=" + c);
} catch (ArithematicException e) {
System.out.println("Please Enter a non zero denominator");
} catch (InputMismatchException e) {
System.out.println("Please Enter integers only");
System.exit(0);
}
int d = a + b;
System.out.println("Sum=" + d);
}
}
下面的程序编译得很好:
import java.util.Scanner;
class DivAndSum {
public static void main(String[] args) {
int a,b,d;
Scanner kb = new Scanner(System.in);
a = kb.nextInt();
b = kb.nextInt();
d = a + b;
System.out.println("Sum=" + d);}}
如果你说的是
inta=0,b=0代码>然后a
和b
都是局部变量,必须初始化局部变量
仅类级和实例级变量不需要初始化
如果不想初始化,请参阅下面的代码
import java.util.Scanner;
class DivAndSum {
int a,b; // here a and b are instance variables so no need to be initialized. Both will have value 0 which is default
public static void main(String[] args) {
// int a = 0, b = 0; a and b are loca variables so both should be initialized
Scanner kb = new Scanner(System.in);
try {
a = kb.nextInt();
b = kb.nextInt();
int c = a / b;
System.out.println("Div=" + c);
} catch (ArithematicException e) {
System.out.println("Please Enter a non zero denominator");
} catch (InputMismatchException e) {
System.out.println("Please Enter integers only");
System.exit(0);
}
int d = a + b;
System.out.println("Sum=" + d);
}
}
如果你说的是inta=0,b=0代码>然后a
和b
都是局部变量,必须初始化局部变量
仅类级和实例级变量不需要初始化
如果不想初始化,请参阅下面的代码
import java.util.Scanner;
class DivAndSum {
int a,b; // here a and b are instance variables so no need to be initialized. Both will have value 0 which is default
public static void main(String[] args) {
// int a = 0, b = 0; a and b are loca variables so both should be initialized
Scanner kb = new Scanner(System.in);
try {
a = kb.nextInt();
b = kb.nextInt();
int c = a / b;
System.out.println("Div=" + c);
} catch (ArithematicException e) {
System.out.println("Please Enter a non zero denominator");
} catch (InputMismatchException e) {
System.out.println("Please Enter integers only");
System.exit(0);
}
int d = a + b;
System.out.println("Sum=" + d);
}
}
如果不初始化它们(即用int a,b;
替换int a,b;
),则使用用户输入初始化它们的try块可能无法初始化它们(例如,如果用户输入字符串而不是int,kb.nextInt()
将引发异常)
在这种情况下,它们在intd=a+b行没有值代码>。因此必须初始化它们。如果不初始化它们(即用int a,b;
替换int a,b;
),则使用用户输入初始化它们的try块可能无法初始化它们(例如,如果用户输入字符串而不是int,kb.nextInt()
将引发异常)
在这种情况下,它们在intd=a+b行没有值代码>。因此,必须对它们进行初始化。如果在try catch中分配变量a出错,无论原因如何,都不能初始化,然后对未初始化的值进行数学运算,这一点都不好
因此,您的IDE中的complining是
尝试声明并初始化a和b
int a, b;
a=0;
b=0;
try {
...
如果在try catch中分配变量a出错,无论原因如何,都不会初始化,之后将对未初始化的值进行数学运算,这一点都不好
因此,您的IDE中的complining是
尝试声明并初始化a和b
int a, b;
a=0;
b=0;
try {
...
为什么你认为你不应该初始化它们?如果在分配异常之前抛出异常,您希望发生什么?(例如,想象一下如果nextInt()
抛出了一个算术异常
?请参考这个现有的问题:为什么您认为不应该初始化它们?如果在分配它们之前抛出异常,您会期望发生什么?(例如,想象一下如果nextInt())
抛出了一个算术异常
?请参考这个现有的问题:但是如果在初始化“a”时出错,那么catch无法处理,那么程序不会在该异常时终止吗?您只捕获了这两个异常:arithermaticeexception inputmatchexception,甚至在那些catch部分中r a和b都是初始化的…但是如果在初始化“a”时出现错误,catch无法处理,那么程序不会在该异常时终止吗?您只捕获了这两个异常:arithermaticeexception inputmatchexception,甚至,在这些catch部分中,a和b都没有初始化…是的,那将是inputmatch我猜是chException,如果该异常发生,程序将终止。是的,我猜是inputmatchxception,如果该异常发生,程序将终止。请参阅第二个程序:a和b a都是本地的,其中一个没有给出编译错误。@shryahsharma第二个程序不会编译,因为defining d两次。更改了它,但是,为什么第二个运行而不是第一个。@Shryashharma你说第二个运行而不是第一个是什么意思?第一个。谢谢你花时间回复,我只想知道在第一个程序中,行“d=a+b”与“a”和“b”在同一范围内,与第二个代码中的代码相同,但在第一个代码中,我必须初始化它们,因为我知道它们肯定会被Scanner初始化,否则程序将由于异常而终止,或者该异常将被处理,然后通过以下方式终止:“System.exit(0)”。请看第二个程序:a和b a都是本地的,其中一个没有编译错误。@Shryashharma第二个程序不会编译,因为定义了两次d。更改了它,但是,为什么第二个程序运行而不是第一个程序。@Shryashharma第二个程序运行而不是第一个程序是什么意思?第一个。谢谢你的帮助花时间回答,我只想知道在第一个程序中,行“d=a+b”与“a”和“b”在同一范围内,与第二个代码中的代码相同,但在第一个代码中,我必须初始化它们,因为我知道它们肯定会被Scanner初始化,否则程序将由于异常而终止,或者该异常将被处理,然后通过“System.exit(0)”终止。