JavaRush /Java-Blog /Random-DE /9 Dinge über NULL in Java
Sdu
Level 17

9 Dinge über NULL in Java

Veröffentlicht in der Gruppe Random-DE
Java und Null gehen Hand in Hand. Es gibt kaum einen Java-Programmierer, der nicht auf eine „ Nullzeiger-Ausnahme “ gestoßen ist, und das ist eine traurige Tatsache. Sogar der Erfinder des „Null“-Konzepts nannte es seinen Milliarden-Dollar-Fehler. Warum unterstützt Java es dann? null gibt es schon seit langer Zeit, und ich schätze, die Entwickler von Java wissen, dass es mehr Probleme schafft als es löst, warum lassen sie sich also immer noch damit ab? Und das überrascht mich umso mehr, weil die Philosophie von Java darin besteht, Dinge zu vereinfachen, weshalb man nicht mehr mit Zeigern, Operatorüberladung und Mehrfachvererbung herumspielt, aber warum null? 9 Dinge über NULL in Java - 1Nun, ich kenne die Antwort auf diese Frage nicht wirklich, aber ich weiß, dass wir damit leben müssen, egal wie sehr Null von Java-Programmierern und der Open-Source-Community kritisiert wird. Anstatt es zu bereuen, ist es besser, mehr zu lernen und sicherzustellen, dass wir null richtig verwenden.

Warum sollten Sie etwas über Null in Java lernen?

Denn wenn Sie nicht auf Null achten, können Sie sicher sein, dass Java Sie auf schreckliche Weise leiden lässt java.lang.NullPointerExceptionund Sie Ihre Lektion lernen, aber Sie werden den harten Weg gehen. Absturzsicheren Code zu schreiben ist eine Kunst und Ihr Team, Ihre Kunden und Benutzer werden es zu schätzen wissen. Meiner Erfahrung nach ist einer der Hauptgründe NullPointerExceptionmangelndes Wissen über Null in Java. Viele von Ihnen sind bereits mit null vertraut, der Rest von Ihnen wird einiges Altes und Neues über das Schlüsselwort null lernen können. Lassen Sie uns einige wichtige Dinge über Null in Java überprüfen oder lernen.

Was ist in Java null?

