深入了最终在java中解的应用

  

最终在java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,最后还可以让你控制你的成员,方法或者是一个类是否可被覆写或继续等功能,这些特点使最终在java中拥有了一个不可或缺的地位,也是学习java时必须要知道和把握的要害字之一。
  

  


  

  

当你在类中定义变量时,在其前面加上最终要害字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在最后变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。下面这段代码演示了这一点:

        进口并不知道;   进口java.util.ArrayList;   进口java.util.LinkedList;   公共类蝙蝠{   最后π=3.14;//在定义时便给址值   最后int我;//因为要在构造函数中进行初始化,所以此处便不可再给值   最终名单列表;//此变量也与上面的一样   蝙蝠(){   我=100;=new LinkedList列表();   }   蝙蝠(int二世,列表l) {   我=2;   列表=l;   }   公共静态void main (String [] args) {   蝙蝠蝙蝠b=new ();   b.list。添加(新蝙蝠());//我=25;//b。=new ArrayList列表();   System.out.PRintln(“我=" + b。我+“列表类型:”+ b.list.getClass ());   b=new蝙蝠(23日新的ArrayList ());   b.list。添加(新蝙蝠());   System.out.println(“我=" + b。我+“列表类型:”+ b.list.getClass ());   }   }      

此程序很简单的演示了最后的常规用法。在这里使用在构造函数中进行初始化的方法,这使你有了一点灵活性。如蝙蝠的两个重载构造函数所示,第一个缺省构造函数会为你提供默认的值,重载的那个构造函数会根据你所提供的值或类型为最终变量初始化。然而有时你并不需要这种灵活性,你只需要在定义时便给定其值并永不变化,这时就不要再用这种方法。在主方法中有两行语句注释掉了,假如你去掉注释,程序便无法通过编译,这便是说,不论是我的值或是列表的类型,一旦初始化,确实无法再更改。然而b可以通过重新初始化来指定我的值或列表的类型、输出结果中显示了这一点:
  

        我java.util.LinkedList=100列表类型:课   我=23列表类型:类java.util.ArrayList      

还有一种用法是定义方法中的参数为决赛,对于基本类型的变量,这样做并没有什么实际意义,因为基本类型的变量在调用方法时是传值的,也就是说你可以在方法中更改这个参数变量而不会影响到调用语句,然而对于对象变量,却显得很实用,因为对象变量在传递时是传递其引用,这样你在方法中对对象变量的修改也会影响到调用语句中的对象变量,当你在方法中不需要改变作为参数的对象变量时,明确使用最后进行声明,会防止你无意的修改而影响到调用方法。
  

  

另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为最终才可使用,如下代码所示:
  

        公开课,随后{   空白innerClass(最终字符串str) {   类IClass {   IClass () {   System.out.println (str);   }   }   IClass ic=new IClass ();   }   公共静态void main (String [] args) {   随后公司=new随后();   inc.innerClass (“Hello”);   }   }      

<强>
  

  

将方法声明为决赛,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不答应任何从此类继续的类来覆写这个方法,但是继续仍然可以继续这个方法,也就是说可以直接使用。另外有一种被称为内联的机制,它会使你在调用最后的方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用最后进行方法定义。
  

  

  

当你将最终用于类身上时,你就需要仔细考虑,因为一个最终类是无法被任何人继续的,那也就意味着此类在一个继续树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于最终类中的成员,你可以定义其为决赛,也可以不是决赛。而对于方法,由于所属类为最后的关系,自然也就成了最后型的。你也可以明确的给最终类中的方法加上一个决赛,但这显然没有意义。

深入了最终在java中解的应用