CodeGym /ื‘ืœื•ื’ Java /Random-HE /ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืžื™ืœืช ืžืคืชื— ืกื•ืคื™ืช ื‘-Java
John Squirrels
ืจึธืžึธื”
San Francisco

ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืžื™ืœืช ืžืคืชื— ืกื•ืคื™ืช ื‘-Java

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ืœ-Java ื™ืฉ ืืช ืžื™ืœืช ื”ืžืคืชื— ื”ื–ื• - ืกื•ืคื™ืช. ื ื™ืชืŸ ืœื™ื™ืฉื ืื•ืชื• ืขืœ ืžื—ืœืงื•ืช, ืฉื™ื˜ื•ืช, ืžืฉืชื ื™ื (ื›ื•ืœืœ ืคืจืžื˜ืจื™ื ืฉืœ ืฉื™ื˜ื”). ืขื‘ื•ืจ ืžื—ืœืงื”, ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช ืคื™ืจื•ืฉื” ืฉืื™ืŸ ืœืžื—ืœืงื” ืชืช-ืžื—ืœืงื•ืช, ื›ืœื•ืžืจ ืืกื•ืจื” ื™ืจื•ืฉื”... ื–ื” ืฉื™ืžื•ืฉื™ ื‘ืขืช ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ืœืชื™ ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ (ื‘ืœืชื™ ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™). ืœื“ื•ื’ืžื”, ื”ืžื—ืœืงื” String ืžื•ื›ืจื–ืช ื›ืกื•ืคื™ืช.
public final class String {
}

class SubString extends String { // Compilation error
}
ืขืœื™ ืœืฆื™ื™ืŸ ื’ื ืฉืœื ื ื™ืชืŸ ืœื”ื—ื™ืœ ืืช ื”ืฉื™ื ื•ื™ ื”ืกื•ืคื™ ืขืœ ืžื—ืœืงื•ืช ืžื•ืคืฉื˜ื•ืช (ืืœื• ืขื ืžื™ืœืช ื”ืžืคืชื— ืื‘ืกื˜ืจืงื˜ื™ืช), ื›ื™ ืืœื• ืžื•ืฉื’ื™ื ืกื•ืชืจื™ื ื–ื” ืืช ื–ื”. ืขื‘ื•ืจ ืฉื™ื˜ื” ืกื•ืคื™ืช, ื”ืฉื™ื ื•ื™ ืื•ืžืจ ืฉืœื ื ื™ืชืŸ ืœืขืงื•ืฃ ืืช ื”ืฉื™ื˜ื” ื‘ืชืชื™ ืžื—ืœืงื•ืช. ื–ื” ืฉื™ืžื•ืฉื™ ื›ืืฉืจ ืื ื• ืจื•ืฆื™ื ืœืžื ื•ืข ืืช ื”ืฉื™ื ื•ื™ ื‘ื™ื™ืฉื•ื ื”ืžืงื•ืจื™.
public class SuperClass {
    public final void printReport() {
        System.out.println("Report");
    }
}

