不希望任何人可以随意修改自己的东西的时候可以用final关键字进行修饰

 * 1.final是一个关键字,表示最终的,不可变的
 * 
 * 2.final修饰的类无法被继承
 * 
 * 3.final修饰的方法无法被覆盖
 * 
 * 4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】
 * 
 * 5.final修饰的实例变量,必须手动赋值,不能采用系统默认值
 * 
 * 6.final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收

   只要new一次就会产生一个对象,如果将这个对象的引用用final修饰,则不能再次new这个对象的引用

   final Person person=new Person(10);

   person=new Person(10);//报错
 * 
 * 7.final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的
 * 
 * 8.final修饰的实例变量,一般和static联合使用(存储在方法区),被称为常量

常量:实际上常量和静态变量一样,区别在于:

常量的值不能变

常量和静态变量,都是存储在方法区,并且都是在类加载时候初始化

常量一般都是公共的public

万变不离其宗:final修饰的只能赋值一次

---------------------------------------------------------------------------------------------------------------------------------------------------------------

新建一个User类

package com.lbj.javase12;public class User {public int id;public User() {super();
}public User(int id) {super();this.id = id;
}}

新建一个测试类

package com.lbj.javase12;
/*** 1.final是一个关键字,表示最终的,不可变的* * 2.final修饰的类无法被继承* * 3.final修饰的方法无法被覆盖* * 4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】* * 5.final修饰的实例变量,必须手动赋值,不能采用系统默认值* * 6.final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收* * 7.final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的* * 8.final修饰的实例变量,一般和static联合使用,被称为常量*/
public class Test01 {
/** 成员变量之实例变量* * 实例变量有默认值+final修饰的变量一旦赋值不能重新赋值* * 综合考虑:java语言最终规定实例变量使用final修饰后,必须手动赋值,不能采用系统默认值* * *///final int age;编译报错//第一种解决方案final int age=10;//第二种解决方案final int num;public Test01(){//这里面差一点犯了错误,因为这里我用了自定义的方法,其实是要用类名才行this.num=10;//以上两种解决方案:其实本质上就是一种方式,都是在构造方法执行过程中给实例变量赋值}public static void main(String[] args) {int i=10;System.out.println(i);//10i=20;System.out.println(i);//20//            4.final修饰的变量一旦被赋值后,不可重新赋值【不可二次赋值】final int k=10;//k=20;final int m;m=10;//m=20;//------------------------//创建用户对象User u=new User(100);//User u=ox1234//又创建了一个新的User对象//程序执行到此处表示以上对象已经变成垃圾堆数据,等待垃圾回收器的回收u=new User(200);//u=nv12231//创建用户对象final User user=new User(30);//user=new User(50);//final修饰的引用,一旦指向某个对象后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收//相当于绑定了user这个引用只能和一个对象连接//final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部是可以被修改的user.id=50;//-----------------//访问国籍System.out.println(Chinese.GUO_JI);//已经固定,不能修改}}
//中国人
class Chinese{/** 国籍* * 需求:每一个中国人的国籍都是中国,而且国籍是不会发生改变的,为了防止国籍被修改,建议加final修饰* * final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为常量* * 常量的定义语法格式:*         public static final 类型.常量名=值;* * java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接*/public static final String GUO_JI="中国";
}
package com.lbj.javase16;
/*** 深入final* * final修饰的引用类型,该引用不可再重新指向其它的java对象* * 但是final修饰的引用,该引用指向的对象的属性是可以修改的**/
public class Test02 {public static void main(String[] args) {// TODO Auto-generated method stubfinal Customer c=new Customer("123",12);//c是final的,无法重新赋值//c=new Customer("LKKK",20);c.name="321";c.age=25;System.out.println(c.name);System.out.println(c.age);}}
class Customer{String name;int age;Customer(String name,int age){this.name=name;this.age=age; }
}

JAVA入门级教学之(final关键字)相关推荐

  1. JAVA入门级教学之(super关键字)

    目录 JAVA入门级教学之(super关键字) 1.super关键字用在构造方法中: 2.语法规则: 3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样 4.通过 ...

  2. JAVA入门级教学之(标识符与关键字)

