main类中的static和构造函数中的非static

我只是想看看我是否能完全理解静态的概念以及主类中静态的原因。 关键字static指的是主类。 主类中的方法是静态的原因是因为主类不处理对象而是处理类本身。

但是构造函数处理对象因此使用非静态构造函数,因为对象具有独特的特性,并且使它们静态是没有意义的。

如果有人能看出我在陈述中是否犯了错误,或者能指引我走向正确的方向,那将对我有所帮助! 🙂

我只是想看看我是否能完全理解静态的概念以及主类中静态的原因。

Java中没有主类这样的东西。

关键字static指的是主类。

不,它指的是静态类或静态类成员。

主类中的方法是静态的原因是因为主类不处理对象而是处理类本身。

没有主类这样的东西。 这句话毫无意义。

但是构造函数处理对象因此使用非静态构造函数,因为对象具有独特的特性,并且使它们静态是没有意义的。

所有构造函数都是“非静态的”。 没有静态构造函数这样的东西。 任何讨论都没有意义。

如果有人能看出我在陈述中是否犯了错误,或者能指引我走向正确的方向,那将对我有所帮助! 🙂

我想你需要重新开始,忘记不存在的“主类”和“静态构造函数”。 基本上,静态方法指的是可以在没有类实例的情况下调用的方法。 相反,构造函数创建类的实例,因此它们在逻辑上不能是静态的。

从Java规范(第三版):

关于静态字段http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.1.1

如果一个字段被声明为static,那么无论该类最终可以创建多少个实例(可能为零),都只存在该字段的一个化身。 初始化类时,会生成静态字段(有时称为类变量)

关于静态方法http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.3.2

声明为static的方法称为类方法。 始终在不引用特定对象的情况下调用类方法。 尝试使用关键字this或关键字super引用当前对象或引用类方法体中任何周围声明的类型参数会导致编译时错误。 将静态方法声明为abstract是一个编译时错误。

不完全是…

static表示字段/方法等属于该类 ,而不属于该类的特定实例 。 该类的所有实例都可以访问静态字段,并且实例之间只共享一个静态字段的实例。

main方法必须是静态的,因为它是在不先创建实例的情况下调用的。

可以在不创建类实例的情况下调用所有静态方法 – 主方法调用的任何方法也必须是静态的,除非main方法创建类的实例 – 然后可以在该实例上调用实例方法。

 public class MyClass { // This name will dictate the name of your file public Sting myVariable = ""; // Field or Global variable public void MyClass() { // Constructor } public static void main (String[] args){ // This is the "main" "Method" MyClass.print("Hello "); // Static method call MyClass myClass = new MyClass(); // Non-static method call myClass.print("World"); } public static void print(String s){ // Static method System.out.print(s); } public void print(String s){ // Non-static method this.myVariable = s; // Changing the value of a field/global variable System.out.print(s); } } 

静态方法调用 – 当您进行静态方法调用时,不要对类/对象内部的数据进行持久更改。

非静态方法调用 – 对于这种类型的方法调用,必须使用Constructor方法(不能是静态的)“实例化”对象。 然后可以传递一个对象。 如果您的方法更改了类中的字段/全局变量的值,那么该值在该对象中保持不变,直到有人/其他人更改它为止。

实例化对象时,只能在该对象内“调用”(调用)非静态方法。 同样,您不能通过提供类名后跟一个句点后跟方法名称来调用必须调用它的对象的静态方法。

静态方法只能引用其他静态内容。 非静态可以引用两者。