Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我不能声明所有的方法都是静态的吗?_Java - Fatal编程技术网

Java 为什么可以';我不能声明所有的方法都是静态的吗?

Java 为什么可以';我不能声明所有的方法都是静态的吗?,java,Java,有人问我,为什么我不能声明所有的方法都是静态的?你能在这里给我解释一下吗?谢谢 我相信,当您将方法设置为静态时,它无法访问非静态成员?静态方法无法访问实例变量。:) 你可以。没有理由从这样的类实例化对象。任何状态在JVM中都是全局的 你的提问者可能把“不能”和“不应该”混淆了。你可以将所有方法声明为静态,但是你的方法将变为类级。假设您创建了10个具有不同状态的对象,其中状态由属性持有。在这种情况下,将无法使用静态方法获取对象的状态 Object obj; public static Object

有人问我,为什么我不能声明所有的方法都是静态的?你能在这里给我解释一下吗?谢谢


我相信,当您将方法设置为静态时,它无法访问非静态成员?

静态方法无法访问实例变量。:)


你可以。没有理由从这样的类实例化对象。任何状态在JVM中都是全局的


你的提问者可能把“不能”和“不应该”混淆了。

可以将所有方法声明为
静态
,但是你的方法将变为类级。假设您创建了10个具有不同状态的对象,其中状态由
属性持有。在这种情况下,将无法使用
静态
方法获取对象的
状态

Object obj;
public static Object getState(){

    return obj; // compile time error Cannot make a static reference to the non-static field 
}

实用程序类中,将所有方法都设置为静态是一种很好的做法

您可以将所有内容声明为静态。但什么样的正常比例对象模型需要所有静态方法,这是一个大问题。但结果将是一个使用现有类的结构化程序(想想C、Pascal),而不是真正的OOP。面向对象是Java编程的惯用方法,因此请尽量减少代码中静态关键字的数量。

没有这样的限制。可以使类中的所有方法都是静态的。在C#中,您甚至可以将类本身定义为静态的(要求其中的所有方法都是静态的)


这更多的是一个你想通过这门课获得什么的问题。

是的,你可以根据自己的需要来决定。但请记住“this”关键字将不起作用,在这种情况下您无法访问公共成员

您可以将所有方法定义为静态。这取决于你是否应该这样做。最好的选择是使用静态库方法。例如,下面是我创建的TestHelper实用程序类-

public class TestHelper {
    /**
     * Method echo.
     * 
     * @param heading
     *            String
     */
    public static void echo(String heading) {
        System.out.println("+++++++++++++++++++++++++");
        System.out.println("++++++ " + heading + " ++++++");
    }

    public static void end() {
        System.out.println("=========================");
    }

    public static void mark() {
        System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    }

    /**
     * Method spot.
     * 
     * @param string
     *            String
     */
    public static void spot(Object string) {
        System.out.println("*****_______" + string + "_______******");
    }

    /**
     * This is a stub method
     */
    public static void stub() {

    }

    public static void error(String string) {
        System.out.println("^^^^^^^^^^^Error Begining^^^^^^^^^^^^^^");
        System.out.println(string);
        System.out.println("^^^^^^^^^^^Error End^^^^^^^");
    }
}

我将从第一课开始:从JDK中选择几乎所有的类。一个简单的例子是需要两个实例,一个是TRUE,一个是FALSE,不能用静态方法实现。

你可以,但你不应该“你能在这里给我一个解释吗?”通过研究和总结你认为答案是什么,你能展示一些努力吗?如果一切都是静态的,实例化对象是无用的。这对静态实用程序库很好相关:@assylias谢谢!我来读这个。你好,你能给我举个例子吗?:)谢谢,为什么不将所有变量声明为静态呢?这根本不是一个有效的答案。任何状态在JVM中都是全局的。不,您可以使用普通类和静态方法来获取所述类并访问字段(就像C struct一样)。作为一项“利益”,methodsOK不会被推翻,而是被授予。还有
ThreadLocal
s。我认为
obj
已经是静态的,因为它属于类
Object
,对吗?请让我知道+1:)为什么不呢,这样做不会节省你制作物品的时间吗?你不能用这种方式调用类实例中的方法吗?并使用类实例访问变量?那么物体的意义是什么呢?
public class TestHelper {
    /**
     * Method echo.
     * 
     * @param heading
     *            String
     */
    public static void echo(String heading) {
        System.out.println("+++++++++++++++++++++++++");
        System.out.println("++++++ " + heading + " ++++++");
    }

    public static void end() {
        System.out.println("=========================");
    }

    public static void mark() {
        System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    }

    /**
     * Method spot.
     * 
     * @param string
     *            String
     */
    public static void spot(Object string) {
        System.out.println("*****_______" + string + "_______******");
    }

    /**
     * This is a stub method
     */
    public static void stub() {

    }

    public static void error(String string) {
        System.out.println("^^^^^^^^^^^Error Begining^^^^^^^^^^^^^^");
        System.out.println(string);
        System.out.println("^^^^^^^^^^^Error End^^^^^^^");
    }
}