Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:为什么可以';我是否在一条语句中声明引用变量,并在类的另一条语句中创建引用对象?_Java_Class_Object_Syntax Error - Fatal编程技术网

Java:为什么可以';我是否在一条语句中声明引用变量,并在类的另一条语句中创建引用对象?

Java:为什么可以';我是否在一条语句中声明引用变量,并在类的另一条语句中创建引用对象?,java,class,object,syntax-error,Java,Class,Object,Syntax Error,我不明白为什么第一个版本是不可能的。 我还尝试了一个int值(我认为它不是一个对象): 谢谢大家!!我尝试了它,它工作正常(没有实现非默认构造函数或方法): 可以使用block语句执行此操作: import java.io.File; public class Test { int number; { number = 4; } File file1; { file1 = new File("path"); }

我不明白为什么第一个版本是不可能的。 我还尝试了一个int值(我认为它不是一个对象):


谢谢大家!!我尝试了它,它工作正常(没有实现非默认构造函数或方法):


可以使用block语句执行此操作:

import java.io.File;

public class Test {
    int number;
    {
        number = 4;
    }
    File file1;
    {
        file1 = new File("path");
    }
    public static void main(String[] args) {
        Test test = new Test();
        System.out.print(test.number + " , " + test.file1.getName());
// Output: 4 , path
    }
}

可以使用block语句执行此操作:

import java.io.File;

public class Test {
    int number;
    {
        number = 4;
    }
    File file1;
    {
        file1 = new File("path");
    }
    public static void main(String[] args) {
        Test test = new Test();
        System.out.print(test.number + " , " + test.file1.getName());
// Output: 4 , path
    }
}

这是因为类定义中不能有方法之外的可执行代码。那么这条线呢

public class Test {
    File file1 ;
     {
        file1 = new File("path");
     }
}
(这是一个声明),是非法的。它永远不会被执行。类定义在编译时处理,但编译器不是虚拟机,它不会执行代码。语句在运行时执行

正如B.M所指出的,您可以创建一段静态代码,该代码在加载类时执行。但是,我相信这相当于你的第二个例子:

file1 = new File("path");

(但我承认没有检查字节码)。

这是因为类定义中不能有方法之外的可执行代码。那么这条线呢

public class Test {
    File file1 ;
     {
        file1 = new File("path");
     }
}
(这是一个声明),是非法的。它永远不会被执行。类定义在编译时处理,但编译器不是虚拟机,它不会执行代码。语句在运行时执行

正如B.M所指出的,您可以创建一段静态代码,该代码在加载类时执行。但是,我相信这相当于你的第二个例子:

file1 = new File("path");

(但我承认没有检查字节码)。

你在课堂上有一个“松散”的语句。如果你想这样做,你应该让你的file1=newfile(“path”);在构造函数中,初始化块或方法的第一次尝试无效。变量声明和设置其初始值必须是类作用域中的一条语句。类中某个“松散”的地方有一条语句。如果你想这样做,你应该让你的file1=newfile(“path”);在构造函数中,初始化块或方法的第一次尝试无效。变量声明和设置其初始值必须是类范围内的一条语句。我不确定这是否完全正确。这不是代码在运行时未被执行的情况。这是无效的Java,编译时不会出错。我不确定这是否完全正确。这不是代码在运行时未被执行的情况。它是无效的Java,编译时不会出现错误。或者使用构造函数。或者使用构造函数。