有没有办法调用公共非静态变量或方法而不实例化其类java ...
答案 0 :(得分:9)
在Java中,没有办法调用非静态变量,即没有instance
的实例成员。
有一个原因,来自Understanding Instance and Class Members
当从同一个类蓝图创建多个对象时,它们每个都有自己不同的实例变量副本。
静态方法属于Class而不属于特定instance
答案 1 :(得分:2)
不,因为它违背了静态的目的
答案 2 :(得分:2)
不,没有实例调用实例变量是没有意义的。
答案 3 :(得分:1)
不是那不可能,你不能在没有创建实例的情况下调用非静态方法。但是如果你不想创建实例并希望直接调用那么将这些方法设为静态
答案 4 :(得分:1)
您需要一个对象来调用非静态方法,但它不必是定义方法的类的对象 - 它也可以是该类的子类的对象。
如果很难将手放在该类的对象上,这可能很有用 - 例如,如果它的构造函数具有难以获取且无法填充的参数,或者您需要从中创建对象另一个难以获得的对象中的方法。在这些情况下,您可以使用自己的类扩展该类,该类具有更容易的构造函数,创建该子类的对象并自己调用它。
请记住,这种方法是黑客和危险的,并且违反了OOP的核心原则。你的子类跳过它扩展的类的常规构造,因为那个构造太复杂了(如果不是你只是直接实例化它),你可以相当确定原始构造过程很重要,而且有些 - 如果不是大多数 - 该对象的功能将无法正常工作:如果幸运,抛出异常,如果你不太幸运,它可能会产生不良结果甚至损坏其他对象。即使你需要使用这种方法正确运行一种方法,未来对该类的更改也可能会使该方法依赖于正确的构造,这将破坏您的代码。
所以 - 使用风险自负!
public class MyNewClass extends ClassWithNonStaticMethod{
public MyNewClass(){
//Not doing proper construction
}
}
//somewhere in your code:
new MyNewClass().nonStaticMethod();
答案 5 :(得分:1)
要回答你的问题,不,你不能。 Java不是为了让你这么做而设计的。
但是,我认为更重要的是要问:为什么你认为你需要这样做?
如果你无法控制这个类(即它的库类),并且你觉得有必要这样做,你可能错误地使用了库。
如果您可以修改该类,请将其设置为静态。