我是java中异常处理的新手。 我只是想清除我的概念,但我遇到了以下问题。
这是代码。
class Inn {
public static void main(String... args) {
try{
String i="Asd";
} catch(Exception e) {
System.out.println(e);
}
//i=7;
System.out.println(i);
}
}
这就是即将发生的错误。
G:\javap>javac Inn.java
Inn.java:13: error: cannot find symbol
System.out.println(i);
^
symbol: variable i
location: class Inn
1 error
答案 0 :(得分:2)
try { // Block A
String i="Asd";
} // End of Block A
catch(Exception e) {
System.out.println(e);
}
System.out.println(i); // 'i' does not exist in this scope
变量i
在代码块A 中声明,这意味着它只能从内部访问(注意限制其范围的{花括号})。一旦执行流程经过块A ,变量i
将不再存在于范围内。
话虽如此,如果你想做这项工作,你必须声明内部范围的字符串i
out :
String i = ""; // necessary initialization, without it you'll get a
// "variable may have not been initialized" error
try {
i = "Asd";
}
catch(Exception e) {
System.out.println(e);
}
答案 1 :(得分:1)
i
变量在不同的范围内定义,并且在您尝试打印时不可见。
重写为:
import java.io.*;
class Inn
{
public static void main(String s[])
{
String i = null;
try{
i="Asd";
}catch(Exception e)
{
System.out.println(e);
}
//i=7;
System.out.println(i);
}
}
这样,变量i
与println
语句的范围相同。
答案 2 :(得分:1)
对于大多数编程语言,通常会将范围与变量相关联。范围在外行术语中的含义是 - 可以使用变量的代码部分或变量可见的部分。
使用Java(或许多OOP语言)我们通常有各种级别的范围:
类级别范围:类中定义的变量,即成员变量可以在类中的任何位置访问(为了简单起见,我将静态修饰符保留在图片之外)。这些变量通常定义在类的顶部(约定)。请记住,这些变量需要在类的方法之外才能在类级别范围内。
public class Example {
private String a; // variable a can be accessed anywhere inside the class
}
方法级别范围:方法中定义的变量只能在方法内部访问。它们的生命周期在方法返回时结束。
private int giveMeFive(){
int a = 5; // Scope of a is within the method
return a; // When a is returned then there the variable a dies :(
}
循环级别范围:您在循环中定义的变量仅限于该循环和任何内部循环。它们不能在定义它们的循环之外访问。
public static void main(String []args){
for(int i=0;i<10;i++){
System.out.println(i); // Only i is accessible here but not j
for(int j=1;j<5;j++){
System.out.println(i+j); // Both i and j are accessible here
}
}
}
块级别范围:通常,大括号{}内的任何内容都定义了特定的范围。在Java中,只要在同一组括号中或在这些括号内的任何括号中定义变量,您通常都可以访问该变量。
在您的情况下,您在try块中定义了变量i,因此一旦try块完成,变量就不再是 visible ,因此以后的println语句无法找到它在代码中。
public static void main(String[] args){
String i; // i defined outside the try block so it can be accessed after the try finished running
try{
i= "Asd"
}catch(Exception e){
Sytem.out.println(e);
}
System.out.println(i);
}
一切顺利:)
答案 3 :(得分:0)
这是因为i的范围在try块中是juste。
答案 4 :(得分:0)
变量i在try块内定义,它限制了try块内的i的范围。您需要在try块之外定义它。
答案 5 :(得分:0)
Java是一种范围内的语言,因此变量的可见性取决于它的定义位置。
在计算机编程中,名称绑定的范围 - 名称与实体的关联,例如变量 - 是绑定有效的计算机程序的一部分:名称可用于引用实体。 Java是词法范围的。
Problem with "scopes" of variables in try catch blocks in Java
由于您在try块中声明了products = {}
fi = open("prod_file.txt","r")
for line in fi:
l = line.rstrip().split(":")
products[l[0]] = {"desc" : l[1], "price" : l[2], "stock" : int(l[3]), "reorder" : int(l[4]), "target" : int(l[5])}
fi.close
gtin_valid()
cont=False
while not cont:
quantity=input("enter qty: ")
if quantity.isdigit():
qty=[quantity]
gtin8=[gtin]
qty.append(quantity)
gtin8.append(gtin)
carryon=input("do you want to continue? ")
if carryon[0]=="n":
cont=True
print(qty,gtin8)
else:
gtin_valid()
quantity=input("enter qty: ")
else:
print("Please enter numbers only ")
gtin_valid()
quantity=input("enter qty: ")
,因此println方法无法找到它。 (超出范围)