详解基于Java class对象说明、Java 静态变量声明和赋值说明
下面小编就为大家带来一篇基于Java class对象说明、Java 静态变量声明和赋值说明(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
先看下JDK中的说明:
java.lang.Object java.lang.Class<T> Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects. Class has no public constructor. Instead Class objects are constructed automatically by the Java Virtual Machine as classes are loaded and by calls to the defineClass method in the class loader. The following example uses a Class object to print the class name of an object: void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); } It is also possible to get the Class object for a named type (or for void) using a class literal. System.out.println("The name of class Foo is: "+Foo.class.getName()); 在一个运行着的JAVA应用中,类的任何实例都可以用Class对象来指代,Class可以指代所有的类和接口。枚举属于类,注解属于接口,均可以用Class指代。每个数组均属于反射的Class对象,数组中的每个元素和维度也同样拥有Class对象。Java基本类型(boolean, byte, char, short, int, long, float, and double)以及关键字void也都可以用Class指代。 Class类不存在构造函数,当类被加载过程中由JVM通过调用类加载器中的defineClass方法自动构造。 下面的例子是将一个对象通过Class对象打印出类名。 void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); } 通过class关键字指定类型也是可以得到Class对象的 System.out.println("The name of class Foo is: "+Foo.class.getName());
上面内容总结下,就是Java中所有的对象以及基本类型都是可以用Class指代的。接下来看一个Demo。
/** * * 旨在测试Class对象和Instance之间的关系; * 旨在测试静态变量的声明和赋值过程; * @author zzy * */ public class ObjClass { private enum tmpEnum {A, B, C}; public static void main(String[] args){ int[] tmpArray = {1,2,3}; Class classType; try { // 通过类名直接获取Class对象,JVM中没有加载。 classType = InClass.class; System.out.println(".class: " + classType); System.out.println(".class finish."); // Java加载类 classType = Class.forName("InClass"); System.out.println("Class.forName: " + classType); System.out.println("Class.forName: finish."); // 创建实例 InClass newClassType = new InClass(); classType = newClassType.getClass(); System.out.println("new Object.getClass: " + classType); System.out.println("new Object.getClass: finish."); // 数组对象 classType = tmpArray.getClass(); System.out.println("Array.getClass:" + classType.getSimpleName()); System.out.println("Array.getClass: finish."); // 枚举对象 classType = tmpEnum.class; System.out.println("enum.class:" + classType); System.out.println("enum.class: finish."); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class InClass{ // 对静态变量声明之前赋值 { staticPara = 10; } public static int staticPara; // 构造函数 public InClass(){ System.out.println("construction..."); } // 静态代码块 static { System.out.println("static function..."); } // 静态变量赋值 { staticPara = 20; } { System.out.println("normal function, staticPara:" + staticPara); } // 静态变量赋值 { staticPara = 30; } }
输出结果:
.class: class InClass .class finish. static function... Class.forName: class InClass Class.forName: finish. normal function, staticPara:20 construction... new Object.getClass: class InClass new Object.getClass: finish. Array.getClass:int[] Array.getClass: finish. enum.class:class ObjClass$tmpEnum enum.class: finish.
说明:
1. .class方式获取类文件的Class对象,并不需要加载JVM中。
2. Class.forName的方式JVM会加载类,同时会编译。 如此,类中的静态代码块就会被执行。
3. 创建实例过程中(已经加载至JVM中,也就是说编译过了),调用构造函数,并执行非静态代码块。
4. 静态代码对于变量的声明和赋值顺序是没有影响的(编译过程处理),所以结果是20。
5. 数据对象和枚举对象也是可以被Class对象指定的。
以上是详解基于Java class对象说明、Java 静态变量声明和赋值说明的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

Java是热门编程语言,适合初学者和经验丰富的开发者学习。本教程从基础概念出发,逐步深入讲解高级主题。安装Java开发工具包后,可通过创建简单的“Hello,World!”程序实践编程。理解代码后,使用命令提示符编译并运行程序,控制台上将输出“Hello,World!”。学习Java开启了编程之旅,随着掌握程度加深,可创建更复杂的应用程序。
