码迷,mamicode.com
首页 > 编程语言 > 详细

Java之static和final的使用陷阱

时间:2016-05-18 06:57:37      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:static   final   java   

  1. 对于final类型的成员变量,一般来说有两种赋初值方式

    1.在声明final类型的成员变量时就赋上初值

    2.在声明final类型的成员变量时不赋初值,但在类的所有结构方法中都为其赋上初值

  2. static代码块:静态代码块

package com.yuanzijain08;

class P{
	static {
		System.out.println("static block");
	}
	public P(){
		System.out.println("p constatictor");
	}
}

public class StaticTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			P p = new P();
	}

}

执行结果

static block
p constatictor


3.

package com.yuanzijain08;

class P{
	static {
		System.out.println("P static block");
	}
	public P(){
		System.out.println("p contructor");
	}
}
class Q extends P{
	static {
		System.out.println("Q static block");
	}
	public Q(){
		System.out.println("Q contructor");
	}
}
class S extends Q{
	static {
		System.out.println("S static block");
	}
	public S(){
		System.out.println("S contructor");
	}
}
public class StaticTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			new S();
	}

}

执行结果

P static block
Q static block
S static block
p contructor
Q contructor
S contructor

4.静态代码块。静态代码块的作用也是完成一些初始化工作,首先执行静态代码块,然后执行构造方法,静态代码块在类被在加载的时候执行,而构造方法是在生成对象时候执行,要想在调用某个类来生成对象,首先要将类加载到Java虚拟机上,然后jvm加载这个类来生成对象

package com.yuanzijain08;

class P{
	static {
		System.out.println("P static block");
	}
	public P(){
		System.out.println("p contructor");
	}
}
class Q extends P{
	static {
		System.out.println("Q static block");
	}
	public Q(){
		System.out.println("Q contructor");
	}
}
class S extends Q{
	static {
		System.out.println("S static block");
	}
	public S(){
		System.out.println("S contructor");
	}
}
public class StaticTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			new S();
			new S();
	}

}

执行结果

P static block
Q static block
S static block
p contructor
Q contructor
S contructor
p contructor
Q contructor
S contructor

5.类的静态代码块只会执行一次,是在类在被加载时候执行的,因为每个类只会被加载一次,所以静态代码块只会被执行依稀,而构造方法则不然,每次生成一个对象的时候都会调用的构造方法,所以new一次就会调用构造方法

6.如果继承体系中既有构造方法,又有静态代码块,那么首先去执行最顶层类的代码块,一直执行到最低成的静态代码块,,然后去执行最顶层类的构造方法,一直执行最底层的构造方法,注意:静态代码块只能被执行一次

7.不能再静态方法中访问非静态的成员变量,可以在静态方法中访问静态的成员变量,可以在非静态方法中访问静态的成员变量

  总结:静态只能访问静态,非静态的可以访问一切方法

8.不能再静态方法中使用this关键字

Java之static和final的使用陷阱

标签:static   final   java   

原文地址:http://hnyuanzijian.blog.51cto.com/8869344/1774532

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!