{"id":63371,"date":"2020-08-28T06:11:43","date_gmt":"2020-08-28T06:11:43","guid":{"rendered":"https:\/\/www.baeldung.com\/?p=86300"},"modified":"2020-08-28T06:11:43","modified_gmt":"2020-08-28T06:11:43","slug":"illegalargumentexception-or-nullpointerexception-for-a-null-parameter","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2020\/08\/28\/illegalargumentexception-or-nullpointerexception-for-a-null-parameter\/","title":{"rendered":"IllegalArgumentException or NullPointerException for a Null Parameter?"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<h2 data-id=\"introduction\">1. Introduction<\/h2>\n<div class=\"bd-anchor\" id=\"introduction\"><\/div>\n<p>Among the decisions we make as we&#8217;re writing our applications, many are about when to throw <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-exceptions\">exceptions<\/a> and which type to throw.<\/p>\n<p>In this quick tutorial, we&#8217;re going to tackle the issue of which exception to throw when someone passes a <em>null<\/em> parameter to one of our methods: <em>IllegalArgumentExcpetion<\/em> or <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-14-nullpointerexception\"><em>NullPointerException<\/em><\/a>.<\/p>\n<p>We&#8217;ll explore the topic by examining the arguments for both sides.<\/p>\n<h2 data-id=\"illegalargumentexception\">2. <em>IllegalArgumentException<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"illegalargumentexception\"><\/div>\n<p>First, let&#8217;s look at the arguments for throwing an <em>IllegalArgumentException<\/em>.<\/p>\n<p>Let&#8217;s create a simple method that throws an\u00a0<em>IllegalArgumentException<\/em> when passed a <em>null<\/em>:<\/p>\n<pre><code class=\"language-java\">public void processSomethingNotNull(Object myParameter) {\r\n    if (myParameter == null) {\r\n        throw new IllegalArgumentException(\"Parameter 'myParameter' cannot be null\");\r\n    }\r\n}<\/code><\/pre>\n<p>Now, let&#8217;s move onto the arguments in favor of <em>IllegalArgumentException<\/em>.<\/p>\n<h3 data-id=\"1-its-how-the-javadoc-says-to-use-it\">2.1. It&#8217;s How the Javadoc Says to Use It<\/h3>\n<div class=\"bd-anchor\" id=\"1-its-how-the-javadoc-says-to-use-it\"><\/div>\n<p>When we read the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.oracle.com\/en\/java\/javase\/14\/docs\/api\/java.base\/java\/lang\/IllegalArgumentException.html\">Javadoc for <em>IllegalArgumentException<\/em><\/a>, it says <strong>it&#8217;s for use when an illegal or inappropriate value is passed to a method<\/strong>. We can consider a <em>null<\/em> object to be illegal or inappropriate if our method isn&#8217;t expecting it, and this would be an appropriate exception for us to throw.<\/p>\n<h3 data-id=\"2-it-matches-developer-expectations\">2.2. It Matches Developer Expectations<\/h3>\n<div class=\"bd-anchor\" id=\"2-it-matches-developer-expectations\"><\/div>\n<p>Next, let&#8217;s think about how we, as developers, think when we see stack traces in our applications. A very common scenario in which we receive a <em>NullPointerException<\/em> is when we&#8217;ve accidentally tried to access a <em>null<\/em> object. In this case, we&#8217;re going to go as deep into the stack as we can to see what we&#8217;re referencing that&#8217;s <em>null<\/em>.<\/p>\n<p>When we get an <em>IllegalArgumentException<\/em>, we are likely to assume that we&#8217;re passing something wrong to a method. In this case, we&#8217;ll look in the stack for the bottom-most method we&#8217;re calling and start our debugging from there. If we consider this way of thinking, the <em>IllegalArgumentException<\/em> is going to get us into our stack closer to where the mistake is being made.<\/p>\n<h3 data-id=\"23-other-arguments\">\u00a02.3. Other Arguments<\/h3>\n<div class=\"bd-anchor\" id=\"23-other-arguments\"><\/div>\n<p>Before we move onto the arguments for <em>NullPointerException<\/em>, let&#8217;s look at a couple of smaller points in favor of <em>IllegalArgumentException<\/em>. Some developers feel that only the JDK should be throwing <em>NullPointerException<\/em>. As we&#8217;ll see in the next section, the Javadoc doesn&#8217;t support this theory. Another argument is that it&#8217;s more consistent to use <em>IllegalArgumentException<\/em> since that&#8217;s what we&#8217;d use for other illegal parameter values.<\/p>\n<h2 data-id=\"nullpointerexception\">3. <em>NullPointerException<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"nullpointerexception\"><\/div>\n<p>Next, let&#8217;s consider the arguments for <em>NullPointerException<\/em>.<\/p>\n<p>Let&#8217;s create an example that throws a <em>NullPointerException<\/em>:<\/p>\n<pre><code class=\"language-java\">public void processSomethingElseNotNull(Object myParameter) {\r\n    if (myParameter == null) {\r\n        throw new NullPointerException(\"Parameter 'myParameter' cannot be null\");\r\n    }\r\n}<\/code><\/pre>\n<h3 data-id=\"1-its-how-the-javadoc-says-to-use-it-1\">3.1. It&#8217;s How the Javadoc Says to Use It<\/h3>\n<div class=\"bd-anchor\" id=\"1-its-how-the-javadoc-says-to-use-it-1\"><\/div>\n<p>According to the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.oracle.com\/en\/java\/javase\/14\/docs\/api\/java.base\/java\/lang\/NullPointerException.html\">Javadoc for <em>NullPointerException<\/em><\/a>, <strong><em>NullPointerException<\/em> is meant to be used for attempting to use <em>null<\/em> where an object is required<\/strong>. If our method parameter isn&#8217;t intended to be <em>null<\/em>, then we could reasonably consider this as an object being required and throw the <em>NullPointerException<\/em>.<\/p>\n<h3 data-id=\"2-its-consistent-with-jdk-apis\">3.2. It&#8217;s Consistent with JDK APIs<\/h3>\n<div class=\"bd-anchor\" id=\"2-its-consistent-with-jdk-apis\"><\/div>\n<p>Let&#8217;s take a moment to think about many of the common JDK methods we call during development. Many of them throw a <em>NullPointerException<\/em> if we provide a <em>null<\/em>. Additionally, <em>Objects.requireNonNull() <\/em>throws a\u00a0<em>NullPointerException\u00a0<\/em>if we pass in <em>null.<\/em> According to the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.oracle.com\/en\/java\/javase\/14\/docs\/api\/java.base\/java\/util\/Objects.html#requireNonNull(T)\"><em>Objects<\/em> documentation,<\/a> it exists mostly for validating parameters.<\/p>\n<p>In addition to JDK methods that throw <em>NullPointerException<\/em>, we can find other examples of specific exception types being thrown from methods in the Collections API. <strong><em>ArrayList.addAll(index, Collection)<\/em> throws an <em>IndexOutOfBoundsException<\/em> if the index is outside of the list size and throws a <em>NullPointerException<\/em> if the collection is <em>null<\/em><\/strong>. These are two very specific exception types rather than the more generic <em>IllegalArgumentException<\/em>.<\/p>\n<p>We could consider <em>IllegalArgumentException<\/em> to be meant for cases when we don&#8217;t have a more specific exception type available to us.<\/p>\n<h2 data-id=\"conclusion\">4. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>As we&#8217;ve seen in this tutorial, this is a question that doesn&#8217;t have a clear answer. The documentation for the two exceptions seems to overlap in that when taken alone, they both sound appropriate. There are also additional compelling arguments for both sides based on how developers do their debugging and on patterns seen in the JDK methods themselves.<\/p>\n<p>Whichever exception we chose, we should be consistent throughout our application. Additionally, we can make our exceptions more useful by providing meaningful information to the exception constructor. For example, our applications will be easier to debug if we provide the parameter name in the exception message.<\/p>\n<p>As always, the example code is available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/core-java-modules\/core-java-exceptions-3\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/634675364\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/634675364\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-illegalargumentexception-or-nullpointerexception#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-illegalargumentexception-or-nullpointerexception\/feed\/\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Explore the issue of which exception to throw when someone passes a null parameter to one of our methods: IllegalArgumentExcpetion or NullPointerException.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>&nbsp;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\"><\/a>&nbsp;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/634675364\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>&nbsp;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>&nbsp;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>&nbsp;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/634675364\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>&nbsp;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-illegalargumentexception-or-nullpointerexception#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&nbsp;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-illegalargumentexception-or-nullpointerexception\/feed\/\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&nbsp;<\/div>\n<\/div>","protected":false},"author":779,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"IllegalArgumentException or NullPointerException for a Null Parameter? - ITTeacherITFreelance.hk","description":"Explore the issue of which exception to throw when someone passes a null parameter to one of our methods: IllegalArgumentExcpetion or NullPointerException. &nbs"},"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/63371"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/779"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=63371"}],"version-history":[{"count":10,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/63371\/revisions"}],"predecessor-version":[{"id":68022,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/63371\/revisions\/68022"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=63371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=63371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=63371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}