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. 利用硬链接和truncate降低drop table对线上环境的影响

    众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常. 首先,我们看一下为什么drop容量大的table会影响线上服务 直接执行drop ...

  2. laravel 指定 版本安装

    composer create-project laravel/laravel=5.0.* --prefer-dist composer create-project laravel/laravel= ...

  3. PASCAL==CALLBACK==WINAPI==__stdcall

    VC里面:PASCAL==CALLBACK==WINAPI==__stdcall         _stdcall是Pascal程序的缺省调用方式,通常用于Win32  Api中,函数采用从右到左的压 ...

  4. gcc-常见命令和错误

      一:编译过程的4个阶段:预处理,编译,汇编,链接; 1:最常用的方式 gcc hello.c -o hello 2:预处理后停止编译 gcc -E hello.c -o hello.i(.i通常为 ...

  5. Linux进程启动过程简析

    朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 今天,我们将通过 ...

  6. FPGA边缘检测

    沿检测技术在项目应用中, 非常低广泛. 如要有效捕获信号跳变沿, 边沿 检测技术的应用是必不可少的.大致如下: (1) 将时钟边沿使能转换为边沿检测使能,使时钟同步化. (2) 捕获信号的突变( UA ...

  7. html字符字体转换

  8. CSS基础篇

    写的不错,收藏 http://www.cnblogs.com/suoning/p/5625582.html

  9. SQL笔记 [SQL判断是否存在] [长期更新] (-2015.4)

    --判断某个存储过程是否存在if exists (select * from sysobjects where id = object_id(N'[p_CreateTable]') and OBJEC ...

  10. jsp request 对象详解

    转自:http://www.cnblogs.com/qqnnhhbb/archive/2007/10/16/926234.html 1.request对象 客户端的请求信息被封装在request对象中 ...