Java what class is null

What is null in Java

In this article, we will discuss the null in java. Java and null share a unique bond across the board, whether we are using it as a default or placeholder or being used as a filler for a variable intentionally.

1. What is null and why it is used?

Recall what a variable is and what a value is. A common analogy will be to consider the variable as a container and value as what the container has inside. Each variable must have a type that will define the kind of value contained within the container.
There are two major categories of types in Java: primitive and reference. Variables declared of a primitive type store values; variables declared of a reference type store references. Main.java

In the code snippet shown above, we have 3 cases, One is the Object obj and int numOne , which are have not been initialized and int num which is initialized to 10. Since the Object is reference type and int is a primitive type, obj has null stored in it and numOne has 0 stored in it. The output of Main.java is shown in fig 1 below.

Читайте также:  Java lang string utf 8

null in Java - Output of Main.java

2. Properties of null

2.1 null keyword

In Java, this word is a reserved word for literal values. It seems like a keyword, but actually, it is a literal similar to true and false.

2.2 null used as defaults

This word is used as a default value for the uninitialized variable of reference types like Object or user-defined class. It will not be used as a default variable for any variable of primitive types, like, int and float.

2.3 Casting null objects to Other Types in Java

Typecasting null to any reference type is fine at both compile-time and runtime. It will not throw any error or exception. The same is shown in the code snippet below. CastingNull.java

null in Java - Output of CastingNull.java

The output of the above code snippet is shown in fig 2 below.

2.4 null with instanceof operator

instanceof operator will return false if used against any reference variable with null value or null literal itself. We can see it in action in code snippet below NullWithInstanceOf.java

public class NullWithInstanceOf < public static void main(String[] args) < Integer variableWithNull = null; System.out.println("Checking instanceof with Integer type variable with null stored"); if (variableWithNull instanceof Integer) < System.out.println("variableWithNull is instance of Integer"); >else < System.out.println("variableWithNull is NOT an instance of Integer"); >> >

null in Java - Output of NullWithInstanceOf.java

The output of the above code snippet is shown in fig 3 below.

3. NullPointerException

NullPointerException is a RuntimeException . In Java, a special null value can be assigned to an object reference. NullPointerException is thrown when an application attempts to use an object reference with null value.

3.1 When is NullPointerException thrown

NullPointerException can be thrown in any case where running java program tries to use an object reference with null value in it. This can happen when java tries to call an instance method on the object referred by a null reference.

3.2 NullPointerException with Static variables

In this section, we will cover the case when we try to use static java variables with a null reference. Java will not throw an NullPointerException in this case. This is explained in the code snippet below. NullPointerExceptionWithStatic.java

public class NullPointerExceptionWithStatic < private static Object unInitialisedStaticObject; // this is an uninitialised static object public static void main(String[] args) < System.out.println(); System.out.print("What is the value of unInitialisedStaticObject :: "); System.out.println(unInitialisedStaticObject); // java will not throw NullPointerException >>

The output of the above code snippet is shown in fig 4 below.

3.3 NullPointerException with non Static variables

In this section we will cover the case when we try to use non static java variables with null reference. Java will throw an NullPointerException in this case. This will happen in case of any wrapper class with value null will throw NullPointerException when Java unbox them into primitive values. This is explained in the code snippet below. NullPointerExceptionWithNonStatic.java

import java.util.HashMap; import java.util.Map; public class NullPointerExceptionWithNonStatic < public static void main(String[] args) < Map numberAndCount = new HashMap(); int[] numbers = ; for (int i : numbers) < int count = (int) numberAndCount.get(i); // NullPointerException numberAndCount.put(i, count++); >> >

The output of the above code snippet is shown in fig 5 below.

4. null in Java – Summary

To summarize we have covered the common scenarios around the null in java. We have cover how to use it and where to use it and how it can be used as the placeholder for reference type variables. We have also discussed a very common exception associated with i.e., NullPointerException.

6. Download the Source Code

Last updated on Jul. 28th, 2021

Источник

9 вещей о NULL в Java

Java-университет

9 вещей о NULL в Java - 1

Java и null неразрывно связаны. Едва ли существует Java-программист, не встречавшийся с «null pointer exception» и это печальный факт. Даже изобретатель концепции «null» назвал ее своей ошибкой на миллиард долларов, тогда зачем Java поддерживает ее? null был здесь долгое время, и я полагаю, создатели Java знают, что он создает больше проблем чем решает, так почему же они все еще мирятся с этим. И это удивляет меня еще больше, потому что философией Java было упростить вещи, вот почему они больше не возятся с указателями, перегрузкой операторов и множественным наследованием, но почему null?Ну, я действительно не знаю ответ на этот вопрос, но, что я точно знаю, не имеет значения сколько бы null критиковался Java-программистами и open-source сообществом, мы должны жить с ним. Вместо того чтобы сожалеть, лучше узнать больше и быть уверенным что мы используем null правильно.

Почему Вы должны узнать о null в Java?

Потому что, если Вы не обратите внимания на null, будьте уверены, Java заставит страдать от ужасного java.lang.NullPointerException и Вы выучите этот урок, но пойдете более трудным путем. Написание устойчивого к «падениям» кода — это искусство и Ваша команда, заказчики и пользователи оценят это. По моему опыту, одна из основных причин NullPointerException это недостаток знаний о null в Java. Многие из Вас уже знакомы с null, остальные смогу узнать некоторые старые и новые вещи о ключевом слове null. Давайте повторим или узнаем некоторые важные вещи о null в Java.

