Java 应用程序中的对象可以为空?
在许多类(活动、片段、适配器等)中,我需要访问对象 所以我开始上应用课。(应用程序,用户) MainAppliction.javaJava 应用程序中的对象可以为空?,java,android,android-activity,nullpointerexception,Java,Android,Android Activity,Nullpointerexception,在许多类(活动、片段、适配器等)中,我需要访问对象 所以我开始上应用课。(应用程序,用户) MainAppliction.java private static MainApplication singleton; public static MainApplication getApplication() { return singleton; } @Override public void onCreate() { super.onCreate(); single
private static MainApplication singleton;
public static MainApplication getApplication() {
return singleton;
}
@Override
public void onCreate() {
super.onCreate();
singleton = this;
}
private UserVo user; // I did not put null value
public UserVo getUser()(...)
public void setUser(UserVo user){...} // Called in LoginActivity
UserVo user;
@Override
public void onCreate(Bundle savedInstanceState) {
//...
app = ((MainApplication) getApplicationContext());
// or app = MainApplication.getApplication();
user = app.getUser(); // Always Not Null
//...
}
@Override
public void onResume() {
user.getData(); // Sometimes NullPointerExeception By GC (Maybe?)
}
ActivityA.java、ActivityB.java、ActivityC.java
private static MainApplication singleton;
public static MainApplication getApplication() {
return singleton;
}
@Override
public void onCreate() {
super.onCreate();
singleton = this;
}
private UserVo user; // I did not put null value
public UserVo getUser()(...)
public void setUser(UserVo user){...} // Called in LoginActivity
UserVo user;
@Override
public void onCreate(Bundle savedInstanceState) {
//...
app = ((MainApplication) getApplicationContext());
// or app = MainApplication.getApplication();
user = app.getUser(); // Always Not Null
//...
}
@Override
public void onResume() {
user.getData(); // Sometimes NullPointerExeception By GC (Maybe?)
}
如何防止空指针异常
我想有几个主意。但我不确定他们是否能解决
1。将Main应用程序中的UserVo用户更改为静态memeber
像这样(MainApplication.java)
2。调用getUser()不使用UserVo Memeber
像这样(Activity.java)
3。制作Inteface(它很复杂…我不想这样做)
像这样
(MainApplication.java)
(Activity.java)
请给我一些提示
如何防止空指针异常
简单
在构造函数中正确初始化所有对象,使它们100%准备好使用。不允许任何空引用
private static UserVo user;
如前所述,user
为null
。为什么?为什么是静态的?为什么不创建一个初始化为指向新的UserVo
引用的私有数据成员
否则,在使用引用之前,必须在所有地方检查null。这是一种糟糕的样式,只会在处理过程中变得更糟。另一种在处理后访问对象之前检查空值的方法。 事实上,检查空值并处理空值(通过java异常处理)总是一个好主意。此外,您还可以对变量/引用进行默认初始化,使对象上的方法调用不会产生副作用。 e、 g.如果是arrayList;声明一个类似List
abc=newarraylist()的变量
将为您创建一个空的arraylist。比如说,经过一些处理逻辑后,如果变量没有积累任何数据,它将保持为空;但不会抛出null指针异常
如何防止空指针异常
避免出现NullPointerException
的最安全方法是在访问对象引用之前检查对象引用以确保它们不为null。
虽然这种方法可以确保您不会遇到意外的NullPointerException,但它也会使代码膨胀,使开发变得更加困难,影响代码的可读性,并且可能会在代码中隐藏最终需要处理的不需要的情况
更好的方法是首先避免这些空值。有很多方法可以做到这一点。举几个例子:
- 检查方法参数是否为Null
- 考虑基本体而不是对象
- 喜欢空的
- 避免返回空值
- 阻止传递空参数
onResume
方法之前,user
对象没有初始化
@Override
public void onResume() {
MainApplication.getApplication().getUser(new OnUser() {
void onUser(UserVo user) {
//Do Work.
}
});
}
private static UserVo user;