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安装篇
装了vps,环境又要自己配置.mysql比较难装上. 1.安装MySQL 5.5.x的yum源:rpm -Uvh http://repo.webtatic.com/yum/centos/5/lates ...
- HDU 4811 Ball 贪心
题目链接: 题目 Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 问题描述 ...
- EXT4.2--Ext Designer 使用
前言: “画EXT”是一个美好的想法,如果有一款可视化工具能够只需进行拖拽而设计EXT,生成代码--那真是一件美丽的事.然而现实是,即使是为Eclipse装上EXT插件,用上idea,手写代码的提示也 ...
- BestCoder Round #2
TIANKENG’s restaurant http://acm.hdu.edu.cn/showproblem.php?pid=4883 竟然暴力1.44*10^7 还要*T=100 竟然过了 # ...
- Roy Li的学习和成长自传
我不知道自己是什么时候从哪里来到这个世界上的,也许是石头里蹦出来的,也许是女娲捏出来的,上帝造出来的.上溯到我记忆的最前端,抱着我的好象 是一个女人,穿着白衣服,白得象石灰一样的那种.以至于后来我被告 ...
- RFID开发笔记 Alien阅读器文档
1. 开机使用serial connect,完成boot后使用TCP/IP协议与主机通信 2.TagList,是一个活跃标签的列表,这里活跃的含义是在一个间隔里被监听到.如果一个标签之前没有被监听到, ...
- JsRender系列demo-对null 和boolen类型数据的探讨
废话不说了,直接上代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he ...
- PHP-Phalcon框架中的数据库操作
> 本文描述了PHP-Phalcon框架中数据库操作方法,主要讨论Phalcon框架的Model组件中的操作方法.更详细的Model介绍请参考:官方文档 1. 连接数据库 在Phalcon框架中 ...
- 内存对齐-C语言struct内存占用问题
转1个写的比较全面的. http://hubingforever.blog.163.com/blog/static/17104057920122256134681/ 本文编辑整理自:http://hi ...
- hdu2013
http://acm.hdu.edu.cn/showproblem.php?pid=2013 #include<iostream> #include<stdio.h> #inc ...