Questions tagged «nullpointerexception»

当需要对象时,应用程序尝试使用null时引发的Java异常。

9
为什么要显式抛出NullPointerException而不是让它自然发生?
阅读JDK源代码时,笔者通常会检查参数是否为null,然后手动抛出新的NullPointerException()。他们为什么这样做?我认为没有必要这样做,因为它在调用任何方法时都会抛出新的NullPointerException()。(例如,以下是HashMap的一些源代码:) public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) { if (remappingFunction == null) throw new NullPointerException(); Node<K,V> e; V oldValue; int hash = hash(key); if ((e = getNode(hash, key)) != null && (oldValue = e.value) != null) { V v = remappingFunction.apply(key, oldValue); …


9
如何更有效地使用@Nullable和@Nonnull注释?
我可以看到@Nullable和@Nonnull注释可能有助于防止NullPointerExceptions,但它们不会传播太远。 这些注释的有效性在一个间接级别之后会完全下降,因此,如果仅添加一些注释,它们的传播就不会太远。 由于这些注释的执行不正确,因此存在以下危险:假定标有的值@Nonnull不为空,因此不执行空值检查。 以下代码使标记@Nonnull为的参数null不会引起任何投诉。它NullPointerException在运行时抛出一个。 public class Clazz { public static void main(String[] args){ Clazz clazz = new Clazz(); // this line raises a complaint with the IDE (IntelliJ 11) clazz.directPathToA(null); // this line does not clazz.indirectPathToA(null); } public void indirectPathToA(Integer y){ directPathToA(y); } public void directPathToA(@Nonnull Integer x){ x.toString(); // …


4
为什么String.valueOf(null)抛出NullPointerException?
根据文档,该方法String.valueOf(Object obj)返回: 如果参数是null,则字符串等于"null"; 否则,obj.toString()返回的值。 但是,当我尝试这样做时,怎么会这样: System.out.println("String.valueOf(null) = " + String.valueOf(null)); 它会抛出NPE吗?(如果您不相信,请自己尝试!) 线程“主”中的异常java.lang.NullPointerException 在java.lang.String。(未知来源) 在java.lang.String.valueOf(未知来源) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗?

19
空检查链与捕获NullPointerException
Web服务返回巨大的XML,我需要访问它的深层嵌套字段。例如: return wsObject.getFoo().getBar().getBaz().getInt() 问题是getFoo(),getBar(),getBaz()可能所有的回报null。 但是,如果我null在所有情况下都进行检查,则代码将变得非常冗长且难以阅读。此外,我可能会错过某些领域的检查。 if (wsObject.getFoo() == null) return -1; if (wsObject.getFoo().getBar() == null) return -1; // maybe also do something with wsObject.getFoo().getBar() if (wsObject.getFoo().getBar().getBaz() == null) return -1; return wsObject.getFoo().getBar().getBaz().getInt(); 可以写吗 try { return wsObject.getFoo().getBar().getBaz().getInt(); } catch (NullPointerException ignored) { return -1; } 或将其视为反模式?


5
Boolean.valueOf()有时会产生NullPointerException
我有以下代码: package tests; import java.util.Hashtable; public class Tests { public static void main(String[] args) { Hashtable<String, Boolean> modifiedItems = new Hashtable<String, Boolean>(); System.out.println("TEST 1"); System.out.println(modifiedItems.get("item1")); // Prints null System.out.println("TEST 2"); System.out.println(modifiedItems.get("item1") == null); // Prints true System.out.println("TEST 3"); System.out.println(Boolean.valueOf(null)); // Prints false System.out.println("TEST 4"); System.out.println(Boolean.valueOf(modifiedItems.get("item1"))); // Produces NullPointerException System.out.println("FINISHED!"); // …

13
NullPointerException访问onCreate()中的视图
对于经常在StackOverflow上发布的问题,这是一个规范的问题。 我正在学习教程。我使用向导创建了一个新活动。我得到NullPointerException试图调用一个方法时,View与s的粘度findViewById()在我的活动onCreate()。 活动内容onCreate(): @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View something = findViewById(R.id.something); something.setOnClickListener(new View.OnClickListener() { ... }); // NPE HERE if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } 布局XML(fragment_main.xml): <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="packagename.MainActivity$PlaceholderFragment" > <View android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/something" …


11
Eclipse / Android:“在项目上运行构建器'Android Pre Compiler'时出错...”
尝试在几个月未使用的Android项目上做一些工作,但是每次我尝试构建该项目时,Eclipse都会抛出一个对话框,说: 'Building workspace' has encountered a problem Errors occurred during the build. Errors running builder 'Android Pre Compiler' on project 'XXX' java.lang.NullPointerException 我在具有Android项目构建目标4.0.3(API级别15)的Mac上运行Eclipse,并且安装了以下版本的东西 Eclipse-3.7.2 Android开发工具-21.0.1 Android SDK-最多17 我已经尝试了一些事情,例如启动一个全新的工作区,安装此“ Subversive SVN JDT Ignore Extensions”,升级所有内容,确保源文件夹(或其他任何地方)中没有扩展名的文件,确保我的Java编译器为1.6,然后重新打开它。 编辑 这是Eclipse错误日志中针对此问题的堆栈跟踪: java.lang.NullPointerException at com.android.ide.eclipse.adt.internal.build.builders.PreCompilerBuilder.build(PreCompilerBuilder.java:673) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) …

2
为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?
为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常? 这是历史性事故还是故意的?该文档明确指出了的两种类型的异常Double.parseDouble(...)和的一种类型Integer.parseInt(),但似乎不一致: Integer.parseInt(null); // throws java.lang.NumberFormatException: null 然而 Double.parseDouble(null); // throws java.lang.NullPointerException

7
为什么这不引发NullPointerException?
需要对以下代码进行澄清: StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; referToSample.append("B"); System.out.println(sample); 这将打印出来,B以便证明sample和referToSample对象引用相同的内存引用。 StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; sample.append("A"); referToSample.append("B"); System.out.println(referToSample); 这将打印出来AB,也证明是相同的。 StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; referToSample = null; referToSample.append("A"); System.out.println(sample); 显然,这将引发,NullPointerException因为我试图调用append空引用。 StringBuilder sample = new StringBuilder(); StringBuilder referToSample = sample; …

4
Android:将数据(扩展名)传递给片段
我是Android编程的新手,将Parcelable的ArrayList传递给片段时遇到了问题。这是启动的活动(效果很好!),其中feedlist是可打包音乐的ArrayList。 Intent in = new Intent(context, ListMusicsActivity.class); in.putExtra("arrayMusic", feedList); activity.startActivity(in); 片段Activity onCreate()方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activitymusiclist); if(savedInstanceState != null) { ListMusicFragment frag = new ListMusicFragment(); frag.setArguments(getIntent().getExtras()); } } 片段代码: public class ListMusicFragment extends SherlockFragment{ private ArrayList<Music> listMusics = new ArrayList<Music>(); private ListView listMusic; @Override public View …

7
为什么在Java中将Integer与int进行比较会抛出NullPointerException?
观察这种情况令我非常困惑: Integer i = null; String str = null; if (i == null) { //Nothing happens ... } if (str == null) { //Nothing happens } if (i == 0) { //NullPointerException ... } if (str == "0") { //Nothing happens ... } 因此,我认为装箱操作首先执行(即Java尝试从中提取int值null),而比较操作的优先级较低,这就是引发异常的原因。 问题是:为什么要用Java这样实现?为什么装箱优先于比较参考?还是为什么他们没有null在装箱前实施验证? 此刻,当NullPointerException它与包装的基元一起抛出而不是与真实的对象类型一起抛出时,它看起来不一致。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.