0
  1. 静态 void 主类是程序的入口,无论哪个类调用它......还是它只是该特定类的入口方法......
  2. 这到底是如何工作的:

    public class init{
        public static void main(String[] args){
            new init();
        }
    
        public init(){
            System.out.print("hi");
        }
    }
    

    我不明白程序创建自身实例的方式......你为什么不能这样做?

    public class init{
        public static void main(String[] args){
            start();
        }
    
        public static void start(){
            System.out.print("hi");
        }
    }
    
  3. 静态与简单的公共到底做了什么。

4

6 回答 6

1

static并且public是不同的关键字。 public是一个访问修饰符static只需将成员指定为类范围。

public static void main以便 JVM 知道从何时开始执行您的程序。它只选择一个入口点并忽略其他入口点(如果有)。

无论哪种方式都有效,但这一切都归结为设计。也就是说,您希望您的构造函数显示一条消息,还是将该责任委托给另一个方法?而且该方法也不必是静态的。你可以这样:

new init().start() ;

这就是为什么编程很棒和这样的 PITA ;) 因为有很多方法可以完成一件事。

于 2012-10-19T23:25:52.640 回答
1

1)main是您“运行”Java 类的方式。一个程序可以有多个类,每个类都有自己的main. 当你运行它时,你指定要运行哪个类。

2)你可以这样做,但通常处理对象的实例而不是类更好。这样做有多种原因。

3)static表示它是类级别的变量/方法,而不是实例变量/方法。它们可以在类本身(例如,System.out实例(甚至是空引用)上调用,但这被认为是糟糕的形式。

于 2012-10-19T23:26:11.883 回答
1

静态 void 主类是您程序的入口,无论哪个类调用它......还是它只是该特定类的入口方法

就是说程序可以从哪个JVM启动的方法,很像mainC/C++程序中的函数。如果您有超过 1 个使用此方法的类,那么您应该告诉 JVM 哪个类将是程序入口。

静态与简单的公共到底做了什么

static关键字表示方法/变量属于类,简单的 private/protected/public/default 表示方法/变量属于类实例(对象)。

这到底是如何工作的

您正在创建init该类的一个实例。在 Java 代码中这样做没有错。在类构造函数中,程序会Hi在控制台打印一个单词。

于 2012-10-19T23:27:17.227 回答
0

嗯,你可以做第二件事。可以肯定的是,我只是编译它,它运行,并说:

hi>

静态实际上与公共无关,它是静态与动态的……以及公共与私有的。

请阅读:类中的“静态”关键字有什么作用?

顺便说一句,——你不必有 static 关键字来启动程序。你可以说:

public void main(String[] args)

大多数时候,你会过得去,虽然在你的情况下,你没有!

当我删除第一个static时,它给出了:

java.lang.NullPointerException错误 。我需要弄清楚为什么......所以,坚持到static void main你对 Java 足够了解为止!

于 2012-10-19T23:24:29.537 回答
0
  1. 进入你的程序

  2. 该类创建自己的一个实例,因为最终,它可能需要封装更多数据,而不仅仅是执行 System.out.print

  3. 在这种情况下,static 定义了一个 Class 方法——即,一个由类调用的方法,而不是由从该类实例化的对象调用的方法。

于 2012-10-19T23:24:45.977 回答
0

Java 的入口点始终是指定的main方法。在您的第一个示例中,您创建了一个类型的新对象init(类名是init
在您的 init 类的构造函数中,您告诉它写 hi。new您告诉它使用关键字创建一个新实例。构造函数是匹配类名的方法。

第二个示例不创建任何实例。您调用该start方法,该方法会打印 hi。您也可以编写init.start();,因为静态方法总是引用类型(类),而非静态方法总是需要对象引用才能执行。
这是您的第一个示例的修改版本来演示这一点:

public class Init{
    public static void main(String[] args){
        Init i = new Init();
        i.goodBye();
    }

    public Init(){
        System.out.print("hi");
    }

    public void goodBye() {
        System.out.print("Good Bye");
    }
}
于 2012-10-19T23:32:17.560 回答