Java实例位置

Java实例位置,java,class,instances,Java,Class,Instances,在创建另一个类的实例时,我注意到创建实例的位置可能会引发很多错误,或者会起作用。让我举个例子 public class Main() { Main(){ } Camera camera = new Camera(); public static void main(String[] args) { Box box = new Box(); } } 这两个不同的例子有什么不同?我有一点想法,它与静态引用有关,但我不确定。另外,在什么条

在创建另一个类的实例时,我注意到创建实例的位置可能会引发很多错误,或者会起作用。让我举个例子

public class Main() {
    Main(){

    }

    Camera camera = new Camera();

    public static void main(String[] args) {
        Box box = new Box();
    }
}

这两个不同的例子有什么不同?我有一点想法,它与静态引用有关,但我不确定。另外,在什么条件下,您会在静态main内部或外部创建实例?谢谢您的时间。

在您介绍的代码中,Main是一个类,具有构造函数Main、具有包本地可见性的camera类型的field-camera和static-method-mainString[]。请注意,静态方法mainString[]与类Main或其构造函数Main不同

box类型的box实例是在静态方法main内部创建的,在其外部不可见,而camera类型的camera实例对当前类所在包中的每个类都可见

此外,由于摄影机不是静态字段,因此它必须与Main类型的实例相关联。例如,您可以执行以下操作:

Main m = new Main();
Camera thisCamera = m.camera;
但不是这个:

Camera myCamera = Main.camera;

在您介绍的代码中,Main是一个类,具有构造函数Main、具有包本地可见性的类型camera的字段camera和静态方法mainString[]。请注意,静态方法mainString[]与类Main或其构造函数Main不同

box类型的box实例是在静态方法main内部创建的,在其外部不可见,而camera类型的camera实例对当前类所在包中的每个类都可见

此外,由于摄影机不是静态字段,因此它必须与Main类型的实例相关联。例如,您可以执行以下操作:

Main m = new Main();
Camera thisCamera = m.camera;
但不是这个:

Camera myCamera = Main.camera;
当您这样做时:

Camera camera = new Camera();
您正在声明Main类的受保护属性字段。您还将为此属性创建一个实例

请注意,此属性不是静态的。这样,只要创建一个Main类的对象,就会创建一个摄影机

对于另一方,如果您声明:

static Camera camera = new Camera();
然后,Java编译器将保证无论您创建多少个Main类对象,该属性都只存在一个实例

box是在静态void main方法内创建的变量。此变量不可见,即无法在此方法外部访问,因为此变量是在方法内部创建的。这是许多语言的标准范围规则

请注意,在静态方法中,只能引用两种类型的变量:局部变量作为box或类静态变量,如上例所示。

当您这样做时:

Camera camera = new Camera();
您正在声明Main类的受保护属性字段。您还将为此属性创建一个实例

请注意,此属性不是静态的。这样,只要创建一个Main类的对象,就会创建一个摄影机

对于另一方,如果您声明:

static Camera camera = new Camera();
然后,Java编译器将保证无论您创建多少个Main类对象,该属性都只存在一个实例

box是在静态void main方法内创建的变量。此变量不可见,即无法在此方法外部访问,因为此变量是在方法内部创建的。这是许多语言的标准范围规则


请注意,在静态方法中,只能引用两种类型的变量:局部变量作为box或类静态变量,如上例所示。

关于@Chthonic项目的帖子的更多细节:

根据您给出的示例,很明显您没有阅读java文档

类中的成员变量称为字段

方法或代码块中的变量称为局部变量

为了更详细地阐述这一点,让我们再举一个例子

/*Camera object is class variable*/
Camera camera = new Camera();
由于其作用域位于类级别,因此它将成为类成员或字段。 不要认为只有int或string可以成为一个字段。类对象变量也可以是字段或类成员

 /*Here the BOX object is inside a method*/
 public static void main(String[] args){
    Box box = new Box();
 }
在main方法中声明并实例化一个Box对象。此对象的范围仅限于方法的范围。它将仅位于main方法的花括号内

