final关键字修饰的变量

final意义:最终的,不可改变的。
  1、修饰变量,为常量,值不可变;
  2、修饰对象,值可变,引用不变;
  3、修饰方法,方法不可重写;
  4、修饰类,无子类,不可以被继承,更不可能被重写。

1.final修饰的基本类型变量必须赋值,但是只能赋值一次(可以在声明时显示初始化赋值,或者在构造方法中初始化赋值,或者在初始化块中初始化赋值)。
  你在声明时: private final int j; 没有显示初始化,那么就必须在构造方法中初始化赋值,或者在初始化块中初始化赋值,否则编译时出错,正因为你在构造方法里面:j=2;给j赋值了,所以编译通过;你把j=2注释掉,试一下就知道了;
2.final修饰的引用类型变量赋值之后,不能再指向其他对象!但是所引用对象的内部属性的值是可以改变的。

时间: 2024-11-10 17:39:06

final关键字修饰的变量的相关文章

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.例如,对于如下语句: final StringBuffer a=new StringBuffer("immutable"); 执行如下语句将报告编译期错误: a=new StringBuffer(""); 但是,执行如下语句则可以通过编译: a.append(" broken!"); 有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进

java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变. final变量永远指向这个对象,是一个常量指针,而不是指向常量的指针. 例如:final StringBuffer sbu = new StringBuffer(“abc”); 在对其进行重新赋值 sbu = new StringBuffer(“”); 会出现编译错误,被final修饰的变量是不能被重新赋值的. sbu.append(“d”); 是可以编译通过的; final:最终.作为一个修饰符 1.可以修饰类.变量.函数. 2

Java final关键字修饰变量Test

使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的. package com.test; /** * final修饰一个变量练习 * @author Mrjiao * */ public class FinalA { private final static StringBuffer A=new StringBuffer("I have final , Who can change me?"); public static void

static 和 final 关键字 对实例变量赋初始值的影响

static 和 final 关键字 对实例变量赋初始值的影响 最近一直在看<深入理解Java虚拟机>,在看完了对象内存分配.Class文件格式之后,想深扒一下实例变量是如何被赋上初始值的这个问题的细节. 在2.3.1小节中讲对象创建的时候,讲到内存分配有两种方式:一种是指针碰撞:另一种是空闲列表. 而选择哪种分配方式是由JAVA堆是否规整决定,而JAVA堆是否规整则由虚拟机所采用的垃圾收集器是否带压缩整理功能决定. 我们不管内存分配采用何种方式,当内存分配完成后,虚拟机将分配到的内存空间都初

ReadOnly关键字修饰的变量可以修改,只是不能重新分配

MSDN 官方的解释 readonly 关键字是可以在字段上使用的修饰符.当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中. 很多初学者看完书就会认为,readonly修饰的变量在以后是不能修改的,在以后的开发中从不对ReadOnly的变量进行修改操作,形成思维定势,这个观念是错误的. 首先要明确一点:更改!=重新分配(赋值) 对于简单类型(如int),更改是等于重新赋值,因为默认操作符只有=, 但于对于复杂类型,就不一定了.

final 关键字:用来修饰类,方法,成员变量,局部变量

final 关键字:用来修饰类,方法,成员变量,局部变量 表示最终的不可变的 1.final修饰一个类 表示当前的类不能有子类,也就是不能将一个类作为父类 格式: public final class 类名称 { class body } 一个类如果是final的,那么其中所有成员方法都不能被覆盖重写(因为没有子类),但是该类可以有父类 2.final关键字修饰成员方法 这个方法就是最终方法,也就是该类的子类不能覆盖重写这个方法 对于类.方法来说abstract.final不能同时使用,因为他们

final修饰的变量是引用不能改变还是引用的对象不能改变

我们都知道final修饰变量时 会变为常量,但是使 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 下面让我们来看这段代码: /** * 验证final修饰的变量是引用不能变,还是引用的对象不能变 * StringBuilder 线程不安全 但速度快 * 引用初始化以后不能被改变 --- 不是指变量的值不可变,而是指向的变量地址不可变 * @author Tomato * */ public class TestFinal { public static void mai

[java]final关键字的几种用法

在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final关键字及其用法. final关键字 在java中,final的含义在不同的场景下有细微的差别,但总体上来说,它指的是"这是不可变的".下面,我们来讲final的四种主要用法. 1.修饰数据 在编写程序时,我们经常需要说明一个数据是不可变的,我们成为常量.在java中,用final关键字修饰

Java内部类与final关键字详解

一.内部类的几种创建方法: 1.成员内部类 class Outer{ private int i = 1; class Inner{ public void fun() {System.out.println("Outer I=" + i)} } } 2.方法内部类 class Outer{ public void fun() { final int i = 1; // 被方法内部类访问的局部变量必须被final修饰 class Inner{ // 方法内部类 不能有访问修饰符,比如p