【笔记】Java.static,final,常量设计

static关键字 静态的
可作用在 变量、方法、类、 匿名方法块。
static变量只依赖于类存在,不依赖于实例存在。
在静态方法中只能使用静态变量,不能使用非静态变量。
静态方法也不能引用非静态方法。
在一个类中程序的执行顺序:static代码块 -> 匿名块 -> 构造函数,static块只会运行一次。即静态代码块、匿名代码块先于构造函数。

单例模式singleton
保证一个类有且只有一个对象。采用static来共享对象实例;采用private构造函数,防止外界new操作。
限定某一个类在程序运行过程中只能由一个实例对象在内存空间。
设计模式:在软件开发过程中,经过验证的用于解决特定问题、重复出现、特定环境下的解决方案。

例子:

public class class01 {
	public static class01 obj = new class01();//静态变量
	private String content;
	
	private class01() {
		this.content = "abc";
	}
	public String getContet() {
		return content;
	}
	public void setConcent(String concent) {
		this.content = concent;
	}
	public static class01 getInstance() {//静态方法,只可以使用静态变量
		return obj;
	}
	
	public static void main(String[] args) {
		class01 obj1 = class01.getInstance();
		System.out.println(obj1.getContet());//输出结果:abc
		class01 obj2 = class01.getInstance();
		System.out.println(obj2.getContet());//输出结果:abc
		
		obj2.setConcent("kyz");
		System.out.println(obj1.getContet());//输出结果:kyz
		System.out.println(obj2.getContet());//输出结果:kyz
		
		System.out.println(obj1==obj2);//输出结果:true
	}
}
/*这段代码是错的,因为class01是静态的,只能在自己的类内通过静态方法getInstance()创建
class B{
	class01 A = new class01();
}
*/

final
用来修饰 类、方法、字段。
final限制的类不能被继承。
父类中的final方法,在子类中不可改写。
final限制的变量,不能修改其值。
final限制的对象实例,不能修改其指针,可修改对象内部的值(地址不可修改)。

常量设计

常量:一种不能修改的变量。
Java中一般用public static final修饰常量,且名字一般全大写用"_"连接。
Java没有constant关键字,常量一般用final修饰,不会修改、只存在一份要用static限制,方便访问则用public修饰。

特殊的,接口内定义的变量默认是常量(public static final)。

常量池
对于Java的基本类型的包装类或字符串都建有常量池,使得相同的值只存储一份,节省空间。
基本类型的包装类:Boolean,Byte,Short,Integer,Long,Character,Float,Double.
其中除了Float和Double没有常量池,以他的都有。
常量池对应的范围:
Boolean:ture,false;
Byte:-128~127;
Character:0~127;
Short,Int,Long:-127~128.

例如:

public static void main(String[] args) {
	Integer n1 = 127;
	Integer n2 = 127;
	System.out.println(n1==n2);//true
	Integer n3 = 128;
	Integer n4 = 128;
	System.out.println(n3==n4);//false
}

基本类型的包装类和字符串有两种创建方式:
1.常量式,放在栈内存(将被常量化)
String str = "hello";
2.用new对象创建,放在堆内存(不会常量化)
String str = new String("hello");
Java编译器会优化已经确定的量(常量),把值相同的量放在同一栈内存,内存地址相同;不会优化new出来的变量,内存地址不同。

不可变对象
不可变对象:一旦创建,这个对象就不能更改,在其内的成员变量的值也不能修改,包括八个基本类别的包装类,String,BigLnteger和BigDecimal等。
可变对象:普通的对象。
对于字符串加法,StringBuilder / StringBuffer 在原地址增减String变量,修改快速。
不可变对象提高读效率,字符串append操作速度:StringBuilder > StringBuffer > String .

  • 注:
    StringBuffer 同步,线程安全;
    StringBuilder 不同步,线程不安全。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值