Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 - Fatal编程技术网

Java 我们不能从静态方法访问非静态实例,但可以启动一个类。怎样?

Java 我们不能从静态方法访问非静态实例,但可以启动一个类。怎样?,java,Java,我们无法从静态方法访问非静态实例。但是main()方法是静态的,首先运行。在main方法中任何其他类的初始化期间,它将调用构造函数。那个构造函数是静态的吗?JVM的基本流程是什么 JVM调用main方法来运行项目范围之外的方法 当JVM调用main方法时,被调用的类不存在对象。因此,它必须有静态方法才能允许从类中执行此操作。JVM调用main方法来运行项目范围之外的方法 当JVM调用main方法时,被调用的类不存在对象。所以它必须有一个静态方法来允许这个类 在main方法中任何其他类的初始化期间

我们无法从静态方法访问非静态实例。但是main()方法是静态的,首先运行。在main方法中任何其他类的初始化期间,它将调用构造函数。那个构造函数是静态的吗?JVM的基本流程是什么

JVM调用main方法来运行项目范围之外的方法

当JVM调用
main
方法时,被调用的类不存在对象。因此,它必须有静态方法才能允许从类中执行此操作。

JVM调用main方法来运行项目范围之外的方法

当JVM调用
main
方法时,被调用的类不存在对象。所以它必须有一个静态方法来允许这个类

在main方法中任何其他类的初始化期间,它将调用构造函数

如果你指的是实例化,那么是的。创建类的实例调用构造函数,无论是在
main
中还是在其他任何地方进行
new
调用

如果您真的是指类初始化(通常是隐式的),那么不会。类的初始化不涉及类构造函数

比如说

    public class Example {
        private static int foo = OtherClass.someMethod();
        static {
            // do something
        }
        public Example() {
            // do something
        }
    }
类初始化执行
foo
的初始值设定项和
static
初始值设定项块,但is不执行构造函数。创建
Example
的实例将调用
Example()
构造函数

那个构造函数是静态的吗

构造函数总是静态的。。。从某种意义上说,
new
不需要现有实例

在main方法中任何其他类的初始化期间,它将调用构造函数

如果你指的是实例化,那么是的。创建类的实例调用构造函数,无论是在
main
中还是在其他任何地方进行
new
调用

如果您真的是指类初始化(通常是隐式的),那么不会。类的初始化不涉及类构造函数

比如说

    public class Example {
        private static int foo = OtherClass.someMethod();
        static {
            // do something
        }
        public Example() {
            // do something
        }
    }
类初始化执行
foo
的初始值设定项和
static
初始值设定项块,但is不执行构造函数。创建
Example
的实例将调用
Example()
构造函数

那个构造函数是静态的吗


构造函数总是静态的。。。从某种意义上说,
new
不需要现有实例。

是的,我们不能从静态块访问非静态变量,因为非静态变量是实例变量&只能通过使用
new
操作符创建类的对象或使用类似
class.newInstance()
的反射来访问。然而,静态变量是类级别的&它的值对于每个对象都是常量。这意味着不需要创建类的对象来访问这些变量。您可以使用类名(不同类)或直接(在同一类内)访问静态变量,如:-

main()方法:

public static void main(String[] args) {}
在Java中,main()方法是静态的&它是JVM的入口点。因为,main()方法不属于Java中的任何类。当我们在任何用户定义的类中定义
main()
方法时,它将属于该类。而且因为它是静态的&在同一个类中,所以不需要使用类名访问它。main方法可直接用于JVM

JVM的工作原理:

public static void main(String[] args) {}
当需要执行任何Java类时,类加载器就会出现。Java类加载器是Java运行时环境的一部分,它将Java类动态加载到Java虚拟机中

图像取自:

当JVM开始执行Java文件时,它将

  • 首先编译.java文件并将其转换为包含
    字节码的.class文件,即机器语言或汇编语言。每次处理相同的字节码时,JVM都会与JIT(即时)编译器一起将字节码转换为本机代码

  • 使用系统类加载器和BoostrapperClassLoader加载.java文件和必要的包

  • 加载后,JVM将查看.class文件&存储所有信息,如变量、包、方法等,并将它们保存到内存中,初始化所有字段变量

  • JVM然后开始解释字节码&以人类可读的形式显示结果


  • 是的,我们无法从静态块访问非静态变量,因为非静态变量是实例变量&只能通过使用
    new
    操作符创建类的对象或使用类似
    class.newInstance()的反射来访问。然而,静态变量是类级别的&它的值对于每个对象都是常量。这意味着不需要创建类的对象来访问这些变量。您可以使用类名(不同类)或直接(在同一类内)访问静态变量,如:-

    main()方法:

    public static void main(String[] args) {}
    
    在Java中,main()方法是静态的&它是JVM的入口点。因为,main()方法不属于Java中的任何类。当我们在任何用户定义的类中定义
    main()
    方法时,它将属于该类。而且因为它是静态的&在同一个类中,所以不需要使用类名访问它。main方法可直接用于JVM

    JVM的工作原理:

    public static void main(String[] args) {}
    
    当需要执行到任何Java类ClassLoader时,就会出现这种情况。Java类加载器是Java运行时环境的一部分,动态地