`
byandby
  • 浏览: 1689177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Object getClass()方法

阅读更多
小菜总结到
    大家都知道Object类有一个getClass()方法 打开API看看它是这样说的

返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
返回:表示此对象运行时类的 Class 对象。

  疑问来了 返回此Object的运行时类 它这里Object运行时类指那个类? 什么又是运行时类的Class对象 它到底是啥对象?
  来点代码吧 我们这里有两个类 Test类测试用的 还有一个Never类
Never类
package woca;

public class Never {
	  static{
		  System.out.println("Never类被初始化了");
	  }
	  public void shuChu(){
		  System.out.println("Never类shuChu()方法执行");
	  }
}


  Test类
package woca;

public class Test {
	static{
		System.out.println("Test类被初始化了");
	}
	public void testClass() throws Exception, Exception{
		this.getClass();
	}
	
	public void shuChu(){
		System.out.println("本类的Class对象");
	}
	
	public static void main(String[] args) throws Exception {
		Test t = new Test();
		t.testClass();
	}
}

猜猜会输出什么? 。。。。。。。。
输出
Test类被初始化了
到这里只能说明一个问题我们调用一个对象的getClass()方法会初始化这个类也就是执行static代码块  你可能会问这里的this指什么呢?  它指的那个对象呢?
答:是Object对象 其实你可以通过你的MyEclipse的自动代码提示功能看到 当你打点的时候会出来Object的许多方法
我们还是用代码来验证以下吧!下面我来改写main方法
package woca;

public class Test {
	static{
		System.out.println("Test类被初始化了");
	}
	public void testClass() throws Exception, Exception{
	     Object ob = this.getClass().newInstance();
		if (ob instanceof Object) {
			System.out.println("ob是一个Object实例");
			
		}
	}
	
	public void shuChu(){
		System.out.println("本类的Class对象");
	}
	
	public static void main(String[] args) throws Exception {
		Test t = new Test();
		t.testClass();
	}
}

输出结果是:
Test类被初始化了
ob是一个Object实例

所以this指的是Object对象

接下来我们看这个main方法
package woca;

public class Test {
	static{
		System.out.println("Test类被初始化了");
	}
	public void testClass() throws Exception, Exception{
		Test test = this.getClass().newInstance();
		test.shuChu();
	}
	
	public void shuChu(){
		System.out.println("本类的Class对象");
	}
	
	public static void main(String[] args) throws Exception {
		Test t = new Test();
		t.testClass();
		
	}
}

输出结果:
Test类被初始化了
本类的Class对象

这说明我们这句:Test test = this.getClass().newInstance();得到了一个Test对象  我们调用object.getClass()方法 返回一个Class对象
这个Class对象 和Test对象不同 然后我们调用newInstance()创建了一个实例
API 里边说返回运行时类的Class对象 其实就是说 当前运行这个类的Class对象(在你不指定对象的情况下)
java.lang.Class类里边有很多实用的方法 当你得到一个对象的Class对象之后就可以调用这些方法
这个类里边只要一个静态方法那就是forName("指定类名")其实它和getClass 的功能一样都会对一个类初始化都是返回一个对象的Class对象 只不过它的参数里边直接指定类名  注意这个参数 是完全限定类型鸟 得加上包名! 还有它是一个静态方法你可以直接Class.forName()这样用方便些如果你这样写:
this.getClass().forName("woca.Test");

效果和this.getClass();一样只不过上边那种有点二
forName()方法还有一个重载方法
类似这种
Class.forName("woca.Never", false, this.getClass().getClassLoader());

  第一个参数还是指定类名 第二个参数指定要不要初始化 第三个参数是指定类的加载器
我把第二参数改为false 就不会初始化Never这个类 也就不会执行静态代码块了!
2
3
分享到:
评论
2 楼 byandby 2010-08-28  
theskyofsky 写道
引用
猜猜会输出什么? 。。。。。。。。
输出
Java代码
Test类被初始化了 
Test类被初始化了到这里只能说明一个问题我们调用一个对象的getClass()方法会初始化这个类也就是执行static代码块  你可能会问这里的this指什么呢?  它指的那个对象呢?
答:是Object对象 其实你可以通过你的MyEclipse的自动代码提示功能看到 当你打点的时候会出来Object的许多方法


这个有点问题
  Test t = new Test();   这个会初始化Test类的,不是由this.getClass()初始化的。而且this指的是当前对象也就是一个Test,JAVA中所有的类都继承自Object,肯定具有Object的方法的。

嗯 this  是 本类对象的一个引用 ,,有时间 继续 研究 呵呵。。
1 楼 theskyofsky 2010-08-23  
引用
猜猜会输出什么? 。。。。。。。。
输出
Java代码
Test类被初始化了 
Test类被初始化了到这里只能说明一个问题我们调用一个对象的getClass()方法会初始化这个类也就是执行static代码块  你可能会问这里的this指什么呢?  它指的那个对象呢?
答:是Object对象 其实你可以通过你的MyEclipse的自动代码提示功能看到 当你打点的时候会出来Object的许多方法


这个有点问题
  Test t = new Test();   这个会初始化Test类的,不是由this.getClass()初始化的。而且this指的是当前对象也就是一个Test,JAVA中所有的类都继承自Object,肯定具有Object的方法的。

相关推荐

    Object类的getClass的用法---马克-to-win java视频

    Object类 getClass 马克-to-win java视频 的详细描述介绍

    java中关键字Object详解

    Object是Java编程中的基础类,所有类都直接或间接地继承了它,并从它继承了一些方法,如equals()、toString()和getClass()等。 首先,Object类是Java中的根源,它定义了所有Java类的通用行为,如Object类的toString...

    java之Object类方法技术分享PPT

    主要包含Object类中的getClass()、hashCode()、equals()、toString()方法的使用和作用,还包含一个3D旋转模型,还包含几个常见的面试题的解析,可用作学生每周技术分享或者上台演讲,适用于大学计算机专业相关人士。

    Java常用的反射方法

    代码中包含的方法有如下 : 1. 创建一个Person实体类 2. 反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() ... 5.3 获取所有方法(包含Object的方法)

    全量断言方法-Java版

    全量断言方法-Java版 /** * 校验结果的每一个值 * * @param exp * @param map */ private void checkEveryResultInfo(Map, Object> exp, Map, Object> map) { for (Map.Entry, Object> m : exp.entrySet()) {...

    java初学者

    适合java初学者学习, 封装:就是把数据和...Class类:object类中的getclass方法返回class类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。

    javascript实现类似java中getClass()得到对象类名的方法

    本文实例讲述了javascript实现类似java中getClass()得到对象类名的方法。分享给大家供大家参考。具体如下: 在javascript中没有能够返回特定类型名的函数 如一个对象 console.log(obj); 得到的是[object ...

    Java 反射(Reflection) 经典实用例子

    返回值是Object,也既是该方法的返回值。 4. 执行某个类的静态方法 public Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception { Class ownerClass = Class....

    java 实现AOP

     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  Object o = null;  try {  logger.info("method stats..." + method);  o = method.invoke(delegate,args);  ...

    MongoUtils工具类实现

    public void delete(Query query , Object obj , String collectionName){ mongoTemplate.remove(query, obj .getClass(), collectionName); } public boolean update(Query query , Update update , Object ...

    day021-反射和注解笔记和代码.rar

    Constructor类中方法newInstance(Object 实参);//可以创建任意访问权限的有参或者无参构造 3. 私有化方法、字段、构造方法都必须破坏封装才能使用: public void setAccessible(boolean flag) true表示...

    java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】

    创建返回代理类实例方法 Enhancer.create(object.getClass(), this); * (1.创建工具类,2.设置工具类的父类为被代理类 3.设计监听回调为当前this 4.return 创建代理类实例对象) * 3.实现接口方法(调用 method.

    Java 开发所需json的jar包,转json格式

    Java 开发所需json的jar包,项目对象转json格式, Map,Object> map=HashMap,Object>(); map.put("sex","man"); toJson(map);... return obj instanceof Collection || obj.getClass().isArray(); }

    Java的反射中一些重要的方法

     Java中有个Object 类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode、equals、clone、toString、getClass等。其中getClass返回一个Class 对象。Class对象十分特殊。他是...

    关于操作反射的部分代码

    //显示某对象的某方法和某属性 show(a,"show"); } //对未知类型的对象操作 public static void show(Object obj,String method_name)throws Exception{ Class c=obj.getClass(); Field field=c.getField...

    Spring原理模拟代码

    private Map, Object> beans = new HashMap, Object>(); @SuppressWarnings("unchecked") public ClassPathXmlApplicationContext() throws Exception { SAXBuilder sb = new SAXBuilder(); Document doc = ...

    根据数据库表自动产生javabean

    System.out.println(request.getParameter(propertyName).getClass().getName()); Object value = request.getParameter(propertyName); PropertyDescriptor pd = new PropertyDescriptor(property...

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码)

    enhancer.setSuperclass(this.target.getClass()); //回调 enhancer.setCallback(this); //创建代理对象 return enhancer.create(); } } package org.sg.sgg.mode.proxy.jdkProxy.trendProxy2; /** ...

    字节跳动三面1

    1. 平时做的项目属于什么业务 2. Java Object类有哪些方法,分别作用 1.类构造器 2.registerNatives方法 3.getClass方

    spring 个人笔记

    spring 个人笔记 ... Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); //使用反映机制,执行method方法,从而实现注入功能 m.invoke(o, beanObject); }

Global site tag (gtag.js) - Google Analytics