Java几个简单例子

例子1

Class.isPrimitive()方法:判断Class类是否是基础数据类型

Class.isAssignableFrom:用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口,

      isAssignableFrom的参数类型都是Class 

      instanceof 的参数类型是对象

@Test
	public void testAssignableFrom() {
		Assert.assertEquals(true, boolean.class.isPrimitive());
		Assert.assertEquals(false, Boolean.class.isPrimitive());
		Assert.assertEquals(true, Object.class.isAssignableFrom(String.class));
		Assert.assertEquals(true, Object.class.isAssignableFrom(Boolean.class));
		Assert.assertEquals(false, Object.class.isAssignableFrom(boolean.class));
	}

例子2

WeakReference:表示弱引用,当执行gc时。会回收对象。

SoftReference:表示强引用,执行gc时并不会回收,只有当内存吃紧时,才会回收,适全Cache操作

/**
	 * WeakReference 是弱引用,当执行gc时。会垃圾回收,适合debug,内存监控
	 */
    public void testWeakReference() {
    	A a = new A();
    	a.str = "Hello weakrefrence";
    	WeakReference<A> weak = new WeakReference<A>(a);
    	a = null;
    	int i = 0;
    	while (weak.get() != null) {
    		System.out.println(String.format("Get str from object of weakReference : %s, count: %d", weak.get().str, ++i));
    		if (i % 10 == 0) {
    			System.gc();
    			System.out.println("System.gc() was invoked!");
    		}
    		try {
    			 Thread.sleep(500); 
			} catch (Exception e) {
				// TODO: handle exception
			}
    	}
    	System.out.println("object a was cleared by JVM");
    }
	
	/**
	 * SoftReference是强引用,gc并不会回收,只有当内存吃紧时才会被回收,适合Cache
	 * 以下程序会一直跑。除非内存不够用
	 */
	@Test
    public void testSoftReference() {
    	A a = new A();
    	a.str = "Hello softReference";
    	SoftReference<A> soft = new SoftReference<A>(a);
    	a = null;
    	int i = 0;
    	while (soft.get() != null) {
    		System.out.println(String.format("Get str from object of softReference : %s, count: %d", soft.get().str, ++i));
    		if (i % 10 == 0) {
    			System.gc();
    			System.out.println("System.gc() was invoked!");
    		}
    		try {
    			 Thread.sleep(500); 
			} catch (Exception e) {
				// TODO: handle exception
			}
    	}
    	System.out.println("object a was cleared by JVM");
    }

例子3

System.identityHashCode():对象内存地址来计算哈希值,返回默认的hashCode,不管子类是否重写的hashCode方法

hashCode:Object的方法。

public class TestIdentityHashCode {

	@Test
	public void testIdentityHashCode() {
		String a = "a";
		TestA b = new TestA();
		TestB c = new TestB();
		
		Assert.assertEquals(false, a.hashCode() == System.identityHashCode(a));
		Assert.assertEquals(true, b.hashCode() == System.identityHashCode(b));
		Assert.assertEquals(false, c.hashCode() == System.identityHashCode(c));
		
	}
}

class TestA {
	
}

class TestB {
	@Override
	public int hashCode() {
		return 11110;
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值