主类java中的static和构造函数中的非static

时间:2011-10-18 00:50:17

标签: java class static constructor non-static

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

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

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

4 个答案:

答案 0 :(得分:7)

  

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

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

  

关键字static指的是主类。

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

  

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

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

  

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

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

  

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

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

答案 1 :(得分: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

  

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

答案 2 :(得分:1)

不完全......

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

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

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

答案 3 :(得分:-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);
    }
}

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

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

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

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