类本身也是对象,是java.lang.Class类的实例对象——There is a class named Class.

Class类表示方式

  1. Class类只有Java虚拟机才能初始化,有三种表示方式(Demo是一个类)
  2. 1Class c1=Demo.class;
  3. 2Demo d = new Demo();
  4. Class c2 = d.getClass();
  5. 3Class c3 = Class.forName("PackageName+ClassName");//使用类的全名获取类的类对象,需要try catch

使用类的类对象创建类对象(有点绕,就是用Class对象创建具体的类对象)

Demo d1 = c1.newInstance();

编译和运行

使用eclipse时Run会一并进行编译和运行,感知不是很清晰

用txt写java代码,命令行编译执行比较明确

javac 用于编译.java 文件为 .class文件

java 用于运行.class 文件

静态加载类和动态加载类

静态:使用new创建一个类即为静态加载(编译时刻加载)

动态:使用class.newInstance()创建一个类即为动态加载(运行时刻加载)

  • 以下举例说明动态加载的优势:

    有一个Porject程序,其中需要使用到A类和B类,最初实现如下:

    1. public class StaticAndDynamicClass {
    2. public static void main(String[] args) {
    3. AClass a = new AClass();
    4. a.exe();
    5. BClass b = new BClass();
    6. b.exe();
    7. }
    8. }

这样运行肯定会报错,因为AClass和BClass不存在

如果AClass存在呢?

  1. public class AClass {
  2. public static void Exe(){
  3. System.out.println("AClass execute...");
  4. }
  5. }

此时报两个错,BClass找不到

这就是静态加载类的特点,需要将用到的所有类全部加载之后才能编译

如果利用newInstance动态的加载类,就可以不用关心类是否完全加载,只要在运行时判断即可

  1. public class StaticAndDynamicClass {
  2. public static void main(String[] args) {
  3. // AClass a = new AClass();
  4. // a.Exe();
  5. //
  6. // BClass b = new BClass();
  7. // b.Exe();
  8. //创建一个接口,符合该接口定义的类都可以被动态加载
  9. Class c = null;
  10. try {
  11. c = Class.forName(args[0]);
  12. ISADC a = (ISADC) c.newInstance();
  13. a.Exe();
  14. } catch (ClassNotFoundException e) {
  15. // TODO Auto-generated catch block
  16. e.printStackTrace();
  17. } catch (InstantiationException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. } catch (IllegalAccessException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. }
  24. }
  25. }

ISADC是一个统一定义接口,凡是符合该接口的类名称都可以通过传参动态的加载进来

Java反射【二、Class类的使用】的更多相关文章

  1. JAVA反射之Class类的练习

    package zhang; /** * JAVA反射之CLass类的练习 * * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? * 类的类型是CLass * * */ class Tes ...

  2. 【java】java反射初探 ——“当类也照起镜子”

    反射的作用   开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解) 我理解的java反射机制就是: 提供一套完善而强大的API ...

  3. 【java】java反射初探 ——“当类也学会照镜子”

    反射的作用   开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强 ...

  4. Java反射初探 ——“当类也学会照镜子”

    反射的作用 开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强大的 ...

  5. java反射之获取类的基本信息(一)

    一.反射原理. Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象”等信息.“类的全部 ...

  6. Java反射之Class类

    接下来的几章,我们谈一谈java的反射机制. 反射就是从一个java类中映射出一个java类或是一个实例.通常在很多框架中都用到反射,比如常用的ssm框架,在配置文件中总是会写到类的全名,框架通过读取 ...

  7. Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)

    通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...

  8. java反射 顺序输出类中的方法

    java反射可以获取一个类中的所有方法,但是这些方法的输出顺序,并非代码的编写顺序. 我们可以通过自定义一个注解来实现顺序输出类中的方法. 首先,先写一个类,定义增删改查4个方法 public cla ...

  9. java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~

    项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T& ...

  10. 深入分析Java反射(二)-数组和枚举

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

随机推荐

  1. C#可以直接调用的Win32API

    以前整理的Win32 API,可以直接在C#中直接调用,在做WinForm时还是很有帮助的.以前用在一个多窗口界面中,当轮询窗口时,调用API会提高很多效率. 源码下载 http://files.cn ...

  2. mysql千万级数据表结构修改

    当需要对表进行ddl操作如加索引.增删列时,数据量小时直接在线修改表结构影响不大当表达到百万.千万数据就不能直接在线修改表结构 下面是具体的过程:1.备份数据select * from ih_orde ...

  3. 数学建模python matlab 编程(椭圆声学原理画图证明,解析几何)

    证明,在椭圆形的音乐厅内,从一个椭圆的一个焦点发出声音,则另一个焦点听到的声音是最大的. 分析:证明,从椭圆的一个焦点任意发射的直线经过反射后,并经过另一个焦点.            画图,过一个焦 ...

  4. vagrant虚拟机共享目录在windows宿主下的禁忌

    问题背景 宿主环境:Windows10 开发环境:vagrant(ubuntu) 操作目录:synced_folder (共享目录 ) 执行命令:npm install 错误信息: npm ERR! ...

  5. JavaScript抽象语法树英文对照

    type:"Program" //顶级对象类型 type:"Identifier" // 标识符 type:"FuncationDeclaration ...

  6. go http server 编程

    第一种:最简单的 package main import ( "fmt" "log" "net/http" ) func myHandler ...

  7. vue中数组检测重复性的两个方法

    检查数组重复(一)let inputValue = this.positionGroupInput[groupId].inputValue; if (inputValue) { for (let po ...

  8. 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发

    微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可 ...

  9. 【机器学习】ICA特征提取

    看完了ICA的一整套原理介绍后,感觉完整的介绍和andrew ng的课程中的ICA特征提取关系不是很大:在ICA的理论中,主要用于盲源分离的,也就是混合的观测数据X,通过一个正交的且其范数为1的分离矩 ...

  10. 函数节流之debounce

    浏览器中某些计算和处理要比其他的昂贵很多.例如, DOM 操作比起非 DOM 交互需要更多的内存和 CPU 时间.连续尝试进行过多的 DOM 相关操作可能会导致浏览器挂起,有时候甚至会崩溃.尤其在 I ...