首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java中final步骤

2012-08-22 
java中final方法之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承

java中final方法

之所以要使用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的使用方法

热点排行