先看下JDK中的说明:

java.lang.Object

java.lang.ClassInstances of theclass 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 voidare also represented as Class objects.

Class has nopublic 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 classloader.

The following example uses a Class object to print theclassname of an object:voidprintClassName(Object obj) {

System.out.println("The class of " + obj +

" is " +obj.getClass().getName());

}

It is also possible to get the Class objectfor a named type (or for void) using a classliteral.

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对象打印出类名。voidprintClassName(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之间的关系;

* 旨在测试静态变量的声明和赋值过程;

*@authorzzy

**/

public classObjClass {private enumtmpEnum {A, B, C};public static voidmain(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 = newInClass();

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();

}

}

}classInClass{//对静态变量声明之前赋值

{

staticPara= 10;

}public static intstaticPara;//构造函数

publicInClass(){

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静态类如何赋值_Java class对象说明 Java 静态变量声明和赋值说明相关推荐

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

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  2. java 静态变量声明_java静态变量怎么声明?

    展开全部 个人的总结 1 静态变量e69da5e6ba9062616964757a686964616f31333337616564只有一份被类的所有实例共享 2 静态变量的声明在编译时已经明确了内存的 ...

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

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

  4. Go程序:变量声明、赋值与输出

    1.Go源代码 /* * 功能:演示变量声明.赋值.输出  */ // assignment.go package main import (     "fmt"     &quo ...

  5. c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...

    今天给大家带来的是初级Java基础部分的知识:包括初始Java.变量.常量.数据类型.运算符.各种选择结构.循环结构.数组等Java的基础语法部分!最后还有****循环结构的进阶****,步骤超详细, ...

  6. java 字符串赋值_Java 学习笔记(二)变量

    标识符  标识符就是名字.类名,变量名,方法名,参数名等  标识符的命名规则  以字母.下划线或美元符号$开头,不能以数字开头 其后可以是字母.数组或美元符号$ 区分大小写 避免使用关键字  ...

  7. java定义枚举并赋值_java中枚举的特性是什么?如何赋值?

    上次已经为大家介绍过java枚举的概念是什么的主要内容了.今天再来为大家介绍一些相关的知识,也是关于java枚举的一些内容,也就是它的特性以及如何赋值,一起来了解一下吧. 首先说一下,java中枚举的 ...

  8. java面向对象基础代码_JAVA基础知识点之Java面向对象

    特点:1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在人们思考习惯的一种思想. 过程和对象在我们的程序中是如何体现的呢? 过程其实就是函数: ...

  9. java 子类 同名参数_Java -- 父类和子类拥有同名变量

    Java -- 父类和子类拥有同名变量 Java -- 父类和子类拥有同名变量 Java – 父类和子类拥有同名变量 请仔细观察系列两段程序的不同之处:一个Son类重写print方法,另一个则没有重写 ...

最新文章

  1. 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具
  2. 8500WN流畅高速上网高端卡 12核心不锁倍频
  3. 浅谈python+requests接口自动化框架
  4. 【二叉树详解】二叉树的创建、遍历、查找以及删除等-数据结构05
  5. LeetCode 1150. 检查一个数是否在数组中占绝大多数(二分查找)
  6. Python系列之入门篇——python2.7.13安装
  7. 一般试卷的纸张大小是多少_一般试卷的纸张大小
  8. vim Ctrl+S锁定屏幕
  9. Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建
  10. 服务器挂在公网,如何禁止公司以外的人访问公司网站
  11. 简洁的 HTML5 音乐播放器
  12. 《SAP从入门到精通》——1.3 SAP R/3系统工作原理
  13. 上海道宁联合德国think-cell,为您提供更便捷高效的PowerPoint插件
  14. javaweb汽车租赁系统
  15. 红米5 Plus刷开发版/小米手机刷开发版
  16. wow插件补充说明篇
  17. 如何将YouTube和其他网络视频投射到Kodi(例如Chromecast)
  18. ITIL 服务台:ITSM帮助员工创建实践
  19. 如何选购计算机的硬盘,教你如何选配电脑—硬盘篇
  20. 正确选择餐具,健康美好生活

热门文章

  1. ssh不能进入save方法_快速理清为什么你的redis未授权不能getshell
  2. 【debug】写应用程序时遇到的桌面图标、运行图标、背景图片问题
  3. android百度输入法表情符号,分析Android 搜狗输入法在微信和QQ中发送图片和表情...
  4. 天玥运维安全网关_智慧灯杆网关
  5. linux iis 环境配置教程,Linux系统Java环境配置教程
  6. oracle 11g r2 安装过程与卸载详细图解
  7. sublime安装与使用
  8. mysql mariadb的VC客户端遇到的问题
  9. C提高_day03_作业第三题
  10. oracle 10g 学习之函数和存储过程(12)