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 ...
随机推荐
- mysql left( right ) join使用on 与where 筛选的差异
有这样的一个问题mysql查询使用mysql中left(right)join筛选条件在on与where查询出的数据是否有差异. 可能只看着两个关键字看不出任何的问题.那我们使用实际的例子来说到底有没有 ...
- Unity Camera属性
Camera属性 1.Clear Flags 清除标记:决定屏幕的那部分将被清除.当使用多个相机来描绘不同的游戏景象时,利用它是非常方便的. 2.Background 背景:在镜头中的所有元素描绘完成 ...
- C++中的快速排序(使用vector和数组的不同)
1.快速排序是最最基本的排序算法之一,时间复杂度是O(nlog2(n)) 基本思想:分治法+递归 假设key为该序列的第一个元素,从后往前遍历,找到第一个小于key值的元素,将该元素赋值给左边的起始值 ...
- 二分查找or折半查找
package com.gxf.search; /** * 测试折半查找or二分查找 * @author xiangfei * */ public class BiSearch { /** * 非递归 ...
- KVM通过qemu实现USB重定向
KVM是通过qemu来支持USB设备的,可以在启动的时候就指定需要连接的USB设备,也可以系统启动后动态的添加删除.通过qemu的help可知,使用qemu的usb_add host:xxx:xxx来 ...
- android开发 java与c# 兼容AES加密
由于android客户端采用的是AES加密,服务器用的是asp.net(c#),所以就造成了不一致的加密与解密问题,下面就贴出代码,已经试验过. using System; using System. ...
- angular-file-upload API angular文件上传插件
官方例子 : http://nervgh.github.io/pages/angular-file-upload/examples/simple/ ===Directives=== nvFileSel ...
- 2434: [Noi2011]阿狸的打字机 - BZOJ
Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...
- 【BZOJ】【1029】【JSOI2007】建筑抢修
贪心 按T2(完成时限)排序,然后从前往后依次枚举 如果sum+a[i].t1<=a[i].t2则加入 如果来不及修这个建筑: 如果当前这个建筑的维修时间t1比之前修过的建筑中耗时最长的耗时短, ...
- [BC]BestCoder Round#86小结
1001 [题意] 给定一个长度为n(n<=100000)的正整数序列,给出m(m<=100000)个子集合和的记录,问哪些一定比正确的记录多了 [题解] 对正整数序列求和,记录比和大的一 ...