2014.05.14日志----修饰符

1.访问修饰符:
public,private,protected,
默认



2.static
:成员变量,方法,静态代码块
static
关键字可以修饰成员变量,它所修饰的成员变量不属于对象的数据结构,而是属于类的变量,通常通过类名来引用static成员。
当创建对象后,成员变量是存储在堆中的,而static成员变量和类的信息一起存储在方法区,而不是在堆中,
一个类的static成员变量只有一份(存储在方法区),无论该类创建了多少对象。

public class Test01 {
	public static void main(String[] args) {
		Cat c1 = new Cat(2);
		Cat c2 = new Cat(3);
	}
}
class Cat {
	private int age;
	private static int numOfCats;
	public Cat(int age) {
		this.age = age;
		System.out.println(++numOfCats);
	}
}

其内存分配如下图所示:


如上的代码中,声明两个Cat类对象后,numOfCats的值为2。当声明第一个Cat类对象后,numOfCats值增1变为1,声明第二个Cat类对象后,因为numOfCats存在方法区中并且只有一份,所以其值在刚刚的1的基础之上变为2

static
方法的作用在于提供一些工具方法工厂方法。工具方法如:Math.sqrt()    Math.sin()    Arrays.sort()


static块为属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源(图像、音频等等)。

public class Test01 {
	public static void main(String[] args) {
		Foo foo = new Foo();
	}
}
class Foo {
	static {
		// 类加载期间,只执行一次
		System.out.println(" Load Foo.class ");
	}
	public Foo() {
		System.out.println("Foo()");
	}
}

上面代码的输出结果为:
    Load Foo.class
    Foo();
因为,在Foo类加载时,先运行了静态块,而后执行了构造方法,即,static块是在创建对象之前执行的。


3.final:变量,方法,类
final
关键字修饰变量,意为不可改变。
final修饰成员变量时,可以有两种初始化方式:a. 声明同时初始化   b.构造函数中初始化
final
关键字修饰局部变量,在使用之前初始化即可。
final
关键字修饰的方法不可以被重写。
final
关键字修饰的类不可以被继承。

4.static final
常量
static final
修饰的成员变量称为常量,必须声明同时初始化,并且不可被改变。常量建议所有字母大写。
实际应用中应用率较广,因为static final常量是在编译期被替换的,可以节约不必要的开支,如下代码演示了static final的用法:

public class Test01 {
	public static void main(String[] args) {
		System.out.println(Foo.NUM);
		// 代码编译时,会替换为:System.out.println(100);
	}
}
class Foo {
	public static final int NUM = 100;
}

说明:static final常量Foo.NUM会在编译时被替换为其常量值(100),在运行Goo类时,Foo类不需要被载入。这样减少了不必要的开支。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值