Java关键字static、final使用小结
static
final
public class TestStaticFinal {
private
static final String strStaticFinalVar = "aaa";
private
static String strStaticVar =
null;
private
final String strFinalVar =
null;
private
static final int
intStaticFinalVar = 0;
private
static final Integer integerStaticFinalVar = new Integer(8);
private
static final ArrayList alStaticFinalVar = new ArrayList();
private
void test() {
System.out.println("-------------值处理前----------");
System.out.println("strStaticFinalVar="
+ strStaticFinalVar + "");
System.out.println("strStaticVar="
+ strStaticVar + "");
System.out.println("strFinalVar="
+ strFinalVar + "");
System.out.println("intStaticFinalVar="
+ intStaticFinalVar + "");
System.out.println("integerStaticFinalVar="
+ integerStaticFinalVar + "");
System.out.println("alStaticFinalVar="
+ alStaticFinalVar + "");
//strStaticFinalVar="哈哈哈哈";//错误,final表示终态,不可以改变变量本身.
strStaticVar
= "哈哈哈哈";
//正确,static表示类变量,值可以改变.
//strFinalVar="呵呵呵呵"; //错误,
final表示终态,在定义的时候就要初值(哪怕给个null),一旦给定后就不可再更改。
//intStaticFinalVar=2;
//错误, final表示终态,在定义的时候就要初值(哪怕给个null),一旦给定后就不可再更改。
//integerStaticFinalVar=new
Integer(8); //错误,
final表示终态,在定义的时候就要初值(哪怕给个null),一旦给定后就不可再更改。
alStaticFinalVar.add("aaa");
//正确,容器变量本身没有变化,但存放内容发生了变化。这个规则是非常常用的,有很多用途。
alStaticFinalVar.add("bbb");
//正确,容器变量本身没有变化,但存放内容发生了变化。这个规则是非常常用的,有很多用途。
System.out.println("-------------值处理后----------");
System.out.println("strStaticFinalVar="
+ strStaticFinalVar + "");
System.out.println("strStaticVar="
+ strStaticVar + "");
System.out.println("strFinalVar="
+ strFinalVar + "");
System.out.println("intStaticFinalVar="
+ intStaticFinalVar + "");
System.out.println("integerStaticFinalVar="
+ integerStaticFinalVar + "");
System.out.println("alStaticFinalVar="
+ alStaticFinalVar + "");
}
public
static void main(String args[]) {
new
TestStaticFinal().test();
}
}
一、final 数据
向编译器告知一块数据是恒定不变的。如:
1)永不改变的编译时常量;
2)在运行时被初始化的值,而你不希望它被改变。
一个既是static又是final的域只占据一段不能改变的存储空间,一般用大写表示,并使用下划线分隔各个单词。
数据类型:
1)基本数据类型(int,float,char,double,boolean等):final使数值恒定不变;
2)对象引用(string,array,class等):final使引用恒定不变,但其值可以改变。
空白final
空白final是指被声明为final但又未给定初值的域。空白final在关键字final的使用上提供了更大的灵活性,为此,一个类中的final域就可以做到根据对象而有所不同,却又保持其恒定不变的特性。但无论如何,编译器都确保空白final在使用前必须被初始化。
final的赋值方式有两种:
1)在域的定义处对final进行赋值,如:private final int i = 0;
2)在构造器中用表达式对final进行赋值,如:private final int j;public ClassA(){ j = 1;}
对于空白final的赋值,我们使用第二种方式。
final 参数
在参数列表中以声明的方式将参数指明为final,意味着你无法在方法中更改参数引用所指向的对象。你可以读参数,但却无法修改参数,这一特性主要用来向匿名内部类传递数据。
二、final 方法
使用final方法的原因:
1)把方法锁定,以防任何继承类修改它的含义。这是出于设计的考虑:想要确保在继承中使方法行为保持不变,并且不会被覆盖。
2)早期使用final方法的第二个原因是效率。早期的JAVA实现中,final方法同意编译器将针对该方法的所有调用都转为内嵌调用,即以方法体中的实际代码的副本来替代方法调用,从而省去方法调用的时间开销。而非final方法的调用过程一般为:将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈中的参数,处理返回值。
但是,当你的final方法的代码很长时,用final可能适得其反,因为经过编译器内嵌之后代码长度大大增加,于是就增加了JVM解释字节码的时间。在最近的JAVA版本中,虚拟机可以探测到这些情况,于是效率问题会让编译器和JVM来处理,而不再使用final方法来提高效率。final方法的使用原因就只剩下第一条。
final与private关键字
类中所有的private方法都隐式地指定为是final的。由于无法取用private方法,所以也就无法覆盖它。
三、final 类
当将某个类的整体定义为final时,就表明了你不打算继承该类,而且也不允许别人这么做。
Java关键字static、final使用小结的更多相关文章
- [JAVA关键字] static & final
JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...
- Java 关键字static final使用总结
Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被 ...
- java关键字static使用总结
java关键字static使用总结 1.static修饰的方法被称之为静态方法也叫做类方法,加static的方法,可以通过类名直接访问,不加static的方法只能通过对象名访问. 静态方法可以直接通过 ...
- Java关键字transient和volatile小结(转)
Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. tran ...
- Java中static final 与 final 的区别(转载)
转自:http://advance0683.iteye.com/blog/1107732 Java中static final 与 final 的区别: 例子: Java代码 import java.u ...
- java笔记——Java关键字static、final使用小结
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- Java关键字static、final
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- java中 static,final,transient,volatile关键字的作用
static 和final static 静态修饰关键字,可以修饰 变量,程序块,类的方法: 当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而 ...
- Java关键字--static
在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量.Java静态方法.Java静态类 Java Static Variables Java instance variable ...
随机推荐
- 64bit Ubuntu, Android AAPT, R.java
Ubuntu 13.10 aapt: error while loading shared libraries: libstdc++.so.6: cannot open shared object f ...
- 设置NODE_ENV=production
NodeJS - Express 4.0下设置环境变量NODE_ENV=production,并不是修改文件的配置信息,而是通过命令行来实现. 首先在命令行下进入项目的目录,然后先后执行如下命令: s ...
- 关于windbg的认识
1.windbg是一个用于调试代码的工具,基础介绍:http://www.pediy.com/kssd/pediy10/94457.html 2.关于windbg和vs在代码调试方面的区别,参考:ht ...
- 1509: [NOI2003]逃学的小孩 - BZOJ
Description Input 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的信息.第i+1行包含整数Ui.Vi.Ti(1Ui ...
- linux进程管理之开机启动
下面用自启动apache为例;自启动脚本:/usr/local/apache2/bin:./apachectl start文件位于/etc/rc.d/init.d下,名为apached, 注意要可执行 ...
- apache 多域名配置
一直不明白apache多域名配置的问题,所以只能用不同的端口来配置,现在终于搞懂了一点 首先,开启apache的vhost模块 找到配置文件httpd.conf中的下面两行 #LoadModule v ...
- Java学习第三篇:类的三大特征,抽象类,接口,final关键字
一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...
- 1009-2的N次方
描述 编程精确计算2的N次方.(N是介于100和1000之间的整数). 输入 正整数N (100≤N≤1000) 输出 2的N次方 样例输入 200 样例输出 16069380442589902755 ...
- CentOS中基于不同版本安装重复包的解决方案
http://blog.chinaunix.net/uid-21710705-id-3039675.html
- POJ1068Parencodings
http://poj.org/problem?id=1068 这个题的话就是先把给出来的一串数字转化成括号,再把括号转化成要求的,最后输出就行了 #include<cstdio> #inc ...