当前位置: 首页 > 编程笔记 >

java final本质详解

温嘉赐
2023-03-14
本文向大家介绍java final本质详解,包括了java final本质详解的使用技巧和注意事项,需要的朋友参考一下

含义:final 含义是【仅可以被赋值一次】。

赋值位置:在【声明时赋值】、在【构造方法中赋值】

举例:

package com.dada.data;

 

public class TestFinal {

  // 1.声明时赋值

  private final int i = 0;

  private final int j;

  public TestF() {

    // 2.构造方法中赋值

    j = 10;

  }

}

注意:我们说 final 是仅可以赋值一次没错,但是我们知道在 java 中【值有两种】,【基本数据类型的值】和【引用数据类型的值】,对于基本数据类型来说,赋值就是直接把【值赋给变量】,对于引用数据类型来说就是把【引用赋给变量】。

因此:仅可以赋值一次的含义也就分为两种情况了,1.如果是基本数据类型,那么就是值本身不能变;2.如果是引用数据类型的值,那就是引用不能变,但是被引用的内容是可以变的。

举例:

定义 Student 类:

package com.dada.data;

 

public class Student {

  private int id;

  private String name;

  private int score;

  public Student(int id, String name, int score) {

    this.id = id;

    this.name = name;

    this.score = score;

  }

  public int getId() {

    return id;

  }

  public void setId(int id) {

    this.id = id;

  }

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

   

  public int getScore() {

    return score;

  }

  public void setScore(int score) {

    this.score = score;

  }

   

  @Override

  public String toString() {

    return "id: " + id + "\t name:" + name + "\tscore:" + score;

  }

}

定义测试类:

package com.dada.data;

 

public class TestFinal {

  private final Student ss;

   

  public static void main(String[] args) {

    TestFinal tf = new TestFinal();

  }

  public TestFinal() {

    Student student = new Student(1, "dada", 3);

    // 第一次赋值

    ss = student;

    System.out.println(ss.toString());

     

    // 修改引用所对应的对象的内容

    student.setId(2);

    student.setName("hehe");

    student.setScore(10);

    System.out.println(ss.toString());

  }

}

输出结果:

id: 1   name:dada  score:3

id: 2   name:hehe  score:10

总结:

由上面的例子可以知道,变量被 final 修饰之后其引用的内容还是可以被修改的,之所以很多时候我们感觉它不能被修改是因为:

1.通常我们是在定义变量时进行的赋值,这个时候对于基本类型数据来说它是永远不能改变的。

2.对于引用类型数据来说,因为我们无法获取对应的引用,所以也会觉得引用类型数据也是不能被修改的。

以上就是java final本质解释的详细内容,更多请关注小牛知识库其它相关文章!

 类似资料:
  • 本文向大家介绍ajax和jsonp跨域的原理本质详解,包括了ajax和jsonp跨域的原理本质详解的使用技巧和注意事项,需要的朋友参考一下 为什么会有跨域问题? - 因为有同源策略 同源策略是浏览器的一种安全策略,所谓同源指的是 请求URL地址中的 协议, 域名 和 端口 都相同,只要其中之一不相同就是跨域 同源策略主要为了保证浏览器的安全性 在同源策略下,浏览器 不允许 Ajax跨域获取服务器数

  • 本文向大家介绍详解hashCode()和equals()的本质区别和联系,包括了详解hashCode()和equals()的本质区别和联系的使用技巧和注意事项,需要的朋友参考一下 在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equals是Object

  • 使用基本材质(BasicMaterial)的物体,渲染后物体的颜色始终为该材质的颜色,而不会由于光照产生明暗、阴影效果。如果没有指定材质的颜色,则颜色是随机的。其构造函数是: THREE.MeshBasicMaterial(opt) 其中,opt可以缺省,或者为包含各属性的值。如新建一个不透明度为0.75的黄色材质: 例4.1.1 new THREE.MeshBasicMaterial({

  • 指针,大概是C语言中最难理解的概念之一了。指针这个东西是c语言中的一个基本概念,C99中对于指针的定义是: 指针的类型是derived from其它类型,也就是说指针的类型是由它指向的类型决定的; 指针是一种reference类型,即引用类型; 指针这个词出现在高级语言程序设计中,在汇编中,就没有指针这个概念,有的只是地址。计算机的每一个内存单元都是编址的,对内存的访问都是通过地址进行的。高级语言

  • 对于给定的流实例, 比如文件流和网络流, 它们的不同在于上一章你使用的流创建函数返回的php_stream结构体中的ops成员. typedef struct _php_stream { ... php_stream_ops *ops; ... } php_stream; php_stream_ops结构体定义的是一个函数指针集合以及一个描述标记. typedef stru

  • 说明 整理自“3Blue1Brown - 微积分的本质系列视频” 本系列的视频目的在于帮助你建立关于微积分的基本直觉 目录 微积分回忆 求导公式 乘积法则 链式法则 隐函数求导 积分、微分的互逆关系 泰勒级数 ... 微积分的三个中心思想: 积分 微分 积分与微分(导数)的互逆 (几位)微积分之父 发现微积分:巴罗(Barrow)、牛顿(Newton)、莱布尼茨(Leibniz) 给出严格定义:柯