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. [KISSY5系列]KISSY5安装使用(二)

    上篇文章,我们遗留的一个问题就是,请求数量有点多,虽然现在的浏览器的请求资源都是并发的.但是我们还是尽量减少请求量. 但是KISSY里面这个问题我们怎么解决呢,其实还是从data-config=&qu ...

  2. 深入解析MySQL视图view

    阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...

  3. Kafka配置及简单命令使用

    一. Kafka中的相关概念的介绍 Kafka是一个scala实现的分布式消息中间件,其中涉及到的相关概念如下: Kafka中传递的内容称为message(消息),message 是通过topic(话 ...

  4. 前端框架对比之vue与regular(一)

    每次一写到Regular总是忍不住先介绍一下,Regualr是网易杭州研究所的一位叫郑海波的大神写的一款前端框架,目前 这款框架推广的不深,加上其和angular过于相似的框架名,导致接受力并不大,其 ...

  5. USACO section 1.1 C++题解

    USACO section1.1:DONE 2017.03.03 TEXT Submitting Solutions DONE 2017.03.04 PROB Your Ride Is Here [A ...

  6. Tomcat的一些实际操作

    1:tomcat7开启远程debug模式: ./catalina.sh jpda start 2:tomcat支持URL中文,解决tomcat get请求乱码问题(在TOMCAT_HOME/conf/ ...

  7. Day2 Python的运算符及三大语句控制结构

    Python的运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 Python的三大语句控制结构: ...

  8. MyBatis之级联小结

    在这之前我们知道了MyBatis为我们提供了三种级联:一对一关系(assocation).一对多关系(collection).鉴别器(discriminator).在最后一个鉴别器例子中,看到了当层级 ...

  9. java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦.效果差. 麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclip ...

  10. 《安卓网络编程》之第三篇 使用Apache接口

    在Android系统中,提供了一下三种通信接口: 标准的Java 接口:java.net Apache接口:org.apache.http Android网络接口:android.net.http 在 ...