java static final 内存_Java中的static和final

java中的static和final

此篇文章是记录我在学习Java中static和final关键字的笔记。

static:

一、static变量:

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。

两者的区别是:

对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

二、static方法:

static方法就是没有this的方法。在static方法的内部不能调用非静态方法,反过来,非静态方法可以在方法的内部调用static方法。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这里有点像全局方法。

声明一个方法为static至少有三重含义:

1)声明这个方法时,应该使用类名做前缀,而不是某一个具体的对象名。

2)要注意,在调用已被static定义的类、方法和属性时,如果一处地方修改了其相应的值,

当另外一个地方在调用这些类、方法和属性时,其对于的值就是已被修改的值,而不是它们刚开始被定义或者系统自动赋的值。

3)static方法只能修改static数据,因为static是全局变量,所以它不能修改某个特定区域的特定数据。

三、static块:

Static 块仅在该类被加载时执行一次,例如下面代码:

public class StaticTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

A a = new A();

B b = new B();

A a1 = new A();

System.out.println("do nothing!");

}

}

class A {

static {

System.out.println("aaaa");

}

}

class B {

static {

System.out.println("bbbbb");

}

}

最后只输出:

aaaa

bbbbb

do nothing!

并没有再输出一遍aaaa。

final:

谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。

修饰类

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。

final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

被final修饰的变量不能再改变变量的值。例如:

//错误代码,test1的值不能再更改

public final String test1 = "aaa";

test1 = "bbb";

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

final StringBuffer a=new StringBuffer("immutable");

//执行如下语句将报告编译期错误:

a=new StringBuffer("");

//但是,执行如下语句则可以通过编译:

a.append(" broken!");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值