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表示“全局”或“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰 ...
随机推荐
- [进程管理]Linux进程状态解析之R、S、D
Linux是一个分时操作系统,能够在一个cpu上运行多个程序,每个被运行的程序实例对应一个或多个进程,这里介绍一下Linux进程状态. Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个 ...
- JVM 堆内存,参数优化
Java堆内存 http://www.importnew.com/19593.html JVM诊断之查看运行参数 JVM 垃圾回收器工作原理及使用实例介绍 https://www.ibm.com/de ...
- 【转】QQ传输文件原理参考(来自互联网)
QQ的文件发送是怎样的过程呢?通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话.随即,发送计 ...
- poj1269计算几何直线和直线的关系
We all know that a pair of distinct points on a plane defines a line and that a pair of lines on a p ...
- OC中的单例
概念 单例模式的意图是类的对象称为系统中唯一的实例,提供一个访问点,供客户类共享资源 什么情况下使用单例 )类只能由一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法 )这个唯一的实例 ...
- [大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用<2>
前言:上篇[大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用<1>中介绍了ES ,Kibana的单机到分布式的安装,这里主要是介绍Elast ...
- 微信公众号开发笔记3-sdk接入(nodejs)
另一个2小时 access_token是需要2小时更新一次,在这里,又引入了一个2小时获取一次的字段,这个字段是: jsapi_ticket,这个字段是接入sdk的前提.与access_token类似 ...
- Centos7.3 安装Mysql5.7并修改初始密码
1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...
- Android GreenDAO3.0——介绍
引言 最近,学东西比较零散,各种知识混杂,于是记下学习记录,免得又忘了. 官方网址:http://greenrobot.org/greendao/documentation/introduction/ ...
- BM算法详解
http://www-igm.univ-mlv.fr/~lecroq/string/node14.html http://www.cs.utexas.edu/users/moore/publicati ...