final关键字的四种用法

  1. package com.Demo13;
  2. /*
  3. final关键字代表最终、不可改变的
  4. 常见的四种用法:
  5. 1.可以用来修饰一个类
  6. 2.可以用来修饰一个方法
  7. 3.可以用来修饰一个局部变量
  8. 4.可以用来修饰一个成员变量
  9. */
  10. public class Demo01Final {
  11. }

final关键字用于修饰类

  1. package com.Demo13;
  2. /*
  3. 当final关键字用来修饰一个类的时候,格式:
  4. public final class 类名称{
  5. //...
  6. }
  7. 含义:当前这个类不能有任何的子类。(太监类)
  8. 注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没有儿子)
  9. */
  10. public final class MyClass {
  11. public void method(){
  12. System.out.println("方法执行!"
  13. );
  14. }
  15. }

final关键字用于修饰成员方法

  1. package com.Demo13;
  2. /*
  3. 当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。
  4. 格式:
  5. public final 返回值类型 方法名称(参数列表){
  6. //方法体
  7. }
  8. 注意:
  9. 对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾
  10. */
  11. public class Fu {
  12. public final void method(){
  13. System.out.println("父类方法执行");
  14. }
  15. }

final关键字用于修饰局部变量

  1. package com.Demo13;
  2. public class Demo01Final {
  3. public static void main(String[] args) {
  4. int num1=10;
  5. System.out.println(num1); //10
  6. num1=20;
  7. System.out.println(num1); //20
  8. //一旦使用final用来修饰局部变量,那么这个变量就不能进行修改
  9. final int num2=200;
  10. System.out.println(num2); //200
  11. // num2=250; //错误写法 不能改变
  12. //正确写法!只要保证有唯一一次赋值即可
  13. final int num3;
  14. num3=30;
  15. System.out.println(num3); //30
  16. //对于基本类型来说,不可变说的是变量当中的数据不可改变
  17. //对于引用类型来说,不可变说的是变量当中的地址不可改变
  18. Student stu1=new Student("gege");
  19. System.out.println(stu1); //@1b6d3586
  20. System.out.println(stu1.getName()); //gege
  21. stu1= new Student("gegegegeg"); //gegegegeg
  22. System.out.println(stu1); //@4554617c
  23. System.out.println(stu1.getName());
  24. System.out.println("====================================================");
  25. final Student stu2=new Student("huhu");
  26. //错误写法!final的引用类型变量,其中的地址值不可变
  27. // stu2=new Student();
  28. System.out.println(stu2.getName()); //huhu
  29. stu2.setName("huhuhuuhuuu");
  30. System.out.println(stu2.getName()); //huhuhuuhuuu
  31. }
  32. }
  33. ========================================================================================================================================
  34. package com.Demo13;
  35. public class Student {
  36. public Student(){
  37. }
  38. public Student(String name) {
  39. this.name = name;
  40. }
  41. String name;
  42. public String getName() {
  43. return name;
  44. }
  45. public void setName(String name) {
  46. this.name = name;
  47. }
  48. }

final关键字用于修饰成员变量

  1. package com.Demo13;
  2. /*
  3. 对于成员变量来说,如果使用final关键字修饰,那么这个变量也照样是不可变的
  4. 1.由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了。
  5. 2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一
  6. 3.必须保证类当中所有重载的构造方法,都最终会对final的成员变量赋值
  7. */
  8. public class Person {
  9. private final String name;
  10. public Person(){
  11. name="huhu";
  12. }
  13. public Person(String name){
  14. this.name=name;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. // public String setName(String name) {
  20. // this.name=name;
  21. // }
  22. }