java源码学习(一) 万物之源 Object对象

 

1)Object对象clone()方法

package com.stu.resource;

public class Obj implements Cloneable{
	public static void main(String[] args) {
		/**
		 * protected修饰的方法作用范围:1)同类、2)同包、3)不同包的子类调用父类
		 * 对于第三点要理解:
		 * 此处当主调为父类的引用时 ==> object, 是无法调用父类的protected方法的
		 */
//		Object object = new Object();
//		object.clone();
		
		/**
		 * 此处主调是Obj对象 即子类的引用指向父类的protected方法(没毛病)
		 * 
		 * 但是Run As throws Exception
		 * java.lang.CloneNotSupportedException
		 */
//		Obj obj = new Obj();
//		try {
//			Obj clone = (Obj)obj.clone();
//		} catch (CloneNotSupportedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
		/**
		 * 对于上面的Exception产生的原因:
		 * Object的源码
		 * protected native Object clone() throws CloneNotSupportedException;
		 * 
		 * 对于关键字native需要一定的理解:native可以理解为自然的、原生的,java用于调用非java程序的方法,可以理解为一个接口,只是这个接口的实现在非java程序中
		 * 那怎么做?clone()可以理解为一个接口,也就是说它并不是一个接口,那我们看看java怎么做的
		 * java提供了一个接口Cloneable,这个接口没有任何方法,仅作为一个说明,一个类要覆盖clone()方法,需要实现Cloneable接口
		 */
		Obj obj = new Obj();
		try {
			Obj obj1 = (Obj) obj.clone();
			System.out.println(obj.hashCode());
			System.out.println(obj1.hashCode());
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

2)getClass()方法

package com.stu.resource.object.getclass;

public class GetClass {
	public static void main(String[] args) {
		/**
		 * 谈到Object对象的getClass()方法,就得与Object.class作比较
		 * getClass()方法是动态的,class是关键字,“类字面量”
		 * String.class 是能对类名的引用取得在内存中该类型class对象的引用,
		 * 而new String().getClass() 是通过实例对象取得在内存中该实际类型class对象的引用。
		 */
		Animal animal = new Dog();
		System.out.println(Animal.class.getName());
		System.out.println(animal.getClass().getName());
		
		//result
		/**
		 * com.stu.resource.object.getclass.Animal
		 * com.stu.resource.object.getclass.Dog
		 */
	}
	
}

、、、、

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值