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 ...
随机推荐
- Android ADB 端口占用问题解决方案
问题描述: The connection to adb is down, and a severe error has occured. You must restart adb and Eclips ...
- windows批处理(cmd/bat)编程详解
reference: http://blog.csdn.net/bingjie1217/article/details/12947327 http://www.cnblogs.com/doit8791 ...
- POJ 3723 Conscription 最小生成树
题目链接: 题目 Conscription Time Limit: 1000MS Memory Limit: 65536K 问题描述 Windy has a country, and he wants ...
- shell 循环使用
问题描述: shell中for循环while循环的使用 问题解决: (1)for循环 (1.1)数 ...
- oracle 删除表、数据
truncate ddl语句,删除表中数据,速度要比delete快:且所有自增字段重新开始计数:删除数据保留表结构:删除的数据不进入rollback segment,无法恢复.例: trunc ...
- ZendStudio中设置SVN:ignore
使用ZendStudio开发SVN中的代码时,经常容易将 .project..settings..buildpath 这类的zend的工程文件提交上去,非常麻烦,有几种方法可以去掉这个麻烦. 1.在Z ...
- LA 4384
扩展欧几里得 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
- Ubuntu下非常给力的下载工具--uget+aria2
转自Ubuntu下非常给力的下载工具--uget+aria2 Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源.为己所用,而不是仅仅从原始地址这单一资源处下载. Ubuntu下也 ...
- [Unity3D+算法]一小时做个2048
原地址:http://blog.csdn.net/dingxiaowei2013/article/details/36462749 048是继FlappyBird之后另一个比较热的轻量级的手游,简单易 ...
- hdu 1180 诡异的楼梯(广搜,简单)
题目 挺简单的一道广搜题,只要用判断时间是偶数还是奇数就可以判断楼梯的方位,但是我这傻逼居然写了那么久啊那么久,我果然秀逗了,,,, #define _CRT_SECURE_NO_WARNINGS # ...