class SubClass extends SuperClass {
    public void printReport() { //Compilation error
        System.out.println("MyReport");
    }
}
ืขื‘ื•ืจ ืžืฉืชื ื™ื ืžืกื•ื’ ืคืจื™ืžื™ื˜ื™ื‘ื™, ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช ืคื™ืจื•ืฉื” ืฉืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ืขืจืš ืœืื—ืจ ืฉื”ื•ืงืฆื”. ืขื‘ื•ืจ ืžืฉืชื ื™ ื”ืชื™ื™ื—ืกื•ืช, ื–ื” ืื•ืžืจ ืฉืœืื—ืจ ื”ืงืฆืืช ืื•ื‘ื™ื™ืงื˜, ืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ื”ืคื ื™ื” ืœืื•ื‘ื™ื™ืงื˜ ื–ื”. ื–ื” ื—ืฉื•ื‘! ืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ื”ืคื ื™ื”, ืืš ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ืžืฆื‘ ื”ืื•ื‘ื™ื™ืงื˜. Java 8 ื”ืฆื™ื’ื” ืžื•ืฉื’ ื—ื“ืฉ: ืกื•ืคื™ืช ืœืžืขืฉื”. ื–ื” ื—ืœ ืจืง ืขืœ ืžืฉืชื ื™ื (ื›ื•ืœืœ ืคืจืžื˜ืจื™ื ืฉืœ ืฉื™ื˜ื”). ื”ืฉื•ืจื” ื”ืชื—ืชื•ื ื” ื”ื™ื ืฉืœืžืจื•ืช ื”ื™ืขื“ืจ ื‘ืจื•ืจ ืฉืœ ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช, ืขืจืš ื”ืžืฉืชื ื” ืื™ื ื• ืžืฉืชื ื” ืœืื—ืจ ื”ืืชื—ื•ืœ. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื ื™ืชืŸ ืœื”ื—ื™ืœ ืืช ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช ืขืœ ืžืฉืชื ื” ื›ื–ื” ืœืœื ืฉื’ื™ืืช ืงื•ืžืคื™ืœืฆื™ื”. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ืœืžืขืฉื” ื‘ืžืฉืชื ื™ื ืกื•ืคื™ื™ื ื‘ืชื•ืš ืžื—ืœืงื•ืช ืžืงื•ืžื™ื•ืช (ืžื—ืœืงื•ืช ืคื ื™ืžื™ื•ืช ืžืงื•ืžื™ื•ืช), ืžื—ืœืงื•ืช ืื ื•ื ื™ืžื™ื•ืช (ืžื—ืœืงื•ืช ืคื ื™ืžื™ื•ืช ืื ื•ื ื™ืžื™ื•ืช) ื•ื–ืจืžื™ื (Stream API).
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
}
ืขื›ืฉื™ื•, ื‘ื•ืื• ื ืขืฉื” ืจืื™ื•ืŸ ืงื˜ืŸ. ืื—ืจื™ ื”ื›ืœ, ื”ืžื˜ืจื” ืฉืœ ืกื™ื•ื ืงื•ืจืก CodeGym ื”ื™ื ืœื”ืคื•ืš ืœืžืคืชื— ื’'ืื•ื•ื” ื•ืœืžืฆื•ื ืขื‘ื•ื“ื” ืžืขื ื™ื™ื ืช ื•ืžืฉืชืœืžืช ื”ื™ื˜ื‘. ืื– ื‘ื•ืื• ื ืชื—ื™ืœ.
  1. ืžื” ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืขืœ ืžืขืจืš ืฉื”ื•ื›ืจื– ื›ืกื•ืคื™?

  2. ืื ื• ื™ื•ื“ืขื™ื ืฉื”ืžื—ืœืงื” String ืื™ื ื” ื ื™ืชื ืช ืœืฉื™ื ื•ื™: ื”ืžื—ืœืงื” ืžื•ื›ืจื–ืช ื›ืกื•ืคื™ืช. ืขืจืš ืžื—ืจื•ื–ืช ืžืื•ื—ืกืŸ ื‘ืžืขืจืš char ืฉืžืกื•ืžืŸ ื‘ืžื™ืœืช ื”ืžืคืชื— final.

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
ื”ืื ื ื•ื›ืœ ืœื”ื—ืœื™ืฃ ืขืจืš ืฉืœ ืื•ื‘ื™ื™ืงื˜ String (ืžื‘ืœื™ ืœืฉื ื•ืช ืืช ื”ื”ืชื™ื™ื—ืกื•ืช ืœืื•ื‘ื™ื™ืงื˜)? ืืœื• ืฉืืœื•ืช ืจืื™ื•ื ื•ืช ืืžื™ืชื™ื•ืช. ื•ื”ืชืจื’ื•ืœ ืžืจืื” ืฉื”ืจื‘ื” ืžื•ืขืžื“ื™ื ืœื ืขื•ื ื™ื ืขืœื™ื”ื ื ื›ื•ืŸ. ื—ืฉื•ื‘ ืžืื•ื“ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืžืฉืชืžืฉื™ื ื‘ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช, ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ืžืฉืชื ื™ ื”ืชื™ื™ื—ืกื•ืช. ื‘ื–ืžืŸ ืฉืืชื” ื—ื•ืฉื‘ ืขืœ ื–ื”, ืื’ื™ืฉ ื‘ืงืฉื” ืงื˜ื ื” ืœืฆื•ื•ืช CodeGym. ืื ื ืชืŸ ืœืขื•ืจืš ื”ื˜ืงืกื˜ ืืช ื”ื™ื›ื•ืœืช ืœื”ื•ืกื™ืฃ ื‘ืœื•ืง ืฉื ื™ืชืŸ ืœื”ืฆื™ื’/ืœื”ืกืชื™ืจ ืืช ื”ืชื•ื›ืŸ ืฉืœื• ื›ืืฉืจ ืชืœื—ืฅ ืขืœื™ื•. ืชืฉื•ื‘ื•ืช:
  1. ืžืขืจืš ื”ื•ื ืื•ื‘ื™ื™ืงื˜, ื•ืœื›ืŸ ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช ืคื™ืจื•ืฉื” ืฉื‘ืจื’ืข ืฉื”ืงืฆืืช ื”ืคื ื™ื” ืœืžืขืจืš, ืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ื”ืคื ื™ื”. ืขื ื–ืืช, ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืืช ืžืฆื‘ ื”ืื•ื‘ื™ื™ืงื˜.

    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. ื›ืŸ ืื ื—ื ื• ื™ื›ื•ืœื™ื. ื”ืขื™ืงืจ ืœื”ื‘ื™ืŸ ืžื” ืžืฉืžืขื•ืช ืžื™ืœืช ื”ืžืคืชื— ื”ืกื•ืคื™ืช ื”ืงื•ืฆื ื™ืช ื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘ื” ืขื ืื•ื‘ื™ื™ืงื˜ื™ื. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-Reflection API ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืขืจื›ื™ื.

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
         */
    }
}
ืฉื™ืžื• ืœื‘ ืฉืื ื”ื™ื™ื ื• ืžื ืกื™ื ืœืฉื ื•ืช ืืช ื”ืžืฉืชื ื” ื”ืกื•ืคื™ ืฉืœ ื˜ื™ืคื•ืก ืคืจื™ืžื™ื˜ื™ื‘ื™ ื‘ืฆื•ืจื” ื–ื•, ืื– ืฉื•ื ื“ื‘ืจ ืœื ื”ื™ื” ืงื•ืจื”. ืื ื™ ืžืฆื™ืข ืฉืชืฉื›ื ืข ืืช ืขืฆืžืš: ืฆื•ืจ ืžื—ืœืงืช Java, ืœืžืฉืœ, ืขื ืฉื“ื” int ืกื•ืคื™ ื•ื ืกื• ืœืฉื ื•ืช ืืช ื”ืขืจืš ืฉืœื• ื‘ืืžืฆืขื•ืช ื”-Reflection API. ื‘ื”ืฆืœื—ื” ืœื›ื•ืœื!
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION