CodeGym /Blog Jawa /Acak /Ayo Rembugan babagan Kata Kunci Pamungkas ing Basa Jawa
John Squirrels
tingkat
San Francisco

Ayo Rembugan babagan Kata Kunci Pamungkas ing Basa Jawa

Diterbitake ing grup
Jawa nduweni tembung kunci iki — final. Bisa ditrapake kanggo kelas, metode, variabel (kalebu paramèter metode). Kanggo kelas, tembung kunci pungkasan tegese kelas kasebut ora bisa duwe subkelas, yaiku warisan dilarang ... Iki migunani nalika nggawe obyek sing ora bisa diganti (ora bisa diganti). Contone, kelas String diumumake minangka final.

    public final class String {
    }
    
    class SubString extends String { // Compilation error
    }
Aku uga kudu nyathet yen modifier pungkasan ora bisa ditrapake ing kelas abstrak (sing nganggo tembung kunci abstrak), amarga iki minangka konsep sing eksklusif. Kanggo metode pungkasan, modifier tegese metode kasebut ora bisa diganti ing subkelas. Iki migunani nalika kita pengin nyegah owah-owahan saka implementasine asli.

    public class SuperClass {
        public final void printReport() {
            System.out.println("Report");
        }
    }

    class SubClass extends SuperClass { 
        public void printReport() { //Compilation error
            System.out.println("MyReport");
        }
    }
Kanggo variabel saka jinis primitif, tembung kunci pungkasan tegese nilai kasebut, yen ditugasake, ora bisa diganti. Kanggo variabel referensi, tegese sawise obyek ditugasake, sampeyan ora bisa ngganti referensi menyang obyek kasebut. Iki penting! Referensi ora bisa diganti, nanging negara obyek bisa diganti. Java 8 ngenalaken konsep anyar: èfèktif final. Iki mung ditrapake kanggo variabel (kalebu paramèter metode). Intine yaiku sanajan ora ana tembung kunci pungkasan, nilai variabel ora owah sawise diinisialisasi. Ing tembung liya, tembung kunci pungkasan bisa ditrapake kanggo variabel kasebut tanpa kesalahan kompilasi. Variabel pungkasan kanthi efektif bisa digunakake ing kelas lokal (kelas internal lokal), kelas anonim (kelas njero anonim), lan stream (API Stream).

        public void someMethod() {
            // In the example below, both a and b are effectively final, since they are assigned values only once:
            int a = 1;
            int b;
            if (a == 2) b = 3;
            else b = 4;
            // c is NOT effectively final since its value changes
            int c = 10;
            c++;
            
            Stream.of(1, 2).forEach(s-> System.out.println(s + a)); // OK
            Stream.of(1, 2).forEach(s-> System.out.println(s + c)); // Compilation error
        }
Saiki, ayo wawancara sethithik. Sawise kabeh, tujuan ngrampungake kursus CodeGym yaiku dadi pangembang Java lan golek proyek sing menarik lan dibayar kanthi apik. Dadi, ayo miwiti.
  1. Apa sing bisa kita ucapake babagan array sing diumumake final?

  2. Kita ngerti yen kelas String ora bisa diganti: kelas kasebut diumumake final. Nilai senar disimpen ing array char sing ditandhani karo final tembung kunci.


public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

Bisa ngganti nilai obyek String (tanpa ngganti referensi kanggo obyek)? Iki minangka pitakonan wawancara nyata. Lan praktik nuduhake manawa akeh calon sing ora mangsuli kanthi bener. Ngerteni carane tembung kunci pungkasan digunakake, utamane kanggo variabel referensi, penting banget. Nalika sampeyan mikir babagan iki, aku bakal njaluk panjaluk cilik menyang tim CodeGym. Mangga wenehi editor teks kemampuan kanggo nambah blok sing isine bisa ditampilake / didhelikake nalika sampeyan ngeklik. Wangsulan:
  1. Array minangka obyek, mula tembung kunci pungkasan tegese yen referensi kanggo array ditugasake, referensi kasebut ora bisa diganti. Yen ngandika, sampeyan bisa ngganti negara obyek.

    
            final int[] array = {1, 2, 3, 4, 5};
            array[0] = 9;	 // OK, because we're changing the contents of the array: {9, 2, 3, 4, 5}
            array = new int[5]; // Compilation error
    
  2. Ya, kita bisa. Ingkang utama yaiku mangertos apa tegese tembung kunci pungkasan eri nalika digunakake karo obyek. API Refleksi bisa digunakake kanggo ngganti nilai.


import java.lang.reflect.Field;

class B {
    public static void main(String[] args) throws Exception {
        String value = "Old value";
        System.out.println(value);

        // Get the String class's value field
        Field field = value.getClass().getDeclaredField("value");
        // Make it mutable
        field.setAccessible(true);
        // Set a new value
        field.set(value, "CodeGym".toCharArray());

        System.out.println(value);

        /* Output:
         * Old value
         * CodeGym
         */
    }
}
Wigati dimangerteni manawa kita wis nyoba ngganti variabel pungkasan saka jinis primitif kanthi cara iki, mula ora ana sing kedadeyan. Aku suggest sing gawe uwong yakin dhewe: nggawe kelas Jawa, contone, karo lapangan int final lan nyoba kanggo ngganti Nilai nggunakake API Refleksi. Good luck kanggo kabeh!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION