如题所述
Javaå ³é®åfinalæâè¿æ¯æ æ³æ¹åçâæè âç»æçâå«ä¹ï¼å®å¯ä»¥ä¿®é¥°éæ½è±¡ç±»ãéæ½è±¡ç±»æåæ¹æ³ååéã
finalç±»ä¸è½è¢«ç»§æ¿ï¼æ²¡æåç±»ï¼finalç±»ä¸çæ¹æ³é»è®¤æ¯finalçã
finalæ¹æ³ä¸è½è¢«åç±»çæ¹æ³è¦çï¼ä½å¯ä»¥è¢«ç»§æ¿ã
finalæååé表示常éï¼åªè½è¢«èµå¼ä¸æ¬¡ï¼èµå¼åå¼ä¸åæ¹åã
finalä¸è½ç¨äºä¿®é¥°æé æ¹æ³ã
注æï¼ç¶ç±»çprivateæåæ¹æ³æ¯ä¸è½è¢«åç±»æ¹æ³è¦ççï¼å æ¤privateç±»åçæ¹æ³é»è®¤æ¯finalç±»åçã
1ãfinalç±»
finalç±»ä¸è½è¢«ç»§æ¿ï¼å æ¤finalç±»çæåæ¹æ³æ²¡ææºä¼è¢«è¦çï¼é»è®¤é½æ¯finalçãå¨è®¾è®¡ç±»æ¶åï¼å¦æè¿ä¸ªç±»ä¸éè¦æåç±»ï¼ç±»çå®ç°ç»èä¸å 许æ¹åï¼å¹¶ä¸ç¡®ä¿¡è¿ä¸ªç±»ä¸ä¼è½½è¢«æ©å±ï¼é£ä¹å°±è®¾è®¡ä¸ºfinalç±»ã
2ãfinalæ¹æ³
å¦æä¸ä¸ªç±»ä¸å
许å
¶åç±»è¦çæ个æ¹æ³ï¼åå¯ä»¥æè¿ä¸ªæ¹æ³å£°æ为finalæ¹æ³ã使ç¨finalæ¹æ³çåå æäºï¼
â ææ¹æ³éå®ï¼é²æ¢ä»»ä½ç»§æ¿ç±»ä¿®æ¹å®çæä¹åå®ç°ã
â¡é«æï¼ç¼è¯å¨å¨éå°è°ç¨finalæ¹æ³æ¶åä¼è½¬å
¥å
åµæºå¶ï¼å¤§å¤§æé«æ§è¡æçã
ä¾å¦ï¼
public class Test1 {public static void main(String[] args) {
// TODO èªå¨çææ¹æ³åæ ¹
}
public void f1() {
System.out.println("f1");
}
//æ æ³è¢«åç±»è¦ççæ¹æ³
public final void f2() {
System.out.println("f2");
}
public void f3() {
System.out.println("f3");
}
private void f4() {
System.out.println("f4");
}
}
public class Test2 extends Test1 {
public void f1(){
System.out.println("Test1ç¶ç±»æ¹æ³f1被è¦ç!");
}
public static void main(String[] args) {
Test2 t=new Test2();
t.f1();
t.f2(); //è°ç¨ä»ç¶ç±»ç»§æ¿è¿æ¥çfinalæ¹æ³
t.f3(); //è°ç¨ä»ç¶ç±»ç»§æ¿è¿æ¥çæ¹æ³
//t.f4(); //è°ç¨å¤±è´¥ï¼æ æ³ä»ç¶ç±»ç»§æ¿è·å¾
}
}
3ãfinalåéï¼å¸¸éï¼
ç¨final修饰çæååé表示常éï¼å¼ä¸æ¦ç»å®å°±æ æ³æ¹åï¼final修饰çåéæä¸ç§ï¼éæåéãå®ä¾åéåå±é¨åéï¼åå«è¡¨ç¤ºä¸ç§ç±»åç常éãä»ä¸é¢çä¾åä¸å¯ä»¥çåºï¼ä¸æ¦ç»finalåéåå¼åï¼å¼å°±ä¸è½åæ¹åäºã
public class Test3 {
private final String S="finalå®ä¾åéS";
private final int A=100;
public final int B=90;
public static final int C=80;
private static final int D=70;
public final int E; //final空ç½,å¿ é¡»å¨åå§å对象çæ¶åèµåå¼
public Test3(int x){
E=x;
}
/**
* @param args
*/
public static void main(String[] args) {
Test3 t=new Test3(2);
//t.A=101; //åºé,finalåéçå¼ä¸æ¦ç»å®å°±æ æ³æ¹å
//t.B=91; //åºé,finalåéçå¼ä¸æ¦ç»å®å°±æ æ³æ¹å
//t.C=81; //åºé,finalåéçå¼ä¸æ¦ç»å®å°±æ æ³æ¹å
//t.D=71; //åºé,finalåéçå¼ä¸æ¦ç»å®å°±æ æ³æ¹å
System.out.println(t.A);
System.out.println(t.B);
System.out.println(t.C); //ä¸æ¨èç¨å¯¹è±¡æ¹å¼è®¿é®éæå段
System.out.println(t.D); //ä¸æ¨èç¨å¯¹è±¡æ¹å¼è®¿é®éæå段
System.out.println(Test3.C);
System.out.println(Test3.D);
//System.out.println(Test3.E); //åºé,å 为E为final空ç½,ä¾æ®ä¸å对象å¼ææä¸å.
System.out.println(t.E);
Test3 t1=new Test3(3);
System.out.println(t1.E); //final空ç½åéEä¾æ®å¯¹è±¡çä¸åèä¸å
}
private void test(){
System.out.println(new Test3(1).A);
System.out.println(Test3.C);
System.out.println(Test3.D);
}
public void test2(){
final int a; //final空ç½,å¨éè¦çæ¶åæèµå¼
final int b=4; //å±é¨å¸¸é--finalç¨äºå±é¨åéçæ å½¢
final int c; //final空ç½,ä¸ç´æ²¡æç»èµå¼.
a=3;
//a=4; åºé,å·²ç»ç»èµè¿å¼äº.
//b=2; åºé,å·²ç»ç»èµè¿å¼äº.
}
}
å¦å¤ï¼finalåéå®ä¹çæ¶åï¼å¯ä»¥å 声æï¼èä¸ç»åå¼ï¼è¿ä¸åéä¹ç§°ä¸ºfinal空ç½ï¼æ 论ä»ä¹æ åµï¼ç¼è¯å¨é½ç¡®ä¿ç©ºç½finalå¨ä½¿ç¨ä¹åå¿ é¡»è¢«åå§åãä½æ¯ï¼final空ç½å¨finalå ³é®åfinalç使ç¨ä¸æä¾äºæ´å¤§ççµæ´»æ§ï¼ä¸ºæ¤ï¼ä¸ä¸ªç±»ä¸çfinalæ°æ®æåå°±å¯ä»¥å®ç°ä¾å¯¹è±¡èææä¸åï¼å´æä¿æå ¶æå®ä¸åçç¹å¾ã
4ãfinalåæ°
å½å½æ°åæ°ä¸ºfinalç±»åæ¶ï¼ä½ å¯ä»¥è¯»å使ç¨è¯¥åæ°ï¼ä½æ¯æ æ³æ¹å该åæ°çå¼ã
public class Test4 {public static void main(String[] args) {
new Test4().f1(2);
}
public void f1(final int i){
//i++; //iæ¯finalç±»åç,å¼ä¸å 许æ¹åç.
System.out.print(i);
}
final修饰类时:该类不能被继承.。
final修饰方法时:该方法不能被重写.。
final修饰类的成员属性时:声明时就要赋值,或者在构造方法中给它赋值.。
final修饰类的属性时:必须在声明时赋值。
final修饰局部变量:如果在声明时没有赋值,则在后面的代码中可以有一次给它赋值的机会,一旦赋值则该变量的值不可更改。
final修饰的变量是引用类型时指引用不能更改,引用指向的对象的属性值是可以更改的。本回答被提问者和网友采纳