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关键字的更多相关文章

  1. Java中Super和final关键字以及异常类

    1.final类不能有子类,也就谈不上继承的说法,如果用final修饰成员变量或者局部变量,那成了常量需要制定常量的值. 2.对象的上转型对象,上转型对象不能操作子类新增的成员变量,不能调用子类新增的 ...

  2. 再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  3. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  4. 关于Java中的static关键字

    Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...

  5. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  6. (转)Java中的static关键字解析

    转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...

  7. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  8. Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  9. Java中的static关键字

    写在前面: 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰 ...

随机推荐

  1. Android的root学习

    Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿.在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示输入root ...

  2. ICDM评选:数据挖掘十大经典算法

    原文地址:http://blog.csdn.net/aladdina/article/details/4141177 国际权威的学术组织the IEEE International Conferenc ...

  3. crontab的两种配置方式

    废话不多说,直接上菜了   第一种:在/etc/crontab下设置,指定用户名的 1.vim命令进入/etc/crontab 2.在最后一行加上 59 23 * * * root /root/cat ...

  4. 在SOUI中支持高分屏显示

    和手机屏幕一样,高分屏在PC上使用越来越多.传统的桌面程序都是像素为单位进行UI布局,而且是适配传统的96dpi的显示器的.这就导致这些程序在高分屏上显示很小,用户用起来很难受. 虽然windows系 ...

  5. RocketMQ 介绍与基本使用

    介绍 RocketMQ是阿里巴巴自研的第三代分布式消息中间件,是阿里系下开源的一款分布式.队列模型的消息中间件,原名Metaq,3.0 版本名称改为RocketMQ,是阿里参照kafka设计思想使用J ...

  6. PHP中的对象遍历技巧

    PHP中的对象遍历 对象的遍历,主要是指遍历对象中的,对外部可见属性.实际上就是用访问限制符public声明的属性,这点大家肯定很熟悉了.并且,在php中,遍历对象居然与遍历数组一样,都可以用使用fo ...

  7. java中的引用传递(同样适用于JS)

    1  java中的数据类型: 有8种基本数据类型,分别为:byte(1),boolean(1),char(2),short(2),int(4),long(8),float(4),double(8)   ...

  8. jquery与js实现全选功能的区别---2017-05-12

    一.jquery常用的事件 click(),dbclick() focus(),blur() change() keydown(),keypress(),keyup() mousedown(),mou ...

  9. git pull冲突:commit your changes or stash them before you can merge.

    今天用git pull来更新代码,遇到了下面的问题: error: Your local changes to the following files would be overwritten by ...

  10. Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue

    功能简介: LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列.队列中的元素遵循先入先出 (FIFO)的规则.新元素插入到队列的尾部,从队列 ...