Java 基础【08】.class getClass () forName() 详解

简介:

  类名.class是Class对象的句柄,每个被加载的类,在jvm中都会有一个Class对象与之相对应。

   如果要创建新的对象,直接使用Class对象的局部class.forName就可以了,不需要用new 类名。

   每个 class 都有一个相应的 Class 对象,编译完成后,生成的.class文件就表示 class 对象,用来表示这个类的类型信息。获得Class实例的三中方式:

  • 利用对象调用getClass()方法获取该对象的Class实例
  • 使用Class的静态方法forName(),用类的名字获取一个Class实例
  • 运用.calss的方式获取Class实例,对基本数据类型的封装类,还可以采用.TYPE来获取对应的基本数据类型的Class实例
复制代码
package my.java.code;

public class ClassInitTest {
    public static void main(String[] args) {
        Point point = new Point();
        Class pointClass = point.getClass();
        System.out.println("1.利用对象调用getClass()方法获取该对象的Class实例:" + pointClass.getName());

        try {
            Class forName = Class.forName("my.java.code.Point");
            System.out.println("2.使用Class的静态方法forName(),用类的名字获取一个Class实例:" + forName.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }

        Class aClass = Point.class;
        System.out.println("3.运用.class 的方式获取Class实例(类):" + aClass.getName());

        Class intClass = int.class;
        System.out.println("4.运用.class 的方式获取Class实例(基本类型):" + intClass.getName());

        Class typeClass = Integer.TYPE;
        System.out.println("5.运用.type 的方式获取Class实例(基本数据类型的封装类):" + typeClass.getName());

        Class integerClass = Integer.class;
        System.out.println("5.运用.class 的方式获取Class实例(基本数据类型的封装类):" + integerClass.getName());

        //当new Point()的时候加载这个类,用forName构造实例的时候也加载该类。
        System.out.println("before new Point()");
        new Point();
        System.out.println("after new Point()");
        try {
            Class.forName("my.java.code.Line");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
复制代码

 

   在运行期间,如果我们要产生某个类的对象,java虚拟机会检测该类型的Class对象是否已被加载。

   如果没有加载,java虚拟机会根据类的名称找到.class文件并加载它。

   一旦某个类型的Class对象已经被加载到内存,就可以用它来产生该类型的所有对象。

   newInstance()调用内中缺省的构造方法。

   newInstance()调用类中缺省的构造方法,如果要实例的对象中有了自己定义的构造方法(除重写的和默认构造方法相同的构造方法外)

   创建此 Class 对象所表示的类的一个新实例

复制代码
package my.java.code;

public class Point {
    static {
        System.out.println("loading point......");
    }

    int x, y;
}
复制代码

   当我们在命令提示符下面编译好该类之后,输入java ClassTest Point的时候,此时会输出Loading point和x=0,y=0

 本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/4496432.html,如需转载请自行联系原作者

相关文章
|
18天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
50 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
13天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
34 3
|
16天前
|
Java
让星星⭐月亮告诉你,Java synchronized(*.class) synchronized 方法 synchronized(this)分析
本文通过Java代码示例,介绍了`synchronized`关键字在类和实例方法上的使用。总结了三种情况:1) 类级别的锁,多个实例对象在同一时刻只能有一个获取锁;2) 实例方法级别的锁,多个实例对象可以同时执行;3) 同一实例对象的多个线程,同一时刻只能有一个线程执行同步方法。
12 1
|
17天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
27 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
Java
java基础(4)public class 和class的区别及注意事项
本文讲解了Java中`public class`与`class`的区别和注意事项。一个Java源文件中只能有一个`public class`,并且`public class`的类名必须与文件名相同。此外,可以有多个非`public`类。每个类都可以包含一个`main`方法,作为程序的入口点。文章还强调了编译Java文件生成`.class`文件的过程,以及如何使用`java`命令运行编译后的类。
29 3
java基础(4)public class 和class的区别及注意事项
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
Java
java的class类
java的class类
31 5
|
3月前
|
Java 测试技术 Docker
记录一次很坑的报错:java.lang.Exception: The class is not public.
这篇文章记录了作者在Docker中运行服务进行单元测试时遇到的一系列问题,包括Spring Boot与Spring Cloud版本不一致、Bean注入问题、测试单元引入问题以及公共类和方法的可见性问题,并提供了解决问题的方法和成功测试通过的代码示例。
记录一次很坑的报错:java.lang.Exception: The class is not public.
|
3月前
|
Java
JAVA中public class和class的区别
JAVA中public class和class的区别
45 7
|
3月前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
112 0