当我尝试在静态类中调用非静态方法时,出现了错误。
无法从类型 playback 中对非静态方法 methodName() 进行静态引用。
我不能将该方法设为静态的,因为这也会导致错误。
该静态方法无法隐藏来自 xInterface 的实例方法。
有没有办法解决在另一个静态方法中调用非静态方法的问题?(这两个方法位于不同的包和不同的类中)。
当我尝试在静态类中调用非静态方法时,出现了错误。
无法从类型 playback 中对非静态方法 methodName() 进行静态引用。
我不能将该方法设为静态的,因为这也会导致错误。
该静态方法无法隐藏来自 xInterface 的实例方法。
有没有办法解决在另一个静态方法中调用非静态方法的问题?(这两个方法位于不同的包和不同的类中)。
从静态方法中调用非静态方法的唯一方法是拥有包含非静态方法的类的实例。 根据定义,非静态方法是在某个类的实例上调用的,而静态方法属于类本身。
new Foo().nonStaticMethod();
首先创建一个类实例,然后使用该实例调用非静态方法。例如,
class demo {
public static void main(String args[]) {
demo d = new demo();
d.add(10,20); // to call the non-static method
}
public void add(int x ,int y) {
int a = x;
int b = y;
int c = a + b;
System.out.println("addition" + c);
}
}
public class StaticMethod{
public static void main(String []args)throws Exception{
methodOne();
}
public int methodOne(){
System.out.println("we are in first methodOne");
return 1;
}
}
上述代码未被执行,因为静态方法必须具有该类的引用。
public class StaticMethod{
public static void main(String []args)throws Exception{
StaticMethod sm=new StaticMethod();
sm.methodOne();
}
public int methodOne(){
System.out.println("we are in first methodOne");
return 1;
}
}
这一定会被执行。因为我们在这里创建了一个名为"sm"的引用,通过使用该类的引用(即StaticMethod=new Static method()
),我们调用了方法一(sm.methodOne()
)。
我希望这对你有所帮助。
您需要一个包含非静态方法的类的实例。
就像当您尝试在没有实例的情况下调用类 String
的非静态方法 startsWith
时:
String.startsWith("Hello");
String greeting = new String("Hello World");
greeting.startsWith("Hello"); // returns true
xInterface
中,并且您的类实现了xInterface
,就无法将该方法设为静态。xInterface
中定义),和一个静态方法。实例方法将由一行代码组成,委托给静态方法。从静态方法中调用非静态方法的唯一方法是拥有包含非静态方法的类的实例。
class A
{
void method()
{
}
}
class Demo
{
static void method2()
{
A a=new A();
a.method();
}
/*
void method3()
{
A a=new A();
a.method();
}
*/
public static void main(String args[])
{
A a=new A();
/*an instance of the class is created to access non-static method from a static method */
a.method();
method2();
/*method3();it will show error non-static method can not be accessed from a static method*/
}
}
AppEntryPoint.java
public interface AppEntryPoint
{
public void entryMethod();
}
Main.java
public class Main
{
public static AppEntryPoint entryPoint;
public static void main(String[] args)
{
entryPoint = new AppEntryPoint()
{
//You now have an environment to run your app from
@Override
public void entryMethod()
{
//Do something...
System.out.println("Hello World!");
}
}
entryPoint.entryMethod();
}
public static AppEntryPoint getApplicationEntryPoint()
{
return entryPoint;
}
}
这种方法不如创建该类的实例并调用其自身方法那样优雅,但本质上可以实现同样的功能。只是另一种做法。
在静态方法或者静态字段中使用非静态方法/字段,或者反过来最简单的方法是...
(为了使这种情况生效,必须至少有一个该类的实例)
这种情况在Android应用程序开发中很常见,例如:一个Activity至少有一个实例。
public class ParentClass{
private static ParentClass mParentInstance = null;
ParentClass(){
mParentInstance = ParentClass.this;
}
void instanceMethod1(){
}
static void staticMethod1(){
mParentInstance.instanceMethod1();
}
public static class InnerClass{
void innerClassMethod1(){
mParentInstance.staticMethod1();
mParentInstance.instanceMethod1();
}
}
}
String.valueOf(100);
有两种方法: