当前位置:  技术问答>java相关

请问声明一个对象时final修饰符有何用?

    来源: 互联网  发布时间:2015-04-01

    本文导语:  以下一个极简单的Swing程序,在final JLabel label = new JLabel("Hello World");中final是做什么用的?为什么frame对象没有final? //v 1.3 import javax.swing.*; public class HelloWorldSwing {     public static void main(String[] args) {   ...

以下一个极简单的Swing程序,在final JLabel label = new JLabel("Hello World");中final是做什么用的?为什么frame对象没有final?

//v 1.3
import javax.swing.*;

public class HelloWorldSwing {    
public static void main(String[] args) {
         JFrame frame = new JFrame("HelloWorldSwing");

        final JLabel label = new JLabel("Hello World");

frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
         frame.setVisible(true);
     }
}

|
final是阻止任何类继承这个类,或是一个方法不能被覆盖

|
final表示该类不能再被继承,在不需要有子类的情况下用final来定义类,这样可以使程序的运行效率更高,而且也更安全。在这儿,如果你想把frame也定义为final也未尝不可

|
因为作者可能不希望label对象被更改,所以将其前面使用final修饰符。
凡是前面有了final修饰符后,该对象或变量将不能更改
对变量使用final,类似于c++里面的const变量
对对象使用final后,你只能改变此对象属性,而不能其指向其它对象

|
看看这个,你会对 java 中的 final 修饰更加理解的,因此有些时候,对有些情况应多一些小心:

主题:JAVA中的常量 
作者:cstiger 时间:2001-10-18 13:11:25 
最近遇到一个问题,花了不少时间才解决,原因很简单,先贴出来,请大家参考指正。

1。先看两个程序:
//+------------------
 | A.java
//+------------------
public class A {
 public final static String NAME = "A";
 public final static String getName() {return NAME;}
}
// end of A.java

//+------------------
 | B.java
//+------------------
public class B {
 public static void main(String arg[]) {
   System.out.println(A.NAME);
   System.out.println(A.getName());
 }
}
// end of B.java

2。编译两个程序,得到A.class和B.class
3。执行java -classpath . B
A
A

4。修改A.java,将"A"改为"a":
//+------------------
 | A.java 
//+------------------
public class A {
 public final static String NAME = "a";
 public final static String getName() {return NAME;}
}
// end of A.java

5。执行java -classpath . B
A
a

以上流程说明java中的常量是编译时直接连接到执行代码中的,而不是想象中在运行时确定的。 

|
对于“top-level Type"(class/interfacs)来说:
final只能用来修饰class, 表明这个类不能被继承


对于“nested Type"(method/field/nested-class/nested-interfacs)来说:
final method表明不能被override,因此,尽量把不会被override
的方法声明为final,可以加快速度,condensity软件采用这个
作为一种优化Java class的手段

final field表明不能在构造器中被再赋值/不能在其他地方被赋值

final nested-class表明不能被继承

|
这种变量只允许赋值一次

|
不能更改,可理解为C中的const

    
 
 

您可能感兴趣的文章:

  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • 请问如何把StringBuffer 的对象转化成一个InputStream 的对象,或者InputStream 子类的对象也可以!
  • 1. 请问linux下可以使用“typedef list<对象*> 对象列表名 ”和iterator吗?
  • 请问如何把application对象传到javabean中?
  • 请问如何判断一个对象是否已经初始化???
  • 请问如何在JavaBean中定义request对象
  • 请问用Vector定义的变量/对象有什么用?
  • 请问如何判断一个对象是否已经初始化??? iis7站长之家
  • 请问怎样用java调用COM对象﹐那里有类型库下载?
  • 请问怎样创建一个Date对象!!
  • 请问有什么java共通类能在程序里将unicode转换成String对象?
  • 请问如何对Double对象进行运算?
  • 请问:在JAVA中创建句柄后,有没有给这个对象分配内存?
  • 请问各位对于jsp中用到的对象怎么查找它的帮助!
  • 请问如何建立一个Image对象,并导入gif,jpg,png等格式图片并显示
  • 请问大侠们怎么检测session对象某个变量负了值!!??比如^
  • 请问如何改变(设置)JTable对象的第i列列宽?
  • 请问怎样设置JTree对象的图标
  • 请问如何通过Session对象判断这个session是否已经不合法?
  • 请问java.sql包中 preparedStatement 对象的setString(int parameterIndex,java.lang.String x)方法怎么用?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问Java中的二维数组声明问题
  • 请问如何在一个函数内部定义的一个新类中使用函数里声明的变量
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待
  • 请问如何在一台单机上装VMware的网络访问问题?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3