Non-static method ‘getSystemService(java.lang.String)’ cannot be referenced from a static context,给出相应的代码,静态上下文引用非静态方法
时间: 2024-10-12 08:01:09 浏览: 26
android-AppShortcuts-master.zip_Java编程_Java_
这个错误提示 "Non-static method 'getSystemService(java.lang.String)' cannot be referenced from a static context" 意味着你在试图在一个静态方法(Static Method)中直接调用一个非静态方法(Non-static Method),这是不允许的,因为静态方法不具备访问实例变量或非静态成员的能力。非静态方法通常需要一个对象作为上下文来进行操作。
举个例子,在Android应用中,`Context.getSystemService()` 是一个非静态方法,它需要一个 `Context` 对象才能获取系统服务:
```java
// 非静态方法示例,需要 Context 实例
public class MyClass {
private Context myContext;
public MyClass(Context context) {
this.myContext = context;
}
// 在非静态方法中可以调用 getSystemService
public String getService(String serviceName) {
return myContext.getSystemService(serviceName);
}
}
// 现在从静态上下文中尝试访问将会报错
public static void main(String[] args) {
// 这里尝试直接调用会出错
// Context systemService = MyClass.getSystemService("someService");
// 错误:Non-static method 'getSystemService(java.lang.String)' cannot be referenced from a static context
}
```
正确的做法是在非静态方法中调用非静态方法,例如:
```java
public static void main(String[] args) {
MyClass obj = new MyClass(YourApplicationContext.getInstance()); // 获取到 Context 实例
String service = obj.getService("someService"); // 正确地通过对象调用非静态方法
}
```
阅读全文