好的,所以不要问为什么,但我尝试制作通用的public static void main()
方法。我已经尝试过使用这两种方法;
public class Foo {
public static void main(String[] args){
try {
this.getClass().newInstance().check();
} catch(Exception e) {
e.printStackTrace();
}
}
public void check() {
System.out.println("Check succesful");
}
}
我得到的错误是this
"不能在静态环境中使用"
好的,所以我知道我不能在静态上下文中使用this
,但我想知道的是如何在不使用Foo.check()
如果可能的话,我该怎么做?如果没有,我想知道原因。
答案 0 :(得分:3)
查看How to call getClass() from a static method in Java?和Getting the class name from a static method in Java之类的内容
interface Checkable {
public void check();
}
public class Foo implements Checkable {
public static void main(String[] args){
try {
Class currentClass = new Object() { }.getClass().getEnclosingClass();
Checkable instance = (Checkable) currentClass.newInstance();
instance.check();
} catch(Exception e) {
e.printStackTrace();
}
}
public void check() {
System.out.println("Check succesful");
}
}
可能会成功,但我不确定我是否应该推荐这样做......
答案 1 :(得分:2)
this
是当前实例。静态方法中没有实例。请参阅I want to know the difference between static method and non-static method
请改为:
public class Foo {
public static void main(String[] args) {
new Foo().check();
}
public void check() {
System.out.println("Check succesful");
}
}
作为评论的答案(我似乎无法发表评论):否。唯一的另一种方法是将check()
设为静态并调用Foo.check()
,但你不想这样做。
答案 2 :(得分:1)
静态上下文中没有this
;这正是静态的含义。您尝试的方法不起作用。您也许可以在命令行中提供您感兴趣的类的名称。
答案 3 :(得分:0)
因为,我知道在java实例变量中无法访问静态块util,你没有该类的对象,你想要访问哪个类的实例变量,这在java中是一个实例变量。所以你不能在任何静态块中访问这个变量,或者你需要对象引用。for further clarification check here。
答案 4 :(得分:0)
为什么不尝试这个?
public class Foo
{
public static void main(String[] args){
try
{
Foo obj = new Foo();
// this.getClass().newInstance().check();
obj.check();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void check()
{
System.out.println("Check succesful");
}
}