final修饰类,让类绝育了(不能继承) 同一个包下不能定义两个一样的类,会冲突报错,类定义出来的变量是引用类型的变量(属于对象或类的,值在堆里面,栈内存存储的是地址) 引用类型的变量:栈内存是地址,堆内存是值
image.png

final修饰类:不能被继承

  1. package com.itheima.d3_final;
  2. public class Test {
  3. public static void main(String[] args) {
  4. // 目标:记住final的语法
  5. // 1.final修饰类,类不能被继承(final最好修饰工具类,显得比较专业,因为工具类只要调用这个类(类名.方法),不要继承
  6. // 2. final修饰方法,方法不能被重写
  7. // 3. final修饰变量,总规则:变量有且仅能被赋值一次
  8. }
  9. }
  10. //
  11. //class Student extends People{
  12. // @Override
  13. // public void eat() {
  14. // super.eat();
  15. // System.out.println("学生吃的很多");
  16. // }
  17. //}
  18. //
  19. //
  20. //class People{
  21. // public final void eat(){ // final 在修饰这个方法时(写在public后面),这个方法不能重写
  22. // System.out.println("人要吃东西~~");
  23. // }
  24. //}
  25. //
  26. //class wolf extends Animal{
  27. //
  28. //}
  29. //
  30. //final class Animal{ 这里使用了final之后,这个Animal就不能被继承
  31. //}

final修饰变量:不能被第二次赋值

  1. package com.itheima.d3_final;
  2. public class Test2 {
  3. // 二:修饰静态成员变量(public static final 修饰的也称为常量了) // final加了之后一定得赋值(final是写在变量类型前面)
  4. public static final String schoolName = "黑马";
  5. // 三:修饰实例成员变量(几乎不用) 因为实例成员变量是属于对象的,相当于写了final之后,该对象的变量写死了
  6. public final String name = "猪刚烈";
  7. public static void main(String[] args) {
  8. // 目标:理解final修饰变量的作用:总规则:变量有且仅能被赋值一次,(理解语法)
  9. // 变量有几种:
  10. // 1.局部变量(写在方法里面的成员)
  11. // 2.成员变量(一般是写在类里面,方法外)就是自己创建的类,如何定义成员变量
  12. // -- 实例成员变量
  13. // -- 静态成员变量
  14. // 一:修饰局部变量
  15. final double rate = 3.14;
  16. // rate = 3.19; // 被final修饰了之后,只能被赋值一次,下次赋值就报错
  17. buy(0.8); // 已经第一次赋值了
  18. // schoolName = "黑马程序员"; // 第二次赋值
  19. Test2 t = new Test2();
  20. System.out.println(t.name); // 猪刚烈
  21. // t.name = "天蓬元帅";
  22. //注意:final修饰引用类型的变量,其地址不能被改变(不能被第二次赋值,但是指向的对象内容是可以改变的
  23. final Teacher t2 = new Teacher("学习,授课,吹牛逼"); // 一般创建有参构造器后要加这个:this.hobby = hobby; //将传入的hobby赋值给对象的成员hobby
  24. // t2 = null; // 将地址改为null(没加final之前)
  25. // 加了final之后地址不能改变,可以改变对象指向的内容(堆内存中存储的东西)
  26. }
  27. //
  28. // public static void buy(final double z){ // 这个形参被传参后就是第一次赋值,后面给变量赋值后属于第二次被赋值
  29. //// z = 0.1;// 如果加了final不能被第二次赋值,
  30. // }
  31. }
  32. class Teacher{
  33. private String hobby;
  34. public Teacher(String hobby) {
  35. this.hobby = hobby; //将传入的hobby赋值给对象的成员hobby
  36. }
  37. public String getHobby() {
  38. return hobby;
  39. }
  40. public void setHobby(String hobby) {
  41. this.hobby = hobby;
  42. }
  43. }