小菜总结到
大家都知道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视频 的详细描述介绍
6. **getClass()**: 返回对象的运行时类,即对象实际属于的类的`Class`对象,可以用来获取类的信息,如类名、构造器、方法等。 7. **notify()**: 唤醒一个等待在此对象监视器上的线程。线程通过调用`wait()`方法...
Object 类常用方法有 getClass()、hashCode()、toString()、equals()、finalize() 等。 getClass() 方法 getClass() 方法用于获取对象的实际类型。该方法返回了 Object 的 Class 对象,表示该对象的实际类型。应用...
但是,攻击者可以通过提交特殊的参数,例如"class",来访问Object的getClass方法,从而获取ClassLoader对象,并执行恶意代码。 三、漏洞利用 攻击者可以通过提交恶意参数,例如"class=xxx",来访问Object的...
Java 反射机制中getClass()和.class的使用方法示例 本文主要介绍了 Java 反射机制中getClass()和.class的使用方法,并结合实例形式分析了 Java 类反射机制的相关操作技巧。 一、获取类的反射 在 Java 中,可以...
#### 一、Object类常用方法 在Java中,`Object`类是最基础的类,所有其他类都直接或间接继承自它。因此了解并掌握`Object`类的方法对于深入理解Java编程至关重要。 1. **toString() 方法**: - **用途**:提供了...
- `toString()`方法是`Object`类中的一个关键方法,它的作用是返回对象的字符串表示。默认情况下,`toString()`方法返回的是类名加`@`后跟对象在内存中的哈希码的16进制表示。例如,`Person@3f99bd52`。 - 在实际...
主要包含Object类中的getClass()、hashCode()、equals()、toString()方法的使用和作用,还包含一个3D旋转模型,还包含几个常见的面试题的解析,可用作学生每周技术分享或者上台演讲,适用于大学计算机专业相关人士。
**1.2 Object类的方法** - **`public int hashCode()`**: - 该方法返回对象的哈希码值,通常用来支持数据结构如哈希表的操作。 - 哈希码值是由哈希算法计算得出的一个整数值,与对象的实际内存地址相关联但不等同...
这意味着每一个类都直接或间接地继承自`Object`类,并且所有的对象(包括数组)都实现了该类提供的方法。`Object`类位于`java.lang`包中,是Java语言中最基础的类之一。 #### 二、主要方法详解 ##### 1. `getClass...
这意味着所有Java类都自动继承了`Object`类中的方法和属性。 #### 关键方法 - `public String toString()`: 返回该对象的字符串表示。默认情况下,此方法返回的是对象的类名和哈希码的十六进制表示。然而,在实际...
2. **提供通用方法**:`Object` 类定义了一些非常重要的方法,如 `equals()`、`hashCode()` 和 `toString()`,这些方法在几乎所有 Java 类中都有应用。 3. **支持多态性**:通过继承 `Object` 类,Java 支持多态性,...
Java 中的 getClass() 方法是 Object 类的一个方法,其原型为 `public final Class<?> getClass()`, 返回值为当前运行时类的 Class 对象。这个方法可以用来获取当前类的 Class 对象,从而可以进行反射操作。 在 ...
代码中包含的方法有如下 : 1. 创建一个Person实体类 2. 反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() ... 5.3 获取所有方法(包含Object的方法)
`Object`类提供了基本的方法,这些方法是所有Java对象共有的。下面我们将详细探讨这些方法及其作用。 1. **构造器**: `Object`类有一个默认的无参构造器,它不做任何特别的操作。当你创建一个类的对象时,这个...
从上面的代码可以看出,instanceof 操作符判断对象是否是某个类或其子类的实例,而 getClass() 方法判断对象的实际类别。 四、重写 equals 方法 在 Java 中,equals 方法用于判断两个对象是否相等。默认情况下,...
它们的主要区别在于,getClass方法是在运行时才确定的,而class方法是在编译时就确定了。 例如,在下面的代码中: ``` class A{ public void func(){ }} public class Test { public static void main(String[] ...
2. **使用反射填充JavaBean**: 通过遍历Map的键值对,利用反射获取JavaBean的set方法,并设置相应的属性值。 ```java public static Object mapToObject(Map, Object> map, Class<?> beanClass) throws Exception {...
- `getClass()`:返回对象的Class对象,该对象包含有关对象的类的信息,如类名、方法等。 - `hashCode()`:返回对象的哈希码,用于哈希表(如HashMap)的快速查找。两个相等的对象应该返回相同的哈希码。 3. **...
4. **getClass()**: 这是一个final方法,返回运行时对象的实际类型,即返回一个Class对象,代表了运行时对象所属的类。通常用于获取对象的类信息。 5. **equals()**: 默认情况下,equals方法检查两个对象的引用是否...