小菜总结到
大家都知道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这个类 也就不会执行静态代码块了!
分享到:
相关推荐
Object类 getClass 马克-to-win java视频 的详细描述介绍
Object是Java编程中的基础类,所有类都直接或间接地继承了它,并从它继承了一些方法,如equals()、toString()和getClass()等。 首先,Object类是Java中的根源,它定义了所有Java类的通用行为,如Object类的toString...
主要包含Object类中的getClass()、hashCode()、equals()、toString()方法的使用和作用,还包含一个3D旋转模型,还包含几个常见的面试题的解析,可用作学生每周技术分享或者上台演讲,适用于大学计算机专业相关人士。
代码中包含的方法有如下 : 1. 创建一个Person实体类 2. 反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() ... 5.3 获取所有方法(包含Object的方法)
全量断言方法-Java版 /** * 校验结果的每一个值 * * @param exp * @param map */ private void checkEveryResultInfo(Map, Object> exp, Map, Object> map) { for (Map.Entry, Object> m : exp.entrySet()) {...
适合java初学者学习, 封装:就是把数据和...Class类:object类中的getclass方法返回class类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。
本文实例讲述了javascript实现类似java中getClass()得到对象类名的方法。分享给大家供大家参考。具体如下: 在javascript中没有能够返回特定类型名的函数 如一个对象 console.log(obj); 得到的是[object ...
返回值是Object,也既是该方法的返回值。 4. 执行某个类的静态方法 public Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception { Class ownerClass = Class....
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); ...
public void delete(Query query , Object obj , String collectionName){ mongoTemplate.remove(query, obj .getClass(), collectionName); } public boolean update(Query query , Update update , Object ...
Constructor类中方法newInstance(Object 实参);//可以创建任意访问权限的有参或者无参构造 3. 私有化方法、字段、构造方法都必须破坏封装才能使用: public void setAccessible(boolean flag) true表示...
创建返回代理类实例方法 Enhancer.create(object.getClass(), this); * (1.创建工具类,2.设置工具类的父类为被代理类 3.设计监听回调为当前this 4.return 创建代理类实例对象) * 3.实现接口方法(调用 method.
Java 开发所需json的jar包,项目对象转json格式, Map,Object> map=HashMap,Object>(); map.put("sex","man"); toJson(map);... return obj instanceof Collection || obj.getClass().isArray(); }
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...
private Map, Object> beans = new HashMap, Object>(); @SuppressWarnings("unchecked") public ClassPathXmlApplicationContext() throws Exception { SAXBuilder sb = new SAXBuilder(); Document doc = ...
System.out.println(request.getParameter(propertyName).getClass().getName()); Object value = request.getParameter(propertyName); PropertyDescriptor pd = new PropertyDescriptor(property...
enhancer.setSuperclass(this.target.getClass()); //回调 enhancer.setCallback(this); //创建代理对象 return enhancer.create(); } } package org.sg.sgg.mode.proxy.jdkProxy.trendProxy2; /** ...
1. 平时做的项目属于什么业务 2. Java Object类有哪些方法,分别作用 1.类构造器 2.registerNatives方法 3.getClass方
spring 个人笔记 ... Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); //使用反映机制,执行method方法,从而实现注入功能 m.invoke(o, beanObject); }