JavaRush /Blog Jawa /Random-JV /9 bab NULL ing Jawa
Sdu
tingkat

9 bab NULL ing Jawa

Diterbitake ing grup
Jawa lan null bebarengan. Ora ana programmer Java sing durung nemoni " pangecualian pointer null " lan iku kasunyatan sing nyenengake. Malah penemu konsep "null" kasebut minangka kesalahan milyar dolar, banjur kenapa Jawa ndhukung? null wis kene kanggo dangu, lan Aku guess sing nitahake Jawa ngerti sing nggawe masalah luwih saka solves, kok padha isih sijine munggah karo. Lan iki surprises kula malah luwih amarga filosofi Jawa wis kanggo menakake iku, kang kok padha ora kekacoan watara karo penunjuk, overloading operator lan sawetara warisan maneh, nanging kok null? 9 bab NULL ing Jawa - 1Inggih, Aku ora ngerti tenan jawaban kanggo pitakonan sing, nanging apa aku ngerti iku ora ketompo carane akeh null ngritik programer Jawa lan masyarakat open-source, kita kudu manggon karo. Tinimbang getun, luwih becik sinau luwih lengkap lan priksa manawa kita nggunakake null kanthi bener.

Napa sampeyan kudu sinau babagan null ing Jawa?

Amarga yen ora nggatekake null, sampeyan bisa yakin manawa Jawa bakal nggawe sampeyan nandhang sangsara java.lang.NullPointerExceptionlan bakal sinau, nanging sampeyan bakal entuk dalan sing angel. Nulis kode tahan kacilakan minangka seni lan tim, pelanggan lan pangguna sampeyan bakal ngormati. Ing pengalamanku, salah sawijining sebab utama NullPointerExceptionyaiku kurang kawruh babagan null ing basa Jawa. Akeh sing wis kenal karo null, liyane sampeyan bakal bisa sinau sawetara perkara lawas lan anyar babagan tembung kunci null. Ayo maneh maneh utawa sinau sawetara bab penting bab null ing Jawa.

Apa null ing Jawa

Kaya sing dakkandhakake, null minangka konsep sing penting banget ing Jawa. Iki asline diciptakake kanggo nunjukake ora ana apa-apa, kayata ora ana pangguna, sumber daya, utawa apa wae, nanging wis mbingungake programer Java kanthi akeh null pointer exception. Ing tutorial iki, kita bakal sinau fakta dhasar babagan tembung kunci null ing Jawa, lan sinau sawetara trik kanggo ngindhari masalah null pointer exceptionslan nyilikake mriksa null.
  1. Kaping pisanan, null minangka tembung kunci ing Jawa, kaya public, staticutawa final. Kasus sensitif, sampeyan ora bisa nulis null minangka Null utawa NULL, compiler ora bakal ngenali lan kesalahan bakal di buwang.

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

    Iki asring ditemoni dening programer sing wis ngalih saka basa pamrograman liyane, nanging nalika nggunakake IDE modern, masalah kasebut dadi ora pati penting. Dina iki, IDE kaya Eclipse utawa NetBeans bisa ndandani kesalahan iki nalika sampeyan ngetik, nanging ing jaman Notepad, Vim lan Emacs, iki minangka masalah umum sing bisa mangan akeh wektu sing larang.

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

    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

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

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

    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 к любому ссылочному типу пройдет успешно How во время компиляции, так и во время выполнения программы. В отличии от того, что многие из Вас возможно подумали, это не приведет к выбрасыванию NullPointerException.

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

    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 an objectу класса-обертки, а затем присвоить этот an object соответствующему примитивному типу, компилятор не отреагирует, но мы будем вознаграждены null pointer exception во время выполнения. Это происходит из-за авто упаковки (autoboxing) в Java, и мы еще встретимся с ним в следующем пункте.

  5. Любой класс-обертка со meaningм null будет выбрасывать java.lang.NullPointerException когда Java распакует(unbox) его в примитивную переменную. Некоторые программисты делают ошибку допуская, что авто упаковка(autoboxing) позаботится о конвертации null в meaning по умолчанию для соответствующего примитивного типа, например, 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а, показанного ниже прервется, How только Вы его запустите.

    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)

    Kode iki katon banget prasaja lan ora mbebayani. Sampeyan mung ngetung kaping pirang-pirang nomer katon ing larik, teknik klasik kanggo nemokake duplikat. Pangembang njupuk jumlah sing diitung sadurunge, nambah siji lan nglebokake maneh menyang Map. Dheweke bisa uga mikir yen tinju otomatis bakal ngurus konversi Integermenyang int, kaya nalika metode kasebut diarani put(), nanging dheweke lali yen nomer kasebut durung diitung, metode kasebut get()bakal bali HashMapnull, ora nol, amarga nilai standar. iku Integer iki null, ora 0, lan otomatis boxing bakal uncalan null pointer exceptionnalika nyoba Ngonversi integer menyang variabel int.

  6. Operator instanceofbakal ngasilake palsu yen ana variabel referensi kanthi nilai null utawa null dhewe ditemtokake minangka parameter. Tuladha:

    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

    Iki minangka properti penting saka operator instanceofsing ndadekake migunani kanggo nguji jinis cast.

  7. Sampeyan ngerti sing ora bisa nelpon cara non-statis ing variabel referensi null, bakal nelpon NullPointerException, nanging sampeyan bisa uga ora ngerti sing bisa nelpon cara statis ing variabel referensi null. Amarga cara statis nggunakake naleni statis, padha ora uncalan adoh NullPointerException. Iki contone:

    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. Sampeyan bisa pass null minangka parameter kanggo cara sing nampa sembarang tipe referensi, contone:

    public void print(Object obj)

    bisa diarani kaya

    print(null)

    Iki normal saka titik compiler tampilan, nanging prilaku sakteruse tanggung gumantung ing cara. Cara null-aman ora bakal mbuwang NullPointerException, nanging mung bakal metu anggun. Yen logika bisnis ngidini, dianjurake kanggo nulis cara null-aman.

  9. Sampeyan bisa mbandhingaké null nggunakake operator ==(padha) lan !=(ora padha), nanging sampeyan ora bisa nggunakake karo operator aritmetika utawa logis liyane kaya <(kurang saka) utawa >(luwih saka). Ora kaya SQL, Jawa null == nullbakal ngasilake bener kaya ing ngisor iki:

    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
Iki kabeh babagan null ing Jawa. Kanthi entuk sawetara pengalaman ing pemrograman Java lan nggunakake trik prasaja kanggo nyegah NullPointerException, sampeyan bisa nggawe kode aman. Amarga null bisa dianggep minangka Nilai kosong utawa uninitialized, iki asring sumber kebingungan, kang iku penting kanggo document prilaku cara nalika Nilai null input. Tansah elinga, null minangka nilai standar saka variabel referensi, lan sampeyan ora bisa nelpon cara conto utawa ngakses variabel conto nggunakake referensi null ing Jawa.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION