2017-06-02 99 views
0

例1循环中的序列化阵列

  Person person = (Person)os.readObject(); 
     System.out.println(person); 
     person = (Person)os.readObject(); 
     System.out.println(person); 
     person = (Person)os.readObject(); 
     System.out.println(person); 

例2

for(int i=0;i<num;i++) { 
      Person person = (Person)os.readObject(); 
      System.out.println(person); 
     } 

显然,他们都因为一个阅读对象时正常工作只是另一个的环形版本,但我主要好奇心在于为什么在示例2中,Person对象正在循环但没有错误,但是如果我这样做:

例3

 Person person = (Person)os.readObject(); 
    System.out.println(person); 
    Person person = (Person)os.readObject(); 
    System.out.println(person); 
    Person person = (Person)os.readObject(); 
    System.out.println(person); 

我得到重复的变量错误。我认为例3与例2中的for循环相同,任何人都会解释?

回答

0

您要重新声明具有相同名称的变量(非法)

尝试

Person person = (Person)os.readObject(); 
System.out.println(person); 
person = (Person)os.readObject(); 
System.out.println(person); 
person = (Person)os.readObject(); 
System.out.println(person); 
0

您可以在一个循环中声明变量。每次循环执行时,它都会读取变量的声明,并且一切正常。否则,你将无法在循环中声明变量。实际上,你只声明一次。 但在示例3中,您正在声明相同的变量三次。

0

其实你的问题不是关于序列化数组,而是关于非常基本的Java知识。

在示例1中,您重用了该变量,所以没关系。在示例3中,您尝试声明一个已经存在的变量,它会产生编译错误。你的问题是你对例子2的理解。在2中,代码不会在编译时或其他东西上重复。您创建一个循环中多次执行的代码块。

如果在一个块中声明一个变量,它只存在于该块内。在for循环的一个循环结束时,您在该块中声明的每个变量都将被“删除”/丢弃。

你甚至可以为你的变量使用“final”。示例:

public static void main(String[] args) { 

    final int[] samples = { 1, 3, 5, 7, 11 }; 
    for (int i = 0; i < samples.length; i++) { // Start of block 
     // works because value is gone after this block 
     final int value = samples[i]; 
     System.out.println(value); 
    } // end of block 

    // Won't work: 
    System.out.println(value); 
} 

见我在 cannot be resolved to variable 评论有关大括号是如何工作的另一个例子。