java的final关键字
来源:互联网 发布:ubuntu怎么装输入法 编辑:程序博客网 时间:2024/06/05 21:07
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。
1、修饰类
当用final修饰一个类,表明这个类不能被继承。也就是说如果一个类永远不让被继承,那么他可以用final修饰,String类就是final类。
final类的成员变量可以根据需要设为final,但是要注意final类的所有成员方法都会隐式第指定为final方法。
2、修饰方法
final修饰方法,一、可以把方法锁定,以防任何继承类修改它的含义。即:该方法在子类中明确禁止被覆盖。二、早期的java实现版本中,会将final方法转为内嵌调用,尅呀提高效率。在最近的java版本中,不需要使用final方法进行这些优化了。
注:类的private方法会隐式地被指定为final方法。
3、修饰变量
一、对于一个final变量,如果是基本数据类型的变量,则其数据一旦在初始化之后边不能更改。如果是一个引用类型的变量,则在其初始化之后不能再指向其他对象。
深刻理解final关键字。
1.类的final变量和普通变量有什么区别?
当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
2.被final修饰的引用变量指向的对象内容可变吗?
在上面提到被final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容可变吗?看下面这个例子:
public class Test {public static void main(String[] args) {
final MyClass myClass = new MyClass();
System.out.println(++myClass.i);
}
}
class MyClass {
public int i = 0;
}
这段代码可以顺利编译通过并且有输出结果,输出结果为1。这说明引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。
3.final和static
很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。看下面这个例子:
public
class
Test {
public
static
void
main(String[] args) {
MyClass myClass1 =
new
MyClass();
MyClass myClass2 =
new
MyClass();
System.out.println(myClass1.i);
System.out.println(myClass1.j);
System.out.println(myClass2.i);
System.out.println(myClass2.j);
}
}
class
MyClass {
public
final
double
i = Math.random();
public
static
double
j = Math.random();
}
运行这段代码就会发现,每次打印的两个j值都是一样的,而i的值却是不同的。从这里就可以知道final和static变量的区别了。
- Java的final关键字
- Java的final关键字
- java的final关键字
- java的final关键字
- Java的final关键字
- Java的final关键字
- Java的关键字 final
- java的final关键字
- java的final关键字
- java的final关键字
- JAVA的关键字:final && synchronized
- java final关键字的用法
- JAVA final关键字的作用
- java final关键字的使用
- java final 关键字的详解!
- java final关键字的用法
- java--final关键字的作用
- 浅谈Java的final关键字
- 一份C++线程池的代码(转)
- Android studio在函数头部添加说明性注释和参数的注释的快捷键
- C++类的访问问题
- 字典树专题-1001
- secureCRT for mac破解
- java的final关键字
- 程序员常用的编辑器
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- Openssl摘要算法接口函数使用
- hdu 5325 Crazy Bobo 附上证明 Multi-University Training Contest 3
- 使用IAT表注入模块到进程中 样例
- 黑马程序员--iOS基础知识---C语言中的函数
- 虚拟机中centos7实现nat静态ip上网
- HDU-2199-Can you solve this equation?