java中的static和final关键字

一:static

1)修饰成员变量:

static关键字可以修饰成员变量,它所修饰的成员变量不属于对象的数据结构,而是属于类的变量,通常通过类名来引用static成员。

当创建对象后,成员变量是存储在堆中的,而static成员变量和类的信息一起存储在方法区, 而不是在堆中,

一个类的static成员变量只有“一份”(存储在方法区),无论该类创建了多少对象。看如下的示例

public class StaticDemo {

 

public static void main(String[] args) {

People p1 = new People(18);

People p2 = new People(19);

People p3 = new People(20);

}

 

}

 

class People{

private int age;

private static int num;

public People(int age) {

this.age = age;

System.out.print(++num);

}

}

结果输出123,因为num存在方法区只有一份!

 

2)static修饰方法:

static修饰的方法不需要针对某些对象进行操作,其运行结果仅仅与参数有关,调用的话直接用类名就可以调用了。因此static方法中不能对非static成员进行访问,

static方法的作用在于提供一些工具方法(如Arrays.sort)和工厂方法(有兴趣可以了解静态工厂模式)等

 

3)static块:

属于类的代码块,在类加载期间执行并且只执行一次,可以用来加载静态资源。(如图片、音频和视频等文件)

 

二:final

1)final修饰变量:

final意为不可改变,修饰成员变量时可以在生命时初始化或者在构造函数中初始化,修饰局部变量时在使用之前初始化。要是企图改变final修饰等变量值则会编译错误!

 

2)final修饰方法:

final修饰等方法不能被重写。

 

3)final修饰类:

final修饰等类不能被继承,jdk中的一些基本类库被定义成final,例如String,Math,Integer等,这样可以防止对系统造成危害。

 

三:static final

static final修饰的成员变量被成为常量,必须声明时初始化并且不可被改变,static final常量在编译期间会被取代为其初始值。

 

posted @ 2017-11-21 23:46  子非齐  阅读(3806)  评论(0编辑  收藏  举报