Soňky ...

Toparda çap edildi
Java-da açar söz bar - final. Sapaklara, usullara, üýtgeýänlere (usul argumentlerini goşmak bilen) ulanylyp bilner. Şonuň üçin gutarnykly ... - 1Bir synp üçin bu synpyň kiçi klaslara eýe bolup bilmejekdigini aňladýar. Miras almak gadagandyr. Bu (üýtgewsiz) obýektler döredilende peýdaly immutable, mysal üçin Stringyglan edilen synp final.
public final class String{
}

class SubString extends String{ //Compilation error
}
abstractÜýtgedijiniň abstrakt synplara (açar söz bilen ) ulanylyp bilinmejekdigini hem bellemelidiris , finalsebäbi bular biri-birine bagly düşünjelerdir. Usul üçin final, bu kiçi klaslarda ýok edilip bilinmejekdigini aňladýar. Asyl ýerine ýetirilişiniň artykmaç bolmazlygyny islänimizde bu peýdalydyr.
public class SuperClass{
    public final void printReport(){
        System.out.println("Report");
    }
}

class SubClass extends SuperClass{
    public void printReport(){  //Compilation error
        System.out.println("MyReport");
    }
}
Ilkinji görnüşli üýtgeýjiler üçin bu, bir gezek bellenensoň, bahanyň üýtgedilip bilinmejekdigini aňladýar. Salgy üýtgeýjileri üçin bu, bir obýekt bellenenden soň, şol obýekte salgylanmanyň üýtgedilip bilinmejekdigini aňladýar. Bu möhümdir! Baglanyşygy üýtgedip bolmaýar, ýöne obýektiň ýagdaýyny üýtgedip bolýar. Java 8 bilen düşünje peýda boldy - effectively final. Diňe üýtgeýänlere (usul argumentlerini goşmak bilen) degişlidir. Esasy zat, açar sözüň aç-açan ýoklugyna garamazdan final, üýtgeýjiniň bahasy başlangyçdan soň üýtgemeýär. finalBaşga sözler bilen aýdylanda, şeýle üýtgeýjä söz düzmekde ýalňyşlyk bolmazdan söz çalşyp bilersiňiz . Üýtgeýjileri ýerli synplaryň ( ), anonim synplaryň ( ), akymlaryň (Stream API) effectively finaliçinde ulanyp bolýar .Local Inner ClassesAnonymous Inner Classes
public void someMethod(){
    // In the example below, both a and b are effectively final, since the values ​​are set once:
    int a = 1;
    int b;
    if (a == 2) b = 3;
    else b = 4;
    // c is NOT effectively final because value changes
    int c = 10;
    c++;

    Stream.of(1, 2).forEach(s-> System.out.println(s + a)); //Ок
    Stream.of(1, 2).forEach(s-> System.out.println(s + c)); //Compilation error
}
Indi azajyk söhbetdeşlik edeliň. Galyberse-de, JavaRush kursyny geçmegiň maksady Java dörediji bolmak we gyzykly we gowy aýlyk almak. Geliň, başlalyň.
  1. Bir massiw yglan edilende näme aýdyp bilersiňiz final?

  2. StringSynpyň immutable, synpyň yglan edilendigi , setiriň bahasy açar söz bilen bellenilen finalmassiwde saklanýandygy mälimdir .charfinal

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
Obýektiň bahasyny çalyşmak mümkinmi String(obýekte salgylanmany üýtgetmän)? Bular hakyky söhbetdeşlik soraglary. Amalyň görkezişi ýaly, köpler olara nädogry jogap berýärler. Açar sözüň, esasanam salgylanma üýtgeýjileriniň ulanylyşyna düşünmek finalgaty möhümdir. Oýlanýarkaňyz, JavaRush toparyna çalt öwrenişiň. Mazmuny gizlemäge mümkinçilik berýän tekst redaktoryna bir blok goşmagyňyzy haýyş edýäris we basanyňyzda bu mazmuny görkeziň. Jogaplar:
  1. Sebäbi massiw obýektdir, bu finalbir obýekte salgylanma bellänsoň, indi üýtgedilip bilinmejekdigini, ýöne obýektiň ýagdaýynyň üýtgedilip bilinjekdigini aňladýar.

    final int[] array = {1,2,3,4,5};
    array[0] = 9;	//ok, because change the contents of the array - {9,2,3,4,5}
    array = new int[5]; //compile error
  2. Hawa, edip bilersiň. Esasy zat, çylşyrymly sözüň obýektler bilen ulanylyşyna düşünmekdir final. Bahany çalyşmak üçin ReflectionAPI ulanýar.

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 value field in the String class
        Field field = value.getClass().getDeclaredField("value");
        //Let's change it
        field.setAccessible(true);
        //Set new value
        field.set(value, "JavaRush".toCharArray());

        System.out.println(value);

        /* Вывод:
         * Old value
         * JavaRush
         */
    }
}
Ilkinji görnüşiň soňky üýtgeýjisini şu görnüşde üýtgetjek bolsak, hiç zat bolmaz. Muňa özüňizi ynandyrmagyňyzy maslahat berýärin: mysal üçin final intbir meýdan bilen Java synpyny dörediň we Reflection API arkaly bahasyny üýtgetmäge synanyşyň. Hemmäňize üstünlik!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION