Java 动态加载类

Class.forName(“类的全称”);
不仅表示类的类类型,还代表了动态加载类
请大家区分编译、运行
编译时刻加载类时静态加载类、运行时刻加载类时动态加载类

编写一个Office.java文件,在类中创建2个不存在的对象Word和Excel,

public class Office {public static void main(String[] args) {//new 创建对象 是静态加载类,//在编译时刻就需要加载所有的可能是用到的类//动态加载可以解决此问题if ("Word".equals(args[0])) {Word w = new Word();w.start();}if ("Excel".equals(args[0])) {Excel e = new Excel();e.start();}}
}

在这里插入图片描述
运行javac编译Office.java文件,由于Word和Excel类都不存在,因此抛出以下异常。
在这里插入图片描述

创建Word类,提供start方法,编译Word.java
Word.java

class Word{public static void start(){System.out.println("word..start");}
}

编译

javac Office.java

在这里插入图片描述
Word
类不抛出异常了,Excel类不存在,仍然不能进行编译。
从上面可以看出,静态加载类,在编译时如果有一个类不存在,就会报错。

动态加载类可以解决此问题,也就是在编译时,不报错,在运行时,使用到具体类,如果该类不存在,就会报错

动态加载类
创建一个标准接口
IOfficeAndWord.java

public interface IOfficeAndWord {public void start();
}

Word和Excel类都实现这个接口的方法
Word.java

public class Word implements IOfficeAndWord {@Overridepublic void start() {System.out.println("word..start");}
}

Excel.java

public class Excel implements IOfficeAndWord {@Overridepublic void start() {System.out.println("excel..start");}
}
public class OfficeBetter {public static void main(String[] args) {//动态加载类,在运行时时刻加载try {Class c = Class.forName(args[0]);//通过类类型,创建该类对象,返回类型为该对象的类型IOfficeAndWord oaw = (IOfficeAndWord) c.newInstance();oaw.start();} catch (Exception e) {e.printStackTrace();}}
}

依次编译这几个类,

javac OfficeBetter.java
javac Word.java
javac Excel.java

运行OfficeBetter 类中的Word/Excel的方法

java OfficeBetter Word
java OfficeBetter Excel

在这里插入图片描述
如果,Excel不实现OfficeBetter 接口的方法,运行时会抛出异常
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升级为私有全栈云的腾讯云TStack究竟强在了哪儿?

戳蓝字“CSDN云计算”关注我们哦!在刚刚结束的美国丹佛Open Infrastructure峰会上,腾讯云对全新升级为私有全栈云的TStack进行了详细的介绍,引起峰会现场众多OpenStack专业人士侧目。那么,这款腾讯基于OpenStack倾力打造的私有云解…

C++中继承与虚函数示例

引言 此文记录以下虚函数和继承的一个示例。 示例 class Base {virtual void method(){std::cout<<"from base"<<std::endl;} public:virtual ~Base(){method();}void baseMethod(){method();} };class A:public Base {void method(){std::cout<&l…

JAVA反射专题

JAVA反射专题 文章目录一、Class类 和 面向对象1.1. 一个普通的类的实例对象表示1.2. Class类的实例对象介绍1.3 任何类都是Class的实例对象,下面三种方式:二、Java 动态加载类信息三、方法的反射四、反射和泛型从主要以下几点开始学习Class类的使用 方法的反射 成员变量的反射…

漫画:图的 “多源” 最短路径

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;————— 第二天 —————小灰的思路如下&#xff1a;第一步&#xff0c;利用迪…

C++实现单链表的反序

引言 将一个没有空结点作为头的单链表实现反转。其实质就是将结点的指针域指向反转。定义指向当前结点的指针&#xff0c;指向前一个结点的指针&#xff0c;指向当前结点的后一个结点的指针&#xff0c;这个过程中包含只有一个结点的单链表&#xff0c;那么反转之后还是它本身…

Git版本控制管理系统_企业实战上篇

Git专题 文章目录一、Git 介绍1.2. Linux 环境安装并配置Git1.3. 在windows安装git1.4. Windows配置Git 篇1.5. 创建git仓库二、时光机穿梭2.1. 版本回退2.2. 工作区和暂存区2.3. 管理修改2.4. 撤销修改2.5. 删除文件三、远程仓库3.1. 添加远程库3.2. 从远程库克隆四、分支管理…

vs2010中引入boost库

引言 在vs2010中无法使用C11中的大多数特性&#xff0c;像mutex互斥锁&#xff0c;要想使用需要引入boost库。下面记录一下boost库引入到vs2010中。 实现 分为以下几步&#xff1a; 下载boost压缩包 可以采用下面的地址下载适合自己的版本。下载地址&#xff1a; https://…

立足国产自主可控技术 达梦DM8数据库新品化繁为简

戳蓝字“CSDN云计算”关注我们哦&#xff01;面对技术日新月异的发展&#xff0c;如今俨然已经演变成为数据发展引来的潮流&#xff0c;而数据库的建立对企业的发展有着举足轻重的作用&#xff0c;对数据库的有效开发和管理是企业正常运行的保障&#xff0c;作为现代化经济发展…

Windows 配置Git 篇

Windows配置git 查看配置git config --list 全局配置Git git config --global user.name "用户名" git config --global user.email "邮箱" git config --list某个项目配置Git git config --local user.name "用户名" git config --local user…

C++中关于隐藏的理解

引言 在使用中弄清楚隐藏的区别之后&#xff0c;还需要明白怎么使用。下面说以下隐藏&#xff0c;重写&#xff0c;重载的区别&#xff1a; 与重载的区别&#xff1a; 在父类与子类中&#xff0c;函数名相同&#xff0c;参数不同&#xff0c;无论父类中的同名函数是否含有virt…

183条地铁线路,3034个地铁站,发现中国地铁名字的秘密。

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;小F转载&#xff1a;法纳斯特最近看了新周刊的一篇推送&#xff0c;有…

创建Git仓库的三种形式

创建Git仓库的三种形式&#xff1a; 2种本地创建和远程拉取 文章目录1. 在idea中初始化仓库1.1. 进入目录&#xff0c;初始化仓库1.2. git init 目录名1.3.1 远程拉取1. 在idea中初始化仓库 1.1. 进入目录&#xff0c;初始化仓库 进入目录git init 创建test1目录&#xff0c;…

C++中常用字符串相关的编程题

索引 找出字符串中的数字&#xff0c;字母和符号&#xff0c;并分别存储 找出字符串中所有不重复的字符&#xff0c;并输出 统计字符串中每个字符的个数&#xff0c;并输出 编译环境 以下所用的开发环境是vs2010,创建的都为控制台输出程序。下面只贴出创建项目后修改了的c…

刷了一个半月算法题,我薪资终于Double了

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;前言很多人感觉大公司都是要手写算法&#xff0c;那刷题是必不可少了&#xff0c;你技…

创建版本库

什么是版本库呢&#xff1f;版本库又名仓库&#xff0c;英文名repository&#xff0c;你可以简单理解成一个目录&#xff0c;这个目录里面的所有文件都可以被Git管理起来&#xff0c;每个文件的修改、删除&#xff0c;Git都能跟踪&#xff0c;以便任何时刻都可以追踪历史&#…

mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库

qt下依赖于第三方库生成的动态库的调用概述基于声网的sdk如何在自己的动态库中使用使用基于第三方库的动态库下面看pro文件中的设置概述 初次使用mac上的qtCreator生成动态库&#xff0c;该动态库编写时调用了第三方库&#xff0c;基于生成的该动态库&#xff0c;编写测试程序…

版本回退

现在&#xff0c;你已经学会了修改文件&#xff0c;然后把修改提交到Git版本库&#xff0c;现在&#xff0c;再练习一次&#xff0c;修改readme.txt文件如下&#xff1a; i am gblfy i am yuxin然后&#xff0c;【工作区】-【暂存区】-【本地仓库】尝试提交&#xff1a; 修改…

Docker精华问答 | 数据库为什么不适合放在 Docker 中运行?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux或Windows 机器上&#xff0c;也可以实现虚拟化。今天就让我们一起看看关于Docker …

Mac下使用macdeployqt打包qt程序:

概述 初次在Mac上使用qt的macdeployqt来打包生成的可执行程序&#xff0c;这里记录下。由于我的程序是调用之前生成的qt动态库&#xff0c;而动态库又依赖于第三方库&#xff0c;相对于没有库文件依赖的程序&#xff0c;这里有一些需要注意的点&#xff0c;下面是打包的步骤。…

路透社:谷歌已停止与华为部分合作;联想否认断供华为PC;微软计划直供Linux内核;谷歌无人机快递Wing进军芬兰……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 阿里巴巴联合欧莱雅发布移动…