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^^^^^^^");
}
}