JavaRush /Blog Jawa /Random-JV /Ngopi #98. Pengecualian Nullpointer anyar ing Jawa 17. Ap...

Ngopi #98. Pengecualian Nullpointer anyar ing Jawa 17. Apa tegese ing Jawa?

Diterbitake ing grup

Pangecualian Nullpointer anyar ing Jawa 17

Sumber: Dev.to Saben pangembang Jawa kudu ngerti babagan anane Nullpointer Exception utawa NPE anyar ing Jawa 17. Iki minangka salah sawijining kahanan sing kudu dicegah. Kadhangkala Nullpointer tegese sampeyan kudu debug kode kanggo nemokake bug cilik. Ngopi #98.  Pengecualian Nullpointer Anyar ing Jawa 17. Apa <T>  ing Jawa?  - 1NPE minangka pangecualian runtime sing kedadeyan nalika kode sampeyan pengin nggunakake obyek utawa referensi kanggo obyek sing nduweni nilai null. Bisa kedadeyan yen ora ana nilai sing ditugasake utawa obyek ora duwe referensi. Sadurunge OpenJDK versi paling anyar (versi 17), pangecualian Nullpointer normal ing tilak tumpukan bakal katon kaya iki:
java.lang.NullPointerException: null
Mesthi, ora mung sampeyan kudu ngerti babagan jejak tumpukan. Nalika sampeyan bisa ndeleng, iku ora nuduhake ngendi utawa ngapa pangecualian iki dumadi. Deleng carane Java 17 ngatasi masalah iki:
Exception in thread "main" java.lang.NullPointerException:
Cannot assign field "i" because "a" is null
at Prog.main(Prog.java:5)
Ing conto iki, pangecualian nuduhake ing ngendi lan apa referensi obyek null kita. Iku sing prasaja!

Apa tegese <T> ing basa Jawa?

Sumber: Dev.to <T> minangka aksara umum sing tegese "Tipe" lan nuduhake konsep Generik ing Jawa. Sampeyan bisa nggunakake huruf liyane kanggo iki, nanging sampeyan bisa ndeleng, huruf T luwih disenengi. Ngopi #98.  Pengecualian Nullpointer Anyar ing Jawa 17. Apa <T>  ing Jawa?  - 2

Apa Generik?

Umum minangka cara kanggo paramèter kelas, metode, utawa antarmuka. Ayo ndeleng conto umum:
package Generics;

class House<T>{

    T doorNumber;

    public House(T doorNumber) {
        this.doorNumber = doorNumber;
    }

    public void print(){
        System.out.println("Your house number is: " + this.doorNumber);
    }
}
  • Kita duwe kelas sing diarani House sing bisa nampa jinis obyek sing sewenang-wenang.
  • Sabanjure kita duwe lapangan sing diarani doorNumber , sing uga bisa nampa samubarang jinis obyek.
  • Ing pungkasan kita ngumumake konstruktor parameter lan nyithak nomer lawang.
Cukup, pangguna bisa mutusake apa nomer iki Integer, String, Float, lan liya-liyane. CATETAN: sampeyan mung bisa nggunakake Objects . Jinis primitif ora didhukung amarga generik dimaksudake kanggo digunakake ing wektu kompilasi. Nalika kita nggunakake Generics, T ngganti apa wae sing bisa ngluwihi kelas Obyek , lan primitif ora duwe sifat iki. Contone, kita pengin doorNumber dadi string.
public class GenericsExample {
    public static void main(String[] args) {
        House<String> mainHouse = new House<>("14a");
        mainHouse.print();

    }
}
Asil bakal katon kaya iki:
Nomer omahmu: 14a
Kita bakal ngganti huruf "T" karo "String" lan ketik nomer omah menyang konstruktor. Kita bisa nggunakake macem-macem jinis yen, contone, kita kudu kelas kanggo nampa luwih saka siji obyek. Kita bisa nambah huruf liyane lan kanthi mangkono ngomong: kita pengin kelas nampa Generic liyane.
package Generics;

class House<T, V>{

    T doorNumber;
    V streetName;

    public House(T doorNumber, V streetName) {
        this.doorNumber = doorNumber;
        this.streetName = streetName;
    }

    public void print(){
        System.out.println("You live at: " + this.doorNumber + " " + this.streetName);
    }
}

public class GenericsExample {
    public static void main(String[] args) {
        House<Integer, String> mainHouse = new House<>(14, "Tellson Avenue");
        mainHouse.print();

    }
}
Asil bakal kaya iki:
Sampeyan manggon ing: 14 Tellson Avenue
Nganti saiki kita wis ndeleng conto nggunakake Generik ing tingkat kelas. Nanging kita uga bisa duwe cara umum lan antarmuka.

Metode generik

package Generics;

class House{

    public <T> void print(T doorNumber){
        System.out.println("You live at house number: " + doorNumber);
    }

}

public class GenericsExample {
    public static void main(String[] args) {
        House mainHouse = new House();
        mainHouse.<Integer>print(14);

    }
}
Cara iki nampa sembarang jinis obyek lan output nomer lawang, kang bakal sembarang tipe Obyek . Ing kasus iki, kita pengin cara kanggo nampa integer. Asil bakal:
Sampeyan manggon ing omah nomer: 14

Antarmuka umum

Pisanan nggawe antarmuka.
package Generics;

interface Property<T>{
    void hasBalcony(T balcony);
}
Banjur ngleksanakake antarmuka.
package Generics;

public class House implements Property<String> {

    @Override
    public void hasBalcony(String balcony) {
        System.out.println("Is there a balcony in the room? " + balcony);
    }

    public static void main(String[] args) {
        House mainHouse = new House();
        mainHouse.hasBalcony("YES");
    }

}
asil:
Apa ana loteng ing kamar? YA
Apa kaluwihan nggunakake generik?
  1. Pemeriksa wektu kompilasi sing luwih apik : Yen sampeyan nggunakake jinis obyek liyane saka sing sampeyan nemtokake, kompiler bakal menehi pitutur marang kowe.
  2. Bisa digunakake maneh : Sampeyan bisa nggunakake kelas, metode, utawa antarmuka kaping pirang-pirang amarga sampeyan mutusake jinis obyek sing bakal digunakake gumantung saka apa sing sampeyan coba entuk.
  3. Iku apik kanggo struktur data lan algoritma : ArrayList lan HashMap mung sawetara conto ing ngendi Generik digunakake.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION