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 ืืื ืืืคืื ืืืคืชื ื'ืืืื ืืืืฆืื ืขืืืื ืืขื ืืื ืช ืืืฉืชืืืช ืืืื. ืื ืืืื ื ืชืืื.
-
ืื ืื ืื ื ืืืืืื ืืืืจ ืขื ืืขืจื ืฉืืืืจื ืืกืืคื?
-
ืื ื ืืืืขืื ืฉืืืืืงื 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. ืื ื ืชื ืืขืืจื ืืืงืกื ืืช ืืืืืืช ืืืืกืืฃ ืืืืง ืฉื ืืชื ืืืฆืื/ืืืกืชืืจ ืืช ืืชืืื ืฉืื ืืืฉืจ ืชืืืฅ ืขืืื. ืชืฉืืืืช:
-
ืืขืจื ืืื ืืืืืืงื, ืืืื ืืืืช ืืืคืชื ืืกืืคืืช ืคืืจืืฉื ืฉืืจืืข ืฉืืงืฆืืช ืืคื ืื ืืืขืจื, ืื ื ืืชื ืืฉื ืืช ืืช ืืืคื ืื. ืขื ืืืช, ืืชื ืืืื ืืฉื ืืช ืืช ืืฆื ืืืืืืืงื.
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
-
ืื ืื ืื ื ืืืืืื. ืืขืืงืจ ืืืืื ืื ืืฉืืขืืช ืืืืช ืืืคืชื ืืกืืคืืช ืืงืืฆื ืืช ืืืฉืจ ืืฉืชืืฉืื ืื ืขื ืืืืืืงืืื. ื ืืชื ืืืฉืชืืฉ ื-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. ืืืฆืืื ืืืืื!
GO TO FULL VERSION