大家都知道Java是一门面向对象编程语言,在Java世界里,万事万物皆对象,那个Java中怎么表示对象呢?Class

  我们知道Java中的对象都是Object类的子类,那么今天我们就一起来研究一下Java中的Class的使用。

  问一下小问题:类是对象吗?类是谁的对象?答案是:类是对象,是java.lang.Class类的实力对象。

package com.edu.hpu;

public class Test {

    public static void main(String[] args) {
//通过new实例化一个对象
Foo foo = new Foo();
//通过实例化对象的getClass()方法得到Class类的实例
Class c1 = foo.getClass();
//任何一个类都有一个隐含的静态变量class
Class c2 = Foo.class;
//c1、c2表示了Foo类的类类型(class type)
System.out.println(c1 == c2); Class c3 = null;
try {
//第三种获得类的类类型的方法
c3 = Class.forName("com.edu.hpu.Foo");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(c1 == c3); try {
//通过类的类类型来创建类的实例对象
Foo c4 = (Foo) c1.newInstance();
c4.start();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} } class Foo{
public void start(){
System.out.println("Foo类");
}
}

  通过上面的代码大家是不是对于Class有了一个更深入的认识,我们可以通过new关键字来创建类的实例对象,同样可以通过类的类类型来创建类的实例对象,获取类的类类型的方式以上有三种形式,他们得到的类类型只有一个,所以c1==c2==c3:true。

  经过上面的简单介绍大家是不是对于Java中的class有了一个更深入的认识,下面我们通过一个小例子为大家介绍一下类类型与类的实例在实际中的使用。

class Offices{
public static void main(String [] args){
if("Word".equals(args[])){
Word w = new Word();
w.start();
}
if("Excel".equals(args[])){
Excel e = new Excel();
e.start();
}
}
}

  大家看一下上面的代码,当我们编译时,是否可以正常通过?这里我们需要说一下编译与运行:编译时刻加载的类是静态加载类;运行时刻加载的类是动态加载类。Class.forName("l类的全称");不仅代表了类类型,而且代表了动态加载类。上面的例子中,Word、Excel我们并不一定用的到,但是当我们编译时,如果Word、与Excel不存在,那么便会出错。所以接下来我们通过类类型动态加载类的方式来实现上面的逻辑。

class Office{
public static void main(String [] args){
try{
Class c = Class.forName(args[]);
OfficeAble oa = (OfficeAble)c.newInstance();
oa.Write();
}catch(Exception e){e.printStackTrace();}
}
}
interface OfficeAble{
public void Write();
}
class Word implements OfficeAble{
public void Write(){
System.out.println("Word...start...");
}
}
class Excel implements OfficeAble{
public void Write(){
System.out.println("Excel..Write..");
}
}

  这样我们就可以根据需要动态的增加类,方便我们应用的功能拓展。

Java基础之类Class使用的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  3. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  4. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  5. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  6. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  7. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  9. Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

    线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...

  10. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. 【BZOJ1911】[Apio2010]特别行动队 斜率优化DP

    想了好久啊....——黑字为第一次更新.——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐. 用了我感觉 ...

  2. WPF-系统托盘

    WPFSystemTray.cs public class WPFSystemTray { /// <summary> /// 设置系统托盘 /// </summary> // ...

  3. 使用js_md5加密密码

    为什么在传输过程中要用md5对密码进行加密? 众所周知,我们在表单中的输入框输入了密码后,如果采用ajax的post或者get方式提交数据,在浏览器的newwork中就可以看到我们向后台传输的内容,其 ...

  4. java爬虫:在请求body中增加json数据采集

    1,http://www.hqepay.com/public/expressquery.html 查询快递不是将键值对post过去,而是将json数据放到body中发送过去.抓包如下: 2,需要导入一 ...

  5. 安卓手机USB网络共享,电脑卡顿、反应慢

    1.首先需要把手机连接到电脑,在手机上打开USB网络共享. 2.打开设备管理器 3.在网络适配器中,找到Remote NDIS based Internet Sharing Device,右键更新驱动 ...

  6. redis 的理解

    1.Redis使用 C语言开发的.Redis 约定此版本号,为偶数的版本是稳定版(如:2.4版 2.6版),奇数版是非稳定版(如:2.5版 2.7版) 2.Redis 数据库中的所有的数据都存储在内存 ...

  7. Python之路【第二篇】python基础 之基本数据类型

    运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: name = "yehaoran " # in 判断ye是否在name里面 在的话返回ok ...

  8. js,css控制网页内容不让选中和复制

    ---恢复内容开始--- JS, CSS控制网页内容不让选择和复制 CSS 控制: <style> body{ -moz-user-select:none;//针对火狐浏览器,谷歌则-we ...

  9. webstorm快捷键

    webstorm应该是目前最强的js编辑器了,结合sublime text可以很效率的开发项目.今天整理了一些webstorm比较实用的快捷键: Ctrl+/ 或 Ctrl+Shift+/ 注释(// ...

  10. Handlebars.js的学习

    写在开头的话: 在使用Ghost搭建自己的博客的时候,发现不会Handlebars.js寸步难行,所以本人决定学习下Handlebars.js,因此在此做个记录 为什么选择Handlebars.js ...