`
isiqi
  • 浏览: 16062949 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

认识class Class及其应用

JVM 
阅读更多

一.Class类

1.class Class对象描述了运行中的classes和interfaces。通过Class对象可以取得运行中的classes和interfaces的相关信息。
2.每个class都有一个相应的Class对象。每个class的Class对象存储于编译后的class所在的文件中。所以,当JVM装载一个.class文件时就会装载一个Class对象。所以,一个class只有一个Class对象。

二.Class类的基本应用

1.如何获取一个class的Class对象

1.1通过Class.forName(classname)方法,该方法接收一个String参数,用以指定要生成哪个class的Class对象.,如Class.forName(“Dog”)。
1.2通过类字面常量(class literals)来获得。
1)字面常量的形式为:classname.class。如Dog.class。
2)对于基本类开,每种基本类型的外覆类都有一个名为TYPE的标准数据,能够产生一个指向相应的基本类型的Class对象的reference。如int.class等同于Integer.TYPE。
1.3通过Object.getClass()方法来获得,如
Dogdog=newDog();
dog.getClass();

1.4一个产生Class对象的例子
classCat{
Cat(){System.out.println("InitCat()");}
static{
System.out.println("LoadingCat");
}
}
classDog{
Dog(){System.out.println("InitDog()");}
static{
System.out.println("LoadingDog");
}
}
classDuck{
Duck(){System.out.println("InitDuck()");}
static{
System.out.println("LoadingDuck");
}
}
publicclassTest{
publicstaticvoidmain(String[]args){
System.out.println("inmain()");
newCat();
System.out.println("AftercreateCat()");
try{
Classc1=Class.forName("Dog"); //(1)
Classc2=Dog.class; //(2)
}
catch(ClassNotFoundExceptioncnfe){
cnfe.printStackTrace();
}
System.out.println("AfterClass.forName(\"Dog\")");
Duckd=newDuck();
System.out.println("AftercreateDuck()");
Classc3=d.getClass();
System.out.println("AfterClass.forName(\"Duck\")");
}
}

运行结果为:
inmain()
LoadingCat
InitCat()
AftercreateCat()
LoadingDog
AfterClass.forName("Dog")
LoadingDuck
InitDuck()
AftercreateDuck()
AfterClass.forName("Duck")
代码(1)(2)产生了class Dog的Class对象,但并没有产生class Dog对象。
**:产生一个class的Class对象不会导致产生一个class对象

2.用Classc对象进行类型比较

2.1.直接比较
两个Class对象不论是通过equals()函数还是直接用==运算符进行比较,比较的都是类型是否相同。
2.2.通过Class.isInstance(object)函数进行比较,如
classCat{}
classDog{}
classDuck{}
publicclassTest{
publicstaticvoidmain(String[]args){
Classc2,c3;
Duckd=newDuck();
c2=Dog.class;
c3=d.getClass();
System.out.println("c2.isIntance(d):"+(c2.isInstance(d)));
System.out.println("c3.isIntance(d):"+(c3.isInstance(d)));
}
}

运行结果为:
c2.isIntance(d):false
c3.isIntance(d):true
2.3.通过instanceof关键字进行比较。但是两个处于不同的继承体系中的类对象和Class对象进行比较,会产生编译错误。
classCat{}
classDog{}
classDuck{}
publicclassTest{
publicstaticvoidmain(String[]args){
Classc3;
//Objectd=newDuck(); (1)
Duckd=newDuck(); //(2)
c3=d.getClass();
System.out.println("dinstanceofDog:"+(dinstanceofDog));//(3)
}
}

由于Duck和Dog处于两个不同的继承体系中,所以代码(3)会发生编译错误。如果把代码(2)注释掉,并去掉代码(1)的注释,编译将通过。这是因为所有class都是继承自Object的,所以Object与Dog处于同一个继承体系中,可以进行比较。
2.4.综合实例
classBase{}
classDerived{}
publicclassTest{
publicstaticvoidtest(Objectx){
System.out.println("Testingxoftype"+
x.getClass());
System.out.println("xinstanceofBase"+
(xinstanceofBase));
System.out.println("xinstanceofDerived"+
(xinstanceofDerived));
System.out.println("Base.isInstance(x)"+
Base.class.isInstance(x));
System.out.println("Derived.isInstance(x)"+
Derived.class.isInstance(x));
System.out.println("x.getClass()==Base.class"+
(x.getClass()==Base.class));
System.out.println("x.getClass()==Derived.class"+
(x.getClass()==Derived.class));
System.out.println("x.getClass().equals(Base.class)"+
(x.getClass().equals(Base.class)));
System.out.println("x.getClass().equals(Derived.class)"+
(x.getClass().equals(Derived.class)));
}
publicstaticvoidmain(String[]args){
test(newBase());
test(newDerived());
}
}

运行结果为:
TestingxoftypeclassBase
xinstanceofBasetrue
xinstanceofDerivedfalse
Base.isInstance(x)true
Derived.isInstance(x)false
x.getClass()==Base.classtrue
x.getClass()==Derived.classfalse
x.getClass().equals(Base.class)true
x.getClass().equals(Derived.class)false
TestingxoftypeclassDerived
xinstanceofBasefalse
xinstanceofDerivedtrue
Base.isInstance(x)false
Derived.isInstance(x)true
x.getClass()==Base.classfalse
x.getClass()==Derived.classtrue
x.getClass().equals(Base.class)false
x.getClass().equals(Derived.class)true
分享到:
评论

相关推荐

    数据库原理及应用课程设计报告.doc

    "成绩 " " 《数据库原理及应用》课程设计报告 商品销售管理系统 学 院: 信息工程学院 班 级: 学 号: 姓 名: 完成时间: 201 课程设计的任务 数据库原理及应用是计算机及其相关学科的一门重要的学科...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    13.2认识Class类 13.2.1什么是Class类 13.2.2如何获取一个类对应的Class对象 13.2.3如何获取类中的成员信息 13.3通过反射机制访问对象 13.3.1如何实例化对象 13.3.2如何给成员变量赋值 13.3.3如何调用成员...

    C#微软培训资料

    C#语言在.NET 框架中的作用及其特性 1.1 Microsoft.NET 一场新的革命 1.1.1 什么是.NET 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出...

    汇编语言程序设计 第二版

    10.8 程序段前缀及其应用 10.8.1 程序段前缀的字段含义 10.8.2 程序段前缀的应用 习题 第十一章 数值运算协处理器 11.1 协处理器的数据格式 11.1.1 有符号整数 11.1.2 BCD码数据 11.1.3 浮点数 11.2 协处理器的结构 ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    于涉足应用程序其他部分的数据。 2.2.3 消息 一个单独的对象一般不十分有用,而作为一员出现在包含有许多其他对象的大程序或应 用程序之中,通过这些对象的相互作用,程序员可实现高层次的操作和更负责...

    asp.net知识库

    卸载Class? Web Form 窗体 如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...

    c#学习笔记.txt

    foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下: foreach (type identifier in expression) statement 若要循环访问集合,集合必须满足特定的...

    Java开发详解.zip

    020508_【第5章:面向对象基础】_引用传递及其应用笔记.pdf 020509_【第5章:面向对象基础】_this关键字笔记.pdf 020510_【第5章:面向对象基础】_static关键字笔记.pdf 020511_【第5章:面向对象基础】_理解main...

    java基础案例与开发详解案例源码全

    1.2 认识Java语言3 1.2.1 Java语言特性3 1.2.2 JavaApplet4 1.2.3 丰富的类库4 1.2.4 Java的竞争对手5 1.2.5 Java在应用领域的优势7 1.3 Java平台的体系结构7 1.3.1 JavaSE标准版8 1.3.2 JavaEE企业版10 1.3.3 Java...

    C++入门到精通

    内容之后 你应该对 C++语言有了一些认识 但是还谈不上真正理解C++ 这就够了 那是 本书余下部分的目的 第 1 章向我们介绍了语言的基本元素 内置数据类型 变量 表达式 语句以及函数 它将介绍一个最小的 合法的 C++...

    Delphi7.完美经典

    第0章 认识Delphi 0-1 前言 0-2 Delphi简介 0-3 进入Delphi7 0-4 退出Delphi 第1章 常用的窗口工具 1-1 窗体(Form) 1-2 代码编辑器(Code Editor) 1-3 代码浏览器(Code Explorer) 1-4 组件面板...

    Ext Js权威指南(.zip.001

    第5章 ext js的事件及其应用 / 170 5.1 概述 / 170 5.2 浏览器事件 / 170 5.2.1 绑定浏览器事件的过程:ext.eventmanager / 170 5.2.2 封装浏览器事件:ext.eventobject / 179 5.2.3 移除浏览器事件 / 181 5.3...

    jquery插件使用方法大全

    如Jtip,要使用它的功能,只需要在你的元素的class上加上Jtip,并引入jtip.js及其样式即可以了。其他事情插件全包。我喜欢jquery的一个重要原因是发现她已经有了很多很好,很精彩的插件。 写得很烂。可能大家看不出...

    Delphi7.完美经典.part1

    <br>目录 : 第0章 认识Delphi <br>0-1 前言 0-2 Delphi简介 0-3 进入Delphi7 0-4 退出Delphi <br>第1章 常用的窗口工具 <br>1-1 窗体(Form) 1-2 代码编辑器(Code Editor) ...

Global site tag (gtag.js) - Google Analytics