JAVA中的静态加载类是编译时刻加载类  动态加载类指的是运行时刻加载类

二者有什么区别呢

举一个例子  现在我创建了一个类  实现的功能假设为通过传入的参数调用具体的类和方法

class office
{
public static void main(String args[])
{
if("word".equals(args[0])
{
word w=new word();
word.run();
}
if("excel".equals(args[0])
{
excel.run();
}
}
}

这个文件另存为office.java 很明显 这个类是无法编译通过的 运行javac office.java时  会报错无法找到类word 无法找到方法run 无法找到类excel  无法找到方法run

那我再新建一个文件word.java 功能为输出hello world number 1

class word
{
public void run(String args[])
{
System.out.println("hello world number 1")
}
}

这个时候我们再去编译office.java 就是会报错无法找到excel 和excel的run 方法

tips: new 创建对象 是静态加载类 在编译时刻就需要加载所有的可能使用到的类

如果说 我们就需要用到word的run 方法  excel的run方法我们暂时不会用到怎么办呢 在本例中word已经写好了 因为主程序无法编译却不能用 无疑这是每个程序员都不愿意看到的

考虑到实际开发过程中 我们写的方法肯定不会只有两种 假设 我们有一百种方法  但是其中有一个方法可能有问题 在我们的例子中就是excel 那么其他99种方法都不能用 因为无法编译通过 在实际项目中 这个肯定是无法接受的

这个时候 我们就需要用到类的动态加载 我们创建一个改善类 另存为officebetter.java

class officebetter
{
public static void main(String args[])
{
//动态加载类 在运行的时刻加载类
Class c=Class.forName(args[0]); }
}

这个时候 我们去编译这个文件

执行命令:javac officebetter.java 是不会报任何错误的

但是我们去运行的时候  传入一个参数excell 表示我们想加载excell 这个类

执行命令: java officebetter excell

就会报错无法找到excell这个类  再修改一下之前的类

class officebetter
{
public static void main(String args[])
{
//动态加载类 在运行的时刻加载类
Class c=Class.forName(args[0]);
//通过类类型 创建该类对象
word a=(word) c.newInstance();
a.run();
}
}

 我们执行 java officebetter word  就会发现 程序能够正常输出我们想要的字符串

 

java动态加载类和静态加载类笔记的更多相关文章

  1. JAVA类的静态加载和动态加载以及NoClassDefFoundError和ClassNotFoundException

    我们都知道Java初始化一个类的时候可以用new 操作符来初始化, 也可通过Class.forName()的方式来得到一个Class类型的实例,然后通过这个Class类型的实例的newInstance ...

  2. MiniUI treeGrid 动态加载数据与静态加载数据的区别

    说明:treegrid静态数据加载时数据结构是一棵树包含children节点集合,而采用动态加载数据时数据是List结构的具体项. 静态加载数据 test1.html <!DOCTYPE htm ...

  3. java 动态代理(模式) InvocationHandler(为类中方法执行前或后添加内容)

    动态代理属于Java反射的一种. 当我们得到一个对象,想动态的为其一些方法每次被调用前后追加一些操作时,我们将会用到java动态代理. 下边上代码: 首先定义一个接口: package com.liu ...

  4. Java动态加载类

    详见:https://blog.csdn.net/zai_xia/article/details/80026325 扩展:java反射机制与动态加载类 https://www.cnblogs.com/ ...

  5. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  6. Android Fragment生命周期及静态加载

    一个Fragment必须总是被嵌入到一个Activity中,它的生命周期直接被其所属的宿主Activity生命周期影响,它的状态会随宿主的状态变化而变化. 要创建一个Fragment 必须创建一个Fr ...

  7. 【转载】Java 动态代理

    Java 动态代理 本文为 Android 开源项目源码解析 公共技术点中的 动态代理 部分项目地址:Jave Proxy,分析的版本:openjdk 1.6,Demo 地址:Proxy Demo分析 ...

  8. 深入浅出Java动态代理

    文章首发于[博客园-陈树义],点击跳转到原文深入浅出Java动态代理 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位.代理 ...

  9. Java动态代理 深度详解

    代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位.代理模式从类型上来说,可以分为静态代理和动态代理两种类型. 今天我将用非常 ...

随机推荐

  1. Windows下使用scapy+python2.7实现对pcap文件的读写操作

    scapy在linux环境中对pcap文件进行操作非常方便,但在windows下,特别是在python2.7环境下却会碰到各种各样的依赖包无法使用的问题,最明显的可能就属dnet和pcap的pytho ...

  2. Storm Ack框架笔记

    Storm利用Acker Bolt节点跟踪消息,当Spout发送出去的消息以及这些消息所衍生出来的消息均被处理后,Spout将受到对应于该消息的Ack.实现要点: 1.Storm中每条发送出去的消息都 ...

  3. 38. Same Tree && Symmetric Tree

    Same Tree Given two binary trees, write a function to check if they are equal or not. Two binary tre ...

  4. 转:Tomcat安装配置及站点说明

    原文地址:http://www.cnblogs.com/Johness/archive/2012/07/20/2600937.html 1.首先是Tomcat的获取和安装. 获取当然得上Apache的 ...

  5. [EventBus源码解析] EventBus.register 方法详述

    前情概要 在上一篇中,介绍了EventBus的基本使用方法,以及一部分进阶技巧.本篇及以后的几篇blog将会集中解析EventBus.java,看看作者是如何优雅地实现这个看似简单的事件分发/接收机制 ...

  6. 32、shiro 框架入门三

    1.AuthenticationStrategy实现 //在所有Realm验证之前调用 AuthenticationInfo beforeAllAttempts( Collection<? ex ...

  7. pt-query-digest查询日志分析工具

    1.工具介绍 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcp ...

  8. mysql小误区关于set global sql_slave_skip_counter=N命令

      背景知识1:     在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=N以跳过命令. ...

  9. 《深入理解Nginx》阅读与实践(三):使用upstream和subrequest访问第三方服务

    本文是对陶辉<深入理解Nginx>第5章内容的梳理以及实现,代码和注释基本出自此书. 一.upstream:以向nginx服务器的请求转化为向google服务器的搜索请求为例 (一)模块框 ...

  10. 使用CocoaPods配置工程

    1.首先搭建环境,配置CocoaPods,具体请参考 http://code4app.com/article/cocoapods-install-usage 2.打开终端,输入 cd 空格 把工程拖入 ...