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表示“全局”或“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰 ...
随机推荐
- Excception and Error
exception and error都是继承throwable类; Exception就是程序中出现的异常,程序会去捕获: 但是error是比较严重的错误,程序是不会去捕获的: erroe:一般都是 ...
- .NET的JSON格式数据的三种转换方式
说明: 1..Net进行JSON格式的数据传递的时候,势必用到序列化和反序列化对象,总共有三种方式可是在.NET中实现序列化和反序列化的需求. 2.操作JSON的速度是:Json.net > M ...
- 最长递增子序列hdu1087
#include<map> #include<set> #include<list> #include<cmath> #include<queue ...
- 极光的开源礼物「Aurora IMUI」
今日,奉上我们拙作,仅为开源世界献出绵薄之力. Aurora IMUI,一个通用的即时通讯(IM)UI 库.不局限于任何 IM SDK. 本 UI 库提供了消息列表.输入视图等常用组件. 初心 过去的 ...
- Python批量修改文件名与后缀
引言: 有时因为文件版本的更新,后缀名会发生变化,例如Word13的docx到Word16的doc,又例如我们想修改音频文件的后缀.一个一个修改后缀名往往很麻烦,于是我们便可以写一个Python的脚本 ...
- CentOS下的yum命令
yum命令是rpm的一款前端工具,可以安装.更新.卸载rpm包,可以从指定服务器下下载rpm包并安装,可以自动解决依赖问题. 语法: yum [options] [command] [package ...
- hdu2612 Find a way BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 思路: 裸的BFS,对于Y,M分别进行BFS,求出其分别到达各个点的最小时间: 然后对于@的点, ...
- hdu2159 FATE 经典二维背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: 定义ans存当前满足条件的消耗的最小的忍耐值(满足条件的忍耐值为在当前消耗的忍耐值的情况 ...
- Java Swing 图形界面实现验证码(验证码可动态刷新)
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import j ...
- winXP/win7/win10系统关闭445端口方法全攻略
近日有多个高校发布了关于连接校园网的电脑大面积中勒索病毒的消息,这种病毒致使许多高校毕业生的毕业论文(设计)被锁.受害机器的磁盘文件会被篡改为相应的后缀,图片.文档.视频.压缩包等各类资料都无法正常打 ...