先看下JDK中的说明:

java.lang.Object

java.lang.Class

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 静态变量声明和赋值说明(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...相关推荐

  1. java审批流程框架_基于SSM框架下的JAVA企业流程审批系统

    每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个企业流程审批系统(现代企业对资金流的控制十分严格,但是绝大部分企业的费用审批还停滞在手动填单.逐级递交.逐级审批的现状,既没有效率也不利于 ...

  2. java 检查打印机状态_爱普生打印机常见故障有哪些 爱普生打印机故障解决方法【详解】...

    任何设备在使用一段时间后都会出现一些小问题,打印机也不例外,那么爱普生打印机常见的故障有哪些 ,出现问题该怎么解决呢?下面小编就来分享2018爱普生打印机故障解决方法 ,一起来看看吧! 一.故障现象 ...

  3. dc综合与pt静态时序分析(中文)_新能源汽车小三电系统(PDU/DC/OBC)技术研究详解...

    0 引言 近几年,在国家政策的支持下,新能源汽车产销量保持了较快增长,随着规模效应,国家逐步降低对新能源汽车的补贴,新能源行业也启动新一轮优胜劣汰,对于新能源整车企业,成本压力越来越大.新能源汽车发展 ...

  4. Go 学习笔记(26)— Go 习惯用法(多值赋值,短变量声明和赋值,简写模式、多值返回函数、comma,ok 表达式、传值规则)

    1. 多值赋值 可以一次性声明多个变量,并可以在声明时赋值,而且可以省略类型,但必须遵守一定的规则要求. package main import "fmt"func main() ...

  5. java静态类如何赋值_Java class对象说明 Java 静态变量声明和赋值说明

    先看下JDK中的说明: java.lang.Object java.lang.ClassInstances of theclass Class represent classes and interf ...

  6. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  7. Java IDEA Debug模式下断点回退(一键回退到上一个断点前方)操作方法详解

    @Java IDEA Debug模式下断点回退(一键回退到上一个断点前方)操作方法详解 1.请求进入第一个断点: 2.请求进入第二个断点: 3.回退断点(回到上一个断点之前,图1,图2共两种操作方法) ...

  8. 基于MobileNet的人脸表情识别系统(MATLAB GUI版+原理详解)

    摘要:本篇博客介绍了基于MobileNet的人脸表情识别系统,支持图片识别.视频识别.摄像头识别等多种形式,通过GUI界面实现表情识别可视化展示.首先介绍了表情识别任务的背景与意义,总结近年来利用深度 ...

  9. php node 目录,node.js基于fs模块对系统文件及目录进行读写操作的方法详解

    本文主要介绍了node.js基于fs模块对系统文件及目录进行读写操作的方法,结合实例形式分析了nodejs使用fs模块针对文件与目录的读写.创建.删除等相关操作技巧,需要的朋友可以参考下. 如果要用这 ...

最新文章

  1. Bytom BIP-32协议和BIP-44协议解读
  2. POJ 3207 Ikki's Story IV - Panda's Trick (POJ 六道2-SAT之一)
  3. 项目管理课件_项目管理(PMO)工作到底干些啥?
  4. RAC Concept
  5. Prometheus 系统监控方案
  6. c#读取solidworks文件_C#初学者教程系列20:Stream流读写
  7. angular2之pdf文件操作大全
  8. php状态机,有限状态机FSM的原理与GO的实现
  9. Educational Codeforces Round 45 (Rated for Div. 2) G - GCD Counting
  10. 未来人类笔记本 T5 67SH2 扩展内存条
  11. 大数据学习开篇:了解大数据导论、清楚大数据应用领域和前景
  12. MarkDown编辑器----小书匠
  13. mysql 核对_mysql数据库核对
  14. 试题 基础练习 Fibonacci数列
  15. sketch常用快捷键键盘对应
  16. 如何在Visual Paradigm中创建流程图?
  17. 【拜小白的机器学习】2-机器学习的种类与基本术语概念
  18. sws浏览器_快讯 | SWS入围2019英国SBID国际设计大奖
  19. 潭州学院html学习(day09)
  20. Async/Await FAQ (Stephen Toub)

热门文章

  1. MyBatis 实际使用案例-environments、environment
  2. 服务的通信和服务发现
  3. 页面定时跳转(读秒)
  4. 集成开发环境IDE的概述
  5. CookieValue注解
  6. MyBatis动态SQL-foreach-数组/List
  7. aop实现原理-动态代理CGLib代理
  8. 魔兽服务器状态页面,谁动了我的服务器 WOW大服务器优势何时展现
  9. Linux 查看显存带宽,Vega 20规格与Vega 10相近,显存带宽翻倍,但目前只能跑Linux - 超能网 - IT帮...
  10. java观察者模式在spring中的应用_Spring源码之spring中的观察者模式和监听器的使用...