【问题标题】:Accessing methods of another class in first class without main method or any other method (directly inside a class) [duplicate]在没有主方法或任何其他方法的情况下访问第一类中另一个类的方法(直接在类内部)[重复]
【发布时间】:2021-01-05 23:26:58
【问题描述】:

我只是好奇为什么如果我们在方法中创建一个对象并调用A类的方法然后它可以工作,那么下面的代码不起作用。

 class Main {
     A a=new A();
     a.method();
     public static void main(String[] args) {

    
     }
     
}

class A{
     public void method(){
         
     }
}

【问题讨论】:

标签: java


【解决方案1】:

如果一个类中有 main 方法,并且它是您要运行的类,那么 java 总是在 main 方法内部开始执行。

例如在这种情况下,

public class Test {
    public static void main(String[] args) {
        A a = new A();
        a.method();
    }
    public static void method() {
        System.out.println("method() in class Test");
    }
}

class A {
    public static void main(String[] args) {
        Test.method();
    }
    public void method() {
        System.out.println("method() in class A");
    }
}

如果我运行Test.java,那么Test类的main方法会先执行,反之亦然。

现在有一种方法可以让 java 在查看类的 main 方法之前运行代码。看看下面的代码。

public class Test {
    static {
        A a = new A();
        a.method();
    }
    public static void main(String[] args) {
        System.out.println("main() of Test executing");
    }
}

class A {
    public void method() {
        System.out.println("method() in class A");
    }
}

在类中使用static{...} 使得首先执行static 块中的代码,然后是主块。它被称为 static initializer 是 java 类中的一个静态 {} 代码块,并且 在调用构造函数或 main 方法之前只运行一次。

它是任何java类中的一段代码static { ... },在类被调用时由虚拟机执行。

  • 不支持返回语句。
  • 不支持任何参数。 - 不支持 this 或 super。

通常这可以在任何地方使用。但我看到它大部分时间用于进行数据库连接、API 初始化、日志记录等。

【讨论】:

    【解决方案2】:

    静态方法保存在Java的“堆栈内存”中,而其他方法将保存在“堆内存”中。 在开始运行java代码时,它首先引用静态内存。由于 a.method() 在“堆内存”中,因此无法解析。

    所以运行这个来解决这个问题:

     class Main {
         public static void main(String[] args) {
         A a=new A();
         a.method();
        
         }
         
    }
    
    class A{
         public void method(){
             
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 1970-01-01
      • 2017-02-27
      • 2022-06-18
      • 2021-09-17
      • 1970-01-01
      • 2016-02-08
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多