    目录 JAVA入门级教学之(标识符与关键字) 1.什么是标识符? 2.标识符的命名规则? 3.标识符的命名规范? 4.严格遵守规则和规范: 在java里的关键字都是小写的 JAVA入门级教学之(标识符 ...

  3. JAVA入门级教学之(接口)

    目录 JAVA入门级教学之(接口) 接口也是一种引用类型,可以等同看做类 1.如何定义接口,语法: 2.接口中只能出现: 3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的 4.接口中没有构造方法 ...

  4. JAVA入门级教学之(abstract抽象类)

    目录 JAVA入门级教学之(abstract抽象类) 1.如何定义抽象类? 2.抽象类无法被实例化 3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的 4.抽象类中可 ...

  5. JAVA入门级教学之(方法-1)

    目录 JAVA入门级教学之(方法-1) 1.以下程序不使用"方法",分析一下程序会存在哪些优缺点? 2.方法的本质:是一段代码片段,可以完成特定功能,可以重复利用 3.注意:方法定 ...

  6. JAVA入门级教学之(package和import)

    目录 JAVA入门级教学之(package和import) 1.包又称为package 2.怎么定义package? 3.包名的命名规范: 4.包名要求全部小写,包名也是标识符,必须遵守标识符的命名规 ...

  7. JAVA入门级教学之(多态)

    JAVA入门级教学之(多态) 怎么理解多态:你本身就该喊你爹叫爹,你让你爹叫你爹就是强制认做爹 多态的使用: A  a = new D(); D类继承A类,父类型引用指向子类型对象 * 关于java语 ...

  8. JAVA入门级教学之(参数传递)

    JAVA入门级教学之(参数传递) 问题引入: 参数分为形式参数还有实际参数,我们传入是的数据到底是什么呢? 方法调用的时候,涉及参数传递的问题, 传递的时候,java只遵循一种语法机制 就是将变量中保 ...

  9. JAVA入门级教学之(面向过程和面向对象的区别)

    目录 JAVA入门级教学之(面向过程和面向对象的区别) 面向过程和面向对象的区别: -面向过程: -面向对象: -发展历程: -生命周期中包括: -什么是类: -什么是对象: -软件开发的过程: -重 ...

  10. JAVA入门级教学之(方法递归)

    目录 JAVA入门级教学之(方法递归) 1.关于方法的递归调用: 2.递归是很耗费栈内存的,递归算法可以不用的时候尽量别用 3.以下程序运行的时候发生了这样的一个错误[不是异常,是错误] 4.递归必须 ...

最新文章

  1. php去字符串空格,php怎么去掉字符串中空格
  2. Pixhawk原生固件PX4之位姿控制算法解读
  3. 【数据库学习笔记】——cursor游标对象
  4. WSS页面定制系列(1)--如何启用表单页面的编辑模式
  5. Linux-insmod/rmmod/lsmod驱动模块相关命令(10)
  6. Valgrind动态分析工具
  7. “ ModuleNotFoundError: No module named ‘tkinter‘ “的解决方法
  8. Python基础-循环
  9. C语言打印杨辉三角(C笔记)
  10. 有向图的深度优先遍历
  11. 平面设计必须知道的尺寸列表
  12. 7个最好的文件存储网站
  13. CentOS 开机启动详解
  14. C/C++ 如何构造出强悍的宏
  15. Nginx proxy反向代理 缓存处理流程
  16. Python进程池Pool的使用
  17. MyISAM和InnoDB的区别
  18. 鼻子上爱出油,还有黑头、粉刺怎么办???
  19. 运行adb 命令提示more than one device/emulator
  20. N - Cthulhu

热门文章

  1. redisb并发访问慢出现的问题
  2. Oracle 9i 在 Red Hat 7.1 和 7.2 上的装配
  3. 语音合成与识别技术在C#中的应用 (转 )
  4. 面试题——面经题目(1)
  5. oracle 从pflie启动,oracle初始化参数文件管理
  6. php 文件指定位置添加内容,C++_VC++在TXT文件指定位置追加内容的方法,本文实例讲述了VC++操作文本文 - phpStudy...
  7. 路径中有中文怎么解决_时序路径分析
  8. 技术面试问项目难题如何解决的_技术创新 | 降本增效,青海农信社项目小伙刻苦钻研解决联合支架设计难题!...
  9. 一致性哈希解决的问题
  10. linux查看关键词前后几行内容