Java中的static、final关键字
static
static 的含义是静态的,是一个静态修饰符,一般来说,被static修饰的有以下几种,类、变量、方法、代码块。
static修饰类
Java中普通的类是不允许被声明为静态的,但是有一种类特殊,那就是内部类,对内部类没什么研究,暂且先不谈。
static修饰变量
static修饰成员变量时,这个变量可以直接通过 类.变量 的方式调用,而不需要new一个对象通过 对象.变量 的方式调用,static修饰的成员变量,在类加载的时候就加载了,一般把static修饰的变量叫类变量,不用static修饰的变量叫做实例变量,实例变量在new 出这个对象的时候才会被加载。所以说,类变量的加载是早于实例变量的,类变量是存放在静态域中的。当然,不应该为了方便访问数据就使用static修饰成员变量,只有当数据是需要共享的时候才考虑使用static修饰。在论坛上看到一个人说,静态变量主要是应用于可重用性高的 变量身上,由于静态变量是在程序开始时就在数据池中生成的,不可变的。定义的太多了,会影响到程序的运行效率,并且容易引起溢出的异常, 所以 尽量少定义静态变量,可以用局部变量代替静态变量,可以及时有效的销毁定义的变量。
static修饰方法
与static修饰成员变量一样,static修饰的方法也可以通过 类.方法 直接调用,类方法内部可以调用静态的属性和静态的方法但是不能调用非静态的属性和方法,反之,非静态的方法可以调用静态变量和静态方法。
static代码块
static代码块又叫静态代码块,一个类当中可以创建多个静态代码块,静态代码块在JVM加载类时就会直接被加载,每个静态代码块只会被执行一次。
以下面小小的代码来阐述一下
public class Test{ static{ int x=5; } static int x,y; public static void main(String args[]){ x--; myMethod( ); System.out.println(x+y+ ++x); } public static void myMethod( ){ y=x++ + ++x; } }
答案输出的是3
解析:JVM在加载.class文件的时候就执行静态代码块了,赋值x=5,但是静态代码块中的x是局部变量,并不影响局部变量的x,静态代码块被执行完之后这个局部变量x就被销毁了,所以x仍然是0,执行x--操作时,x=-1,这时调用myMethod()方法,x++是赋值再自增,++x则是先自增再赋值。所以 y= -1+1=0,所以x+y+ ++x=1+0+2=3
final
final表示最终的、不可改变的。在Java中,被final修饰的有变量、方法、类。
final修饰变量
被fianl修饰的变量表示这个变量不可被修改,final修饰的变量,无论是类属性,还是成员属性或者局部变量,都需要显示的初始化,即在声明这个final变量的时候就需要为其赋值,而且只能赋值一次。
另外,final修饰的引用变量时,指的是引用指向的内存地址不变,它始终指向的是当前的对象,但是对象的值是可以发生改变的。
final修饰方法
被final修饰的方法表明这个方法不可被重写。
final修饰类
被final修饰的类不能被继承,需要注意的是,抽象类是不能被final修饰的,因为抽象类必须被继承才有意义。
在项目中,由于有些变量经常被调用,而且变量是个常量,所以经常是static 和final联合使用,例如:
public static final String NAME= " chenhuan" ;
被修饰的常量一般是全部大写如果是多个单词的话,中间用_隔开,比如:NAME_CHEN。
Java中的static、final关键字的更多相关文章
- Java中Super和final关键字以及异常类
1.final类不能有子类,也就谈不上继承的说法,如果用final修饰成员变量或者局部变量,那成了常量需要制定常量的值. 2.对象的上转型对象,上转型对象不能操作子类新增的成员变量,不能调用子类新增的 ...
- 再议Java中的static关键字
再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
- Java中的static关键字解析 转载
原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...
- Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- Java中的static关键字
写在前面: 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰 ...
随机推荐
- JS上了贼船
本文纯属个人观点,没有引经据典,没有小心求证,just吐槽. 互联网的火热.移动web,带动了前端的飞速发展,js好像搭上了顺风车,身价水涨船高,如日中天. web前端是啥?html + css + ...
- 与64位版本的Windows不兼容,masm运行不了
问题: 在Window64位运行不了的masm 解决方法: 1.下载DosBox0.74(当前最新): 2.安装后运行,运行后出现控制台: 3.在DosBox的控制台下运行 Mount x: x:/m ...
- Centos7.3 安装Mysql5.7并修改初始密码
1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...
- Struts2之2.5.10.1HelloWorld
Struts2.5.10.1是目前为止最新的版本,struts2建议持续跟进,理由大家都懂.好了,下面步入正题. 基于struts2.5.10.1建立一个HelloWorld,基于注解的哈! 工具:e ...
- NancyFx 2.0的开源框架的使用-Stateless(二)
继续上一篇Stateless的博文,在上一篇的博文的基础上稍微加点东西 接下来右键解决方案添加新项目,一样建一个空的Web项目 然后在StatelessDemoWeb项目里面添加Views文件夹,Sc ...
- 使用faker 生成中文测试数据
https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/zh_CN/Address.php 常用的类型都在里面. 下面是一 ...
- error C2039: 'SetDefaultDllDirectories'错误解决办法
使用VS2013+WDK8.1+Win7开发UMDF驱动,当使用了CComPtr类,包含了atlcomcli.h头文件却报错,错误如下: Error 3 error C2039: 'SetDefaul ...
- AngularJS操作DOM——angular.element
addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元素里面的末尾处插入参数内容a ...
- javaScript 设计模式系列之一:观察者模式
介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),一个目标对象管理所有相依于它的观察者对象.该模式中存在两个角色:观察者和被观察者.目标对象与观察者之间的抽象耦合关系能够单独扩展 ...
- 如何创建并运行java线程
本文转载地址: http://ifeve.com/creating-and-starting-java-threads/ Java线程类也是一个object类,它的实例都继承自j ...