0

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

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

如果有人能看出我的陈述是否有误,或者能引导我朝着正确的方向前进,那将对我有很大帮助!:)

4

4 回答 4

7

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

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

关键字 static 指的是主类。

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

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

没有主类这样的东西。声明毫无意义。

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

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

如果有人能看出我的陈述是否有误,或者能引导我朝着正确的方向前进,那将对我有很大帮助!:)

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

于 2011-10-18T00:55:54.500 回答
2

来自 Java 规范(第三版):

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

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

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

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

于 2011-10-18T00:56:47.357 回答
1

不完全是...

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

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

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

于 2011-10-18T00:57:56.933 回答
-1
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);
    }
}

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

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

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

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

于 2011-10-18T01:28:44.363 回答