basic java-1

1.JDK1.5+的基本类型自动装箱拆箱
Integer i1=10;
Integer i2=10;

他们产生的是同一个对象,那下面这个呢?
Integer i1=138;
Integer i2=138;

产生两个不同的对象,这是为什么呢?小于一个字节(-128~127)的数,java虚拟机会将这个对象放在缓存中,创建下一个对象是先去找是否已经存在这个对象。其实这里蕴含了一种设计模式-->flyweight(享元模式)-->将相同的属性作为对象的内部属性,不相同的属性作为方法的外部参数传进来

2.枚举
-->枚举可以有自己的构造方法(必须是private的)
-->枚举的任何一个子类都可以使用枚举类的带参构造方法创建对象,参见以下枚举类(包含枚举构造方法,抽象类...)

public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},GREEN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time) {
this.time = time;
}
}


3.反射(方法)的一个小例子
String habi="abcdefg"
Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);
System.out.println(charAt.invoke(gabi,2));

运行结果: c
当invoke的第一个参数为null的时候,说明是不需要对象就可以执行的方法,什么方法呢?当然是静态方法,很容易理解。

4.当一个对象存到HashSet中时,不要修改那些用于计算hashCode的字段。为什么?先要弄清楚HashSet的存储原理-->先把内存划为一块块的区域,然后根据对象的hashCode将对象存储了对应的区域中。这样,如果修改计算hashCode的字段,对象的hashCode就变化了,后面你如果再想删除这个对象时就删除不了了。这样就会出现内存泄露(变向说明java是有内存泄露的)。

5.利用反射,可以判断一个对象是否是数组或者其他类型:object.getClass().isArray()。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值