Wie gesagt, null ist ein sehr, sehr wichtiges Konzept in Java. Es wurde ursprünglich erfunden, um das Fehlen von etwas anzuzeigen, beispielsweise das Fehlen eines Benutzers, einer Ressource oder was auch immer, aber es stellt Java-Programmierer immer wieder vor ein Rätsel null pointer exception. In diesem Tutorial lernen wir die grundlegenden Fakten über das Schlüsselwort null in Java kennen und lernen einige Tricks kennen, um Probleme mit null pointer exceptionsNullprüfungen zu vermeiden und diese zu minimieren.
  1. Das Wichtigste zuerst: null ist ein Schlüsselwort in Java, genau wie public, staticoder final. Die Groß-/Kleinschreibung ist empfindlich, Sie können null nicht als Null oder NULL schreiben, der Compiler erkennt es nicht und es wird ein Fehler ausgegeben.

    Object obj = NULL; // Not Ok
    Object obj1 = null //Ok

    Dies tritt häufig bei Programmierern auf, die von anderen Programmiersprachen umgestiegen sind, bei der Verwendung moderner IDEs wird das Problem jedoch unbedeutend. Heutzutage können IDEs wie Eclipse oder NetBeans diesen Fehler während der Eingabe beheben, aber im Zeitalter von Notepad, Vim und Emacs war dies ein häufiges Problem, das viel wertvolle Zeit verschlingen konnte.

  2. Так же, Wie каждый примитив имеет Bedeutung по умолчанию, например, у int это 0, у boolean это false, null это Bedeutung по умолчанию любых ссылочных типов, проще говоря, для всех ein Objektов. Так же, Wie при создании логической переменной ее Bedeutung по умолчанию равно false, так и любые ссылочные переменные в Java по умолчанию будут равны null. Это истинно для всех типов переменных: переменной-члена oder локальной переменной, переменной экземпляра oder статической переменной, кроме того, компилятор будет ругаться, если Вы используете локальную переменную не проинициализировав ее.

    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

    Это истинно Wie для статических, так и для не статических ein Objektов, Wie Вы можете видеть здесь, я сделал myObj статической ссылкой, так что я могу использовать ее непосредственно в методе main, который является статическим методом и не позволяет обращаться к не статическим переменным изнутри.

  3. Несмотря на распространенное заблуждение, null это не ein Objekt (Object) и ни тип. Это просто специальное Bedeutung, которое может быть назначено любому ссылочному типу, и Вы можете привести null к любому типу, Wie показано ниже:

    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

    Как Вы можете видеть, приведение null к любому ссылочному типу пройдет успешно Wie во время компиляции, так и во время выполнения программы. В отличии от того, что многие из Вас возможно подумали, это не приведет к выбрасыванию NullPointerException.

  4. null может быть назначен только ссылочному типу, Вы не можете назначить null примитивной переменной вроде int, double, float oder boolean. Компилятор выразит Вам свое недовольство если Вы сделаете Wie показано ниже:

    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

    Как Вы можете видеть, когда мы непосредственно присваиваем null примитиву, то получаем ошибку процесса компиляции, но, если присвоить null ein Objektу класса-обертки, а затем присвоить этот ein Objekt соответствующему примитивному типу, компилятор не отреагирует, но мы будем вознаграждены null pointer exception во время выполнения. Это происходит из-за авто упаковки (autoboxing) в Java, и мы еще встретимся с ним в следующем пункте.

  5. Любой класс-обертка со Bedeutungм null будет выбрасывать java.lang.NullPointerException когда Java распакует(unbox) его в примитивную переменную. Некоторые программисты делают ошибку допуская, что авто упаковка(autoboxing) позаботится о конвертации null в Bedeutung по умолчанию для соответствующего примитивного типа, например, 0 для int, false для boolean и т.д., но это не верно, в чем можно убедиться ниже:

    Integer iAmNull = null;
    int i = iAmNull; // Remember - No Compilation Error

    Но, когда Вы запустите данный фрагмент Codeа, в консоли Вы увидите

    Exception in thread "main" java.lang.NullPointerException

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

    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 = {3, 5, 7,9, 11, 13, 17, 19, 2, 3, 5, 33, 12, 5};
            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)

    Dieser Code sieht sehr einfach und harmlos aus. Sie zählen einfach, wie oft eine Zahl in einem Array vorkommt, eine klassische Technik zum Auffinden von Duplikaten. Der Entwickler nimmt die zuvor gezählte Menge, erhöht sie um eins und fügt sie wieder ein Map. IntegerEr denkt vielleicht, dass Auto-Boxing die Konvertierung in übernimmt int, so wie es beim Aufruf der Methode der Fall ist , aber er vergisst, dass die Methode null und nicht Null zurückgibt put(), wenn die Zahl noch nicht gezählt wurde , da dies der Standardwert ist Ist eine Ganzzahl, ist dies null, nicht 0, und Auto-Boxing löst einen Fehler aus, wenn versucht wird, eine Ganzzahl in eine Variable umzuwandeln .get()HashMapnull pointer exceptionint

  6. Der Operator instanceofgibt false zurück, wenn eine Referenzvariable mit dem Wert null oder null selbst als Parameter angegeben wird. Beispiel:

    Integer iAmNull = null;
    if(iAmNull instanceof Integer){
        System.out.println("iAmNull is instance of Integer");
    }else{
        System.out.println("iAmNull is NOT an instance of Integer");
    }

    Output : iAmNull is NOT an instance of Integer

    Dies ist eine wichtige Eigenschaft des Operators instanceof, die ihn zum Testen von Typumwandlungen nützlich macht.

  7. Sie wissen, dass Sie keine nicht statische Methode für eine Null-Referenzvariable aufrufen können, sie wird aufgerufen NullPointerException, aber Sie wissen möglicherweise nicht, dass Sie eine statische Methode für eine Null-Referenzvariable aufrufen können. Weil Statische Methoden verwenden statische Bindung, sie werfen nicht weg NullPointerException. Hier ist ein Beispiel:

    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)
  8. Sie können null als Parameter an eine Methode übergeben, die jeden Referenztyp akzeptiert, zum Beispiel:

    public void print(Object obj)

    kann so genannt werden

    print(null)

    Aus Sicht des Compilers ist dies normal, das weitere Verhalten hängt jedoch vollständig von der Methode ab. Eine nullsichere Methode löst keine aus NullPointerException, sondern wird einfach ordnungsgemäß beendet. Wenn die Geschäftslogik dies zulässt, wird empfohlen, nullsichere Methoden zu schreiben.

  9. Sie können Null mit den Operatoren ==(gleich) und !=(ungleich) vergleichen, aber Sie können es nicht mit anderen arithmetischen oder logischen Operatoren wie <(kleiner als) oder >(größer als) verwenden. Im Gegensatz zu SQL null == nullgibt Java wie unten gezeigt true zurück:

    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
Hier dreht sich alles um Null in Java. Indem Sie etwas Erfahrung in der Java-Programmierung sammeln und einfache Tricks zur Vermeidung anwenden NullPointerException, können Sie Ihren Code sicher machen. Weil null kann als leerer oder nicht initialisierter Wert behandelt werden. Dies führt häufig zu Verwirrung. Deshalb ist es wichtig, das Verhalten einer Methode zu dokumentieren, wenn ein Nullwert eingegeben wird. Denken Sie immer daran, dass Null der Standardwert von Referenzvariablen ist und Sie in Java keine Instanzmethoden aufrufen oder auf Instanzvariablen zugreifen können, indem Sie eine Nullreferenz verwenden.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION