之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。
采用final方法的第二个理由是程序执行的效率。将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。
final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不
仅如此,final还可以让你控制你的成员、方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或缺的地位,也
是学习Java时必须要知道和掌握的关键字之一。 final成员
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,
而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方
只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。下面这段代码演示了这一点:
import java.util.List; import java.util.ArrayList;
import java.util.LinkedList; public class Bat{
final PI=3.14; //在定义时便给址值 f
1.定义及编程技巧
/*
* final方法是在派生类中不能被覆盖的方法,final类是不能被覆盖的类。一个类可以含有final方法
* final类和final方法使用final声明
* 技巧:final static 类型成员变量。static使得变量只存在一个拷贝。final使得它不能改变。
* */
2.关于final成员赋值的讨论:
a.final 成员能且只能被初始化一次
b.final成员必须在声明时或者方法中被初始化,而不能在其它的地方被初始化。
eg:
package mypackage;
public final class FinallyTest
{
private final int params;
public FinallyTest()
{
params=5;
}
public FinallyTest(int para)
{
params=para;
}
public static void main(String[] args)
{
FinallyTest ft=new FinallyTest(20);
System.out.println(ft.params);
}
}
|
eg2:
package mypackage;
public final class FinallyTest
{
private final int params;
public FinallyTest()
{
this(10);
}
public FinallyTest(int para)
{
params=para;
}
public static void main(String[] args)
{
FinallyTest ft=new FinallyTest();
System.out.println(ft.params);
}
}
|
上面是两个final初始化的例子。下面我们看一下两种错误的例子
eg3
package mypackage;
public final class FinallyTest
{
private final int params=11;//此处已经赋值
public FinallyTest()
{
this(10);
}
public FinallyTest(int para)
{
params=para;
}
public static void main(String[] args)
{
FinallyTest ft=new FinallyTest();
System.out.println(ft.params);
}
}
Error(18,3): variable params is declared final; cannot be assigned
|
eg4:
package mypackage;
public final class FinallyTest
{
private final int params;
public FinallyTest()
{
this(10);
}
public FinallyTest(int para)
{
this.setParams(para);//不能用函数给它赋值必须直接赋值 |
}
public void setParams(int b)
{
params=b;
}
public static void main(String[] args)
{
FinallyTest ft=new FinallyTest();
System.out.println(ft.params);
}
}
Error(22,2): variable params is declared final; cannot be assigned
|
eg5
package mypackage;
public final class FinallyTest
{
private final int params;
public FinallyTest()
{
this(10);
}
public FinallyTest(int para)
{
}
public static void main(String[] args)
{
FinallyTest ft=new FinallyTest();
System.out.println(ft.params);
}
}
Error(10,19): variable params might not have been initialized
|
3.几点说明:
在java中,普通变量系统是自动初始化的,数值变量自动初始化为0,其余类型变量自动初始化为空。但是final类型的变量必须显示初始化,且初始化的方法必须是在申明时或者在构造方法中直接赋值,而不能通过调用函数赋值。
关于构造方法重载的问题,如果程序中没有显示的说明构造方法,那么就有默认的构造方法。如果程序中显示的声明了构造方法,那么默认的构造方法就不再存在。
在本例中,给出了关于this的使用方法
分享到:
相关推荐
Java中final类的简单使用,并对Java关键字的使用做出了总结
Java中final的深度剖析
java中final和static讲解及实例
自己总结的java中final和static的区别,请大家提出宝贵意见。
Java中的final关键字
java中final与static的用法
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
NULL 博文链接:https://zkf60553.iteye.com/blog/1307592
带你深入理解Java中的final关键字_动力节点Java学院整理.
本文档主要讲述的是Java中final的用法
Java中final共2页.pdf.zip
关于Java中final的深度剖析
Java中final,finally,finalize三个关键字的区别_动力节点Java学院整理
Java中的final关键字可以被用来修饰变量、方法和类等,意味着终结、不可改变,下面我们就来举例讲解Java中final关键字的用法:
Java中static、this、super、final用法.doc
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类 当用final修饰一个类时,表明这个类不能被继承。也就是说,...
在阅读过程中,尝试编写简单的Java程序,体验final关键字的作用,并观察final变量和final方法的特性。 建议通过阅读相关的Java教材或搜索资料,进一步了解与final关键字相关的高级主题,如不可变类和Enum枚举等内容...
Java中的final关键字 1、修饰类的成员变量 这是final的主要用途之一,和C/C++的const,即该成员被修饰为常量,意味着不可修改。 上面的代码对age进行初始化后就不可再次赋值,否则编译时会报类似上图的错误。 ...
Java final关键字的学习demo
在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记的方法不能被子类复写; (3).final标记的变量即成为常量,只能被赋值一次. 注意: 如果使用final来...