具体来说,我正在尝试这段代码:
package hello;
public class Hello {
Clock clock = new Clock();
public static void main(String args[]) {
clock.sayTime();
}
}
Run Code Online (Sandbox Code Playgroud)
但它给出了错误
无法访问静态方法main中的非静态字段
所以我把声明改为clock:
static Clock clock = new Clock();
Run Code Online (Sandbox Code Playgroud)
它奏效了.在声明之前放置该关键字是什么意思?对于该对象可以做什么,它究竟会做什么和/或限制什么?
当该类不需要跟踪内部状态时,我倾向于将类中的所有方法声明为静态.例如,如果我需要将A转换为B并且不依赖于可能变化的某个内部状态C,则创建静态转换.如果有一个我希望能够调整的内部状态C,那么我添加一个构造函数来设置C并且不使用静态转换.
我阅读了各种建议(包括在StackOverflow上),不要过度使用静态方法,但我仍然无法理解上面的经验法则错误.
这是一种合理的方法吗?
据我了解:
静态类仅适用于嵌套类,这意味着嵌套类没有对外部类的引用.
静态字段有点像全局变量,因为它只有一个实例,并且由同一个类的其他成员共享.
静态方法意味着即使对象尚未实例化也可以调用它.
我正在介绍Java课程,并试图巩固我的知识,并试图找出为什么不使用不同的关键字来表示不同的含义.
主要方法(Java请求您在类中拥有)是否必须是静态的?例如,我有这个代码
public class Sheet {
public static void main(String[] args) {
myMethod();
}
public void myMethod() {
System.out.println("hi there");
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误
无法对main的非静态调用方法进行静态引用
如果我清楚了,我从方法调用的任何方法都main必须是静态的,并且我从静态方法调用的每个方法都必须是静态的.
为什么我的全班(如果我们更进一步,我的整个程序)和方法必须是静态的?我怎么能避免这种情况?
我不明白为什么我们需要瞬态关键字来防止特定数据成员的序列化。我们也可以将其设为静态,因为静态数据成员无法序列化。如果我错了,请指导我!