例如,假设现在修改示例:

 public static void main(String[] args){
    Box box = new Box();
    if(null != camera){
        // You can access camera inside main as it is a class member
        // the scope is a full class.
    }
 } // mian method ends.
  
 if(null == box){  // compiler will shout!!!
  // accessing box object outside main method
  // not allowed cause the box objects scope is over inside main method only.
 }

只需对@Chthonic项目的帖子进行更多的阐述:

根据您给出的示例,很明显您没有阅读java文档

类中的成员变量称为字段

方法或代码块中的变量称为局部变量

为了更详细地阐述这一点,让我们再举一个例子

/*Camera object is class variable*/
Camera camera = new Camera();
由于其作用域位于类级别,因此它将成为类成员或字段。 不要认为只有int或string可以成为一个字段。类对象变量也可以是字段或类成员

 /*Here the BOX object is inside a method*/
 public static void main(String[] args){
    Box box = new Box();
 }
在main方法中声明并实例化一个Box对象。此对象的范围仅限于 方法。它将仅位于main方法的花括号内

例如,假设现在修改示例:

 public static void main(String[] args){
    Box box = new Box();
    if(null != camera){
        // You can access camera inside main as it is a class member
        // the scope is a full class.
    }
 } // mian method ends.
  
 if(null == box){  // compiler will shout!!!
  // accessing box object outside main method
  // not allowed cause the box objects scope is over inside main method only.
 }
Main的实例甚至还没有创建,所以还没有摄像头。以下是您可以解决此问题的方法:

public class Main() {
    Main(){

    }

    Camera camera = new Camera();

    public static void main(String[] args) {
        Box box = new Box();
        box.standOn();
        Main main = new Main(); // <- now the camera exists.
        System.out.println("Say cheese.");
        main.camera.click();
    }
}
请务必阅读人们指给你的教程。然而,思考这里发生的事情的简单方法是:对象的静态部分是在对象的实例创建之前工作的部分,对象的实例通常使用新的。当然,静态也意味着每个实例都共享相同的内存,这可能很有用,也很酷。但在你存在之前让你的一部分工作也很酷。毕竟,我们是如何开始整个节目的

到现在为止,您应该已经注意到让Main类、Main实例变量和Main方法变得多么混乱。这就是为什么我们不把我们的类命名为Main。

Main的一个实例甚至还没有创建,所以还没有摄像头。以下是您可以解决此问题的方法:

public class Main() {
    Main(){

    }

    Camera camera = new Camera();

    public static void main(String[] args) {
        Box box = new Box();
        box.standOn();
        Main main = new Main(); // <- now the camera exists.
        System.out.println("Say cheese.");
        main.camera.click();
    }
}
请务必阅读人们指给你的教程。然而,思考这里发生的事情的简单方法是:对象的静态部分是在对象的实例创建之前工作的部分,对象的实例通常使用新的。当然,静态也意味着每个实例都共享相同的内存,这可能很有用,也很酷。但在你存在之前让你的一部分工作也很酷。毕竟,我们是如何开始整个节目的


到现在为止,您应该已经注意到让Main类、Main实例变量和Main方法变得多么混乱。这就是为什么我们不将我们的类命名为Main。

您可能会对一些类感兴趣。特别是,应该能够帮助您查看该部分。您可能会对一些内容感兴趣。特别是,应该能够帮助您了解这一部分。什么使camera成为字段?Java中的字段只是类中的一个变量。正如Jeffrey在评论中所建议的那样,教程应该明确这些概念。这里有一个简单易读的例子:什么使camera成为字段?Java中的字段只是类中的变量。正如Jeffrey在评论中所建议的那样,教程应该明确这些概念。这里有一个简单易读的答案:我喜欢这个答案,因为任何一个看这个例子的新手都会想为什么他们不能在主要方法中使用照相机。Main的一个实例甚至还没有创建,所以还没有摄像头。我喜欢这个答案,因为任何看这个例子的新手都会想为什么他们不能在Main方法中使用摄像头。Main的一个实例甚至还没有创建,所以还没有摄像头。我知道我还没有创建Main的一个实例,我只是在问这两个实例的区别。我不知道你是否在一个静态方法中定义了一个实例,它也是静态的,我知道我没有创建main的实例,我只是问这两个实例的区别。我不知道你是否在一个静态方法中定义了一个实例,它也是静态的