前言:Java的类库日益庞大,所包含的类和接口也不计其数。但其中有一些非常重要的类和接口,是Java类库中的核心部分。常见的有String、Object、Class、Collection、ClassLoader...,熟悉这些类是学好Java的基础。而这些类一般不容易理解,需要做深入的研究和实践才能掌握。下面是我对这些类理解和使用的一些总结。欢迎你在阅读后将你宝贵的意见和读后感留下!
Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
一、如何得到Class的对象呢?有三种方法可以的获取:
1、调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。例如:
MyObject x;
Class c1 = x.getClass();
2、使用Class类的中静态forName()方法获得与字符串对应的Class对象。例如:
Class c2=Class.forName("MyObject"),Employee必须是接口或者类的名字。
3、获取Class类型对象的第三个方法非常简单。如果T是一个Java类型,那么T.class就代表了匹配的类对象。例如
Class cl1 = Manager.class;
Class cl2 = int.class;
Class cl3 = Double[].class;
注意:Class对象实际上描述的只是类型,而这类型未必是类或者接口。例如上面的int.class是一个Class类型的对象。由于历史原因,数组类型的getName方法会返回奇怪的名字。
二、Class类的常用方法 1、getName()
一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
2、newInstance()
Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:
x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。
3、getClassLoader()
返回该类的类加载器。
4、getComponentType()
返回表示数组组件类型的 Class。
5、getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
6、isArray()
判定此 Class 对象是否表示一个数组类。
三、Class的一些使用技巧 1、forName和newInstance结合起来使用,可以根据存储在字符串中的类名创建对象。例如
Object obj = Class.forName(s).newInstance();
2、虚拟机为每种类型管理一个独一无二的Class对象。因此可以使用==操作符来比较类对象。例如:
if(e.getClass() == Employee.class)...
--------------------------------------------------------------------------------------------------
一般Class类都和reflect包里的api一起用已达到以类管理类,动态加载类并且运行调用,使整个java程序更加的灵活
分享到:
相关推荐
Java反射机制的核心在于`java.lang.Class`类,它代表着程序中的每一个类,提供了访问类信息的各种方法。通过反射,开发者可以在运行时动态地获取类的结构信息,包括类的名称、属性、方法、构造器以及实现的接口,...
在Java中,反射主要通过`java.lang.Class`类和`java.lang.reflect`包中的几个关键类(如`Constructor`、`Method`和`Field`)来实现。当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括...
- **java.lang.Class**:代表类信息的核心类。 - **java.lang.reflect.Method**:表示类的方法。 - **java.lang.reflect.Field**:表示类的字段。 - **java.lang.reflect.Constructor**:表示类的构造器。 - **...
本讲主要介绍Struts2的基础知识以及如何进行入门配置。 首先,Struts2是Struts1的升级版,它继承了Struts1的优点并解决了其在灵活性和可扩展性上的不足。Struts2的核心是Action类,它处理用户请求并调用业务逻辑。...
下面对javalang的使用做一个非常简短的介绍。入门>>> import javalang>>> tree = javalang.parse.parse("package javalang.brewtab.com; class Test {}")这将返回一个CompilationUnit实例。此对象是树的根,可以遍历...
### Java多线程入门知识点详解 #### 一、引言 多线程是现代软件开发中的重要技术之一,尤其在Java编程语言中占有极其重要的地位。对于任何一位Java程序员而言,掌握多线程的基本概念和技术是非常必要的。本文将...
反射机制的核心在于`java.lang.Class`类,它是所有Java类的元数据类,提供了获取和操作类信息的方法。 1. **Class类的作用**: - `getMethod(String name, Class<?>... parameterTypes)`:根据方法名和参数类型...
### Java学习教程-基础入门及提高 #### 一、引言与编程概念 Java作为一种强大的编程语言,为我们提供了一种高效、灵活的方式来表达思想和技术解决方案。与其他编程语言不同的是,Java不仅仅是一系列特性的简单集合...
### Java语言基础入门教程——注解 #### 一、引言与目标 本文档旨在介绍Java语言中的注解(Annotation)及其使用方法。通过本章节的学习,读者将能够理解注解的基本概念,学会如何定义注解,并掌握如何在实际开发...
J2ME入门-(6)CLDCAPI章节主要探讨的是CLDC API,这是Java Micro Edition (J2ME) 平台上针对小型设备和嵌入式系统的轻量级Java应用开发的关键组件。CLDC(Connected Limited Device Configuration)API是J2SE的一个...
异常类继承自`java.lang.Throwable`,常见的如`IOException`, `NullPointerException`等。 13. **集合框架**:Java集合框架包括List(如ArrayList, LinkedList)、Set(如HashSet, TreeSet)、Map(如HashMap, ...
标准的Java库如java.lang、java.util等提供了丰富的预定义类和接口。 #### 11. 继承(Inheritance) 继承是OOP的重要特性之一,允许创建一个新类(子类)从现有类(父类)继承属性和方法,从而实现代码的重用和扩展...
通过 `getModifiers()` 方法获取一个整型值,然后使用 `java.lang.reflect.Modifier` 类的静态方法进行解析,例如: ```java int m = c.getModifiers(); if (Modifier.isPublic(m)) System.out.println("public...
Java基础语法是编程入门的关键,尤其对于初学者来说,掌握好这些基础知识至关重要。Java作为一种广泛使用的面向对象的编程语言,其语法严谨且强大。这里我们将深入探讨Java的基础语法,包括变量、数据类型、运算符、...
- `<i4>` 或 `<int>`:对应 `java.lang.Integer` 类型。 - `<boolean>`:对应 `java.lang.Boolean` 类型。 - `<string>`:对应 `java.lang.String` 类型。 - `<double>`:对应 `java.lang.Double` 类型。 - `...
- **java.lang**:包含Java语言的一些核心类,如`String`、`Math`、`Integer`、`System`和`Thread`等。此包非常常用,通常不需要显式导入。 - **java.util**:包含各种实用工具类,如日期时间、日历、集合等。 - **...
### Java语言基础入门教程知识点详解 #### 10. 枚举与泛型 ##### 10.1 枚举(Enum) **10.1.1 枚举定义** 枚举是一种特殊的类,用于定义那些取值范围固定且不会发生变化的数据类型。例如,性别、星期、月份等。 ...
这个方法属于`java.lang.System`类,用于在标准输出设备(通常是显示器)上打印一行文本。下面是一个典型的Java入门程序示例: ```java public class HelloWorld { public static void main(String[] args) { ...
### Java 入门与深化学习常见问题解答 #### 1. 什么是 Java? Java 是一种通用的、面向对象的编程语言,由 Sun Microsystems 公司于 1995 年发布。它最初被称为 Oak,后来改名为 Java。Java 设计之初是为了适应...