java的object对象

一、object对象

Object对象是除了基础对象之外,所有的对象都需要继承的父对象,包括数组也继承了Object。

二、object对象的方法

clone();调用该函数需要实现 Cloneable,否则会抛出  CloneNotSupportedException的异常。

equals();用来判断两个对象是否相等的函数,默认的是两个对象的地址比较,在使用Compare计算的时候,往往需要重写这个函数。

finalize();这个函数在对象被消解的时候,例如垃圾回收的时候等,会被调用,如果对象使用了不可被自动回收的内存空间等资源,应该在这个函数里面收回。

notify():唤醒被这个对象的monitor标记等待的线程,如果线程的数量大于1,那么被唤醒的线程是由VM自行决定的。注意被唤醒的线程不一定立即执行,至少要等待当前调用notify的线程释放这个对象的monitor,或者等待其他正好同步锁定该对象的线程释放了该对象。 当然了,也不是任何地方都可以调用notify的,调用的地方必须持有对象的monitor,可以有以下几种情况:1.在一个同步( synchronized)方法中;2.在一段该对象的同步代码块中;3.如果这个变量是类变量(static),同步的静态方法也持有。

notifyAll(): 与上面所属的notify类似,只不过是唤醒了所有的线程,当然这些线程也不是立即执行,理由同上。

wait(): 通知当前线程挂起,当对象的notify或者notifyAll被调用的时候才会被重新唤醒,wait了的thread是可以被中断(interrupt)的。当线程wait的时候,这个线程其实丢失了对象的monitor,当被notify的时候,会在程序执行前重新请求到对象的monitor。

还有两个wait函数是带参数的,参数指明了线程的wait时长,如果在这个时长内,线程没有被唤醒,那么当时间到达的时候,这个线程也会被重新唤醒。其他的与上面的wait一致,对了时间为0,说明没有超时时间,时间不可以小于零,否则抛出 IllegalArgumentException

hashCode();返回的是这个对象的hash值,内部的实现代码如下:

int lockWord = shadow$_monitor_;
final int lockWordMask = 0xC0000000;  // Top 2 bits.
final int lockWordStateHash = 0x80000000;  // Top 2 bits are value 2 (kStateHash).
if ((lockWord & lockWordMask) == lockWordStateHash) {
   return lockWord & ~lockWordMask;
}
return System.identityHashCode(this);

//& lockWordMask是获取最高两位,
//lockWordStateHash是指最高两位是2(10),最高位是符号位,但是不明白为什么要获取两位。
//return lockWord & ~lockWordMask; ~是非运算符,所以这句话是返回了除了最高两位的所有其它位的值。
//如果不满足上述条件,返回的是
//System.identityHashCode(this);,这个是native的方法,没有深入

toString():这个对象的字符串描述,默认的是返回类名和实例的hashCode,代码如下:

public String toString() {
  return getClass().getName() + '@' + Integer.toHexString(hashCode());
}

三、获取object的值

	public static String getValue(Object object) {
		if (null != object && !"".equals(object)) {
			if (object instanceof Integer || object instanceof Double || object instanceof Float) {
				return object.toString();
			} else if (object instanceof Date) {
				return "TO_DATE('" + DateUtils.getStringFromDate((Date) object, "yyyy-MM-dd HH:mm:ss") + "', 'yyyy-MM-dd hh24:mi:ss')";
			} else {
				return "'" + object.toString() + "'";
			}
		} else {
			return "null";
		}
	}

	public static String getValueByType(Object object, String ruleCellType) {
		String upperRuleType = ruleCellType.toUpperCase();
		if (null != object && !"".equals(object)) {
			if(upperRuleType.equals("INTEGER")||upperRuleType.equals("NUMBER")){
				return object.toString();
			}else if(upperRuleType.equals("DATE")){
					
				return "TO_DATE('" + DateUtils.formatTime((Date) object) + "', 'yyyy-MM-dd hh24:mi:ss')";
			}else{
				if (object instanceof Date){
					return "TO_DATE('" + DateUtils.formatTime((Date) object) + "', 'yyyy-MM-dd hh24:mi:ss')";
				}
				return "'" + object.toString() + "'";
			}
		} 
		
		return "null";
	}

	public static String getStringValueByType(Object object, String ruleCellType) {
		String upperRuleType = ruleCellType.toUpperCase();
		if (null != object && !"".equals(object)) {
			if(upperRuleType.equals("INTEGER")||upperRuleType.equals("NUMBER")){
				return object.toString();
			}else if(upperRuleType.equals("DATE")){
				return "'" + object.toString() + "'";
				//return "TO_DATE('" + DateUtils.formatTime((Date) object) + "', 'yyyy-MM-dd hh24:mi:ss')";
			}else{
				if (object instanceof Date){
					return "'" + object.toString() + "'";
					//return "TO_DATE('" + DateUtils.formatTime((Date) object) + "', 'yyyy-MM-dd hh24:mi:ss')";
				}
				return "'" + object.toString() + "'";
			}
		} 
		
		return "null";
	}

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/82929779