public class FinalReferenceTest {
public static final StringBuffer sb = new StringBuffer();
public static void main(String[] args){
sb.append("hello");
}
}
问题1:上面的程序能否编译通过?如果能,说明理由,如果不能,请说明理由。
解答:能编译通过。
分析:对于final修饰的引用类型,到底这个引用不能变还是这个引用指向的对象的内容不能变?答案是引用不能改变,而引用指向的内容是可以改变的。
问题2:上面的程序在语句sb.append("hello");后面添加语句 sb = new StringBuffer()能否编译通过?如果能,说明理由,如果不能,请说明理由。
解答:不能编译通过。
分析:由于对于final修饰的引用类型,是引用不能改变,而引用指向的内容是可以改变的。因为sb已经指向了第一次new...产生的对象,已经不能改变,所以在语句sb.append("hello");后面添加语句 sb = new StringBuffer()是不能编译通过的。
总结:对于final类型的引用变量来说,所谓的不能改变指的是该引用不能改变。
分享到:
- 2009-02-27 22:40
- 浏览 1695
- 评论(0)
- 论坛回复 / 浏览 (0 / 1354)
- 查看更多
相关推荐
final 修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前...
final 变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 4、final 参数 final 参数可以读取使用该参数,但是无法改变该参数的值。 二、static 关键字 static 关键字可以用来修饰成员变量和...
1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成了一个常量。注意,系统不会默认为它初始化,只有两种初始化的方式:在定义处和构造方法中对其初始化。 2. final 修饰方法中的参数...
在Java编程语言中,`final`与`static`是两个非常关键且常用的关键字,它们各自具有独特的功能和用途,可以极大地增强代码的稳定性和可维护性。下面将详细解析这两个关键字的用法及其在Java中的重要性。 ### 一、`...
在设计类和接口时,明智地使用`final`和`static`可以帮助实现更好的设计模式,例如单例模式(`static`与私有构造函数结合)和不可变对象(`final`类和属性)。在日常编程中,应根据需求合理选择和应用这两个关键字。
final 变量是值一旦给定就无法改变的变量,final 变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 例如: `private final String S = "final 实例变量 S";` final 变量定义的时候,可以先...
你可以在不创建`Test`类的实例的情况下,通过类名直接访问这个变量: ```java Test.name = "Jason"; ``` 同样的,`static`也可以用来修饰方法,这样的方法称为静态方法。静态方法同样不依赖于类的实例,可以直接...
// 错误,final变量不能再次赋值 final Student stu1 = new Student("张"); // stu1 = new Student("程"); // 错误,final引用变量的地址值不能改变,但对象内容可以改变 // stu1.setName("程"); // 正确,对象...
final变量分为三类:静态(static)常量、实例(非静态)常量和局部常量。静态常量由类共享,实例常量属于每个类实例,而局部常量则是在方法或构造器中定义的。值得注意的是,final变量在使用前必须初始化,即使是在...
1. `static`变量:这些变量被称为静态变量或类变量,它们是所有对象共享的,只有一份存储。在类加载时初始化,可以通过类名直接访问,无需创建对象。 2. `static`方法:静态方法与类关联,而不是类的实例。它们不能...
// 编译错误, final变量的值一旦给定就无法改变 // t.D = 71; // 编译错误, final变量的值一旦给定就无法改变 System.out.println(t.A); System.out.println(t.B); System.out.println(t.C); // 不推荐用对象...
final 变量的变与不变是一个重要的问题。有人说 final 变量在赋值后就不可变,但这个不变到底指的是什么呢?这个不变指的是引用,是地址,而所引用的对象的内容仍然是可变的。就是说,这个 final 变量的引用是不能...
它可以是基本类型或引用类型,但引用类型变量指向的对象的属性仍可修改。 - **final方法**:一旦声明为final,方法就不能被子类重写。这确保了方法的行为在继承链中保持不变。 - **final类**:final类不能被继承,...
对于引用类型的 `final` 变量,一旦赋值,就不能重新指向另一个对象,但其引用的对象内容仍然可以改变。 #### Static 和 Final 的组合使用 当 `static` 和 `final` 一起使用时,表示创建了一个全局常量,这类变量...
8. **`final`变量的变与不变**: `final`变量的不变性指的是其引用的地址不可变,但所引用的对象内容(如果对象是可变的,如`ArrayList`等)是可以改变的。这意味着你可以改变对象的状态,但不能改变`final`变量...
静态变量与静态方法类似,使用 static 关键字来修饰,例如 static int c = 0;。 class Value{ static int c = 0; static void inc(){ c++; } } class Count{ public static void prt(String s){ System.out....
5. **默认值**:静态变量与实例变量(非静态变量)有相同的默认值:数值类型默认为0,布尔类型为false,引用类型为null。 6. **访问方式**:静态变量可以通过类名直接访问,无需创建类的实例。例如,`ClassName....
1. 静态变量:static 变量是Shared by all instances of the class,这意味着所有类的实例共享同一个静态变量。静态变量在类装载时分配存储空间,所有类的实例可以访问和修改该变量。 2. 静态方法:static 方法是...