Что есть null в Java

  1. Перво-наперво, null это ключевое слово в Java, так же как public , static или final . Регистр учитывается, Вы не можете писать null как Null или NULL, компилятор не распознает его и будет выброшена ошибка.
 Object obj = NULL; // Not Ok Object obj1 = null //Ok 
 private static Object myObj; public static void main(String args[]) < System.out.println("What is value of myObjc : " + myObj); >What is value of myObjc : null 
 String str = null; // null can be assigned to String Integer itr = null; // you can assign null to Integer also Double dbl = null; // null can also be assigned to Double String myStr = (String) null; // null can be type cast to String Integer myItr = (Integer) null; // it can also be type casted to Integer Double myDbl = (Double) null; // yes it's possible, no error 
 int i = null; // type mismatch : cannot convert from null to int short s = null; // type mismatch : cannot convert from null to short byte b = null: // type mismatch : cannot convert from null to byte double d = null; //type mismatch : cannot convert from null to double Integer itr = null; // this is ok int j = itr; // this is also ok, but NullPointerException at runtime 
 Integer iAmNull = null; int i = iAmNull; // Remember - No Compilation Error 
 Exception in thread "main" java.lang.NullPointerException 

Это часто происходит при работе с HashMap и Integer key . Выполнение кода, показанного ниже прервется, как только Вы его запустите.

 import java.util.HashMap; import java.util.Map; /** * An example of Autoboxing and NullPointerExcpetion * * @author WINDOWS 8 */ public class Test < public static void main(String args[]) throws InterruptedException < Map numberAndCount = new HashMap<>(); int[] numbers = ; for(int i : numbers) < int count = numberAndCount.get(i); numberAndCount.put(i, count++); // NullPointerException here >> > 
 Output: Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:25) 
 Integer iAmNull = null; if(iAmNull instanceof Integer)< System.out.println("iAmNull is instance of Integer"); >else
 Output : iAmNull is NOT an instance of Integer 
 public class Testing < public static void main(String args[])< Testing myObject = null; myObject.iAmStaticMethod(); myObject.iAmNonStaticMethod(); >private static void iAmStaticMethod() < System.out.println("I am static method, can be called by null reference"); >private void iAmNonStaticMethod() < System.out.println("I am NON static method, don't date to call me by null"); >> 
 Output: I am static method, can be called by null reference Exception in thread "main" java.lang.NullPointerException at Testing.main(Testing.java:11) 
 public void print(Object obj) 
 public class Test < public static void main(String args[]) throws InterruptedException < String abc = null; String cde = null; if(abc == cde)< System.out.println("null == null is true in Java"); >if(null != null) < System.out.println("null != null is false in Java"); >// classical null check if(abc == null) < // do something >// not ok, compile time error if(abc > null) < >> > 
 Output: null == null is true in Java 

Источник

Является ли null в Java объектом?

Java-университет

Является ли null объектом? Я могу совершенно точно сказать, что не является. В том смысле, что (null instanceof Object) выдаст значение false . Вот что ещё нужно знать о null:

Является ли null в Java объектом? - 1

  1. Вы не можете вызвать метод со значением null: x.m() выдаст ошибку, когда x является null, а m — нестатический метод. Кстати, если m — статический метод, товсё хорошо, поскольку важен только класс x , а значение игнорируется.
  2. Есть только один null на всех, а не отдельный для каждого класса. Таким образом, ((String) null == (Hashtable) null) , например.
  3. Вполне допустимо передавать null в качестве параметра методу, если метод это допускает (некоторые методы допускают null-параметр, другие — нет). Так, например, вы вполне можете написать System.out.println (null) , а вот butstring.compareTo (null) не получится. Так что всегда указывайте в javadoc-комментариях ваших методов, допустим ли null в качестве их параметров, если это не вполне очевидно.
  4. В JDK начиная с версии 1.1 и вплоть до 1.1.5 передача null в качестве литерального параметра(literal argument) конструктору анонимного внутреннего класса (например, new SomeClass(null) < . >вызывало ошибку компиллятора. Зато можно передать выражение со значением null, или передать принудительный null, в виде new SomeClass((String) null)
  5. Существует по меньшей мере три разных случая, которые обычно выражены с помощью null:
    • Uninitialized (отсутствие инициализации). Переменная или слот, которой ещё не присвоили никакго значения.
    • Non-existant/not applicable («не существует/не применимо»).Например, терминальные узлы бинарного дерева можно назвать обычными узлами с null-потомками.
    • Empty (пустота чего-либо). Например, вы можете использовать null чтобы представить пустое дерево. Обратите внимание, что это существенно отличается от предыдущего случая (на практике их часто путают). Разница заключается в том, является ли null приемлемым узлом дерева или null означает, что значение не нужно обрабатывать как узел дерева.

Сравните три реализации узлов бинарного дерева с методами последовательного вывода в консоль:

 // null означает «не применимо» // Здесь нет пустого дерева. class Node < Object data; Node left, right; void print() < if (left != null) left.print(); System.out.println(data); if (right != null) right.print(); >> 
 // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node < Object data; Node left, right; void static print(Node node) < if (node != null) node.print(); >void print() < print(left); System.out.println(data); print(right); >> 
 // Отдельный класс для Empty // null не используется interface Node < void print(); >class DataNode implements Node < Object data; Node left, right; void print() < left.print(); System.out.println(data); right.print(); >> class EmptyNode implements Node < void print() < >> 

Источник

Оцените статью