Java中的动态和静态编译实例详解

首先,我们来说说动态和静态编译的问题。

Q: java和javascript有什么区别?

总结了一下:有以下几点吧:

1.首先从运行环境来说java代码是在JVM上编译成class文件,而javascript则直接在浏览器上加载运行。

2.由第一点可看出,java代码需要编译,而javascript不需要编译。

3.从语言性质来说,java是一种高级编程语言,对变量检查要求严格,javascript只是一个简单的解释性的脚本语言,对变量检查及要求很弱。

4.javascript是一种动态的语言,java则是"半动态"的。

javascript是动态的,这无须质疑。为什么java是半动态的?请看下列代码:

public class Color{

public void changeColor(){

System.out.println("要改变的颜色是红色");

}

}

public class Frame{

public static void main(String args[]){

Color c=new Color();

c.changeColor();

}

}

Frame类中通过直接new一个Color对象从而调用其方法,这是在编译时确定对象,从而确定关系。我认为这是java语言静态性的一个体现。而且如果编译后的Color.class文件丢失,会报一个错误。

java.lang.NoClassDefFoundError........

如果通过以下代码,我们则可以发现java的动态性:

public interface Color{

public void changeColor();

}

public class ColorImp implements Color{

public void changeColor(){

System.out.println("颜色改变为红色");

}

}

public class Frame{

public static void main(String args[])throws Exception{

System.out.println("请输入您要输入的类的名字");

//输入一个类的名字

java.util.Scanner sc=new java.util.Scanner(System.in);

String s=sc.next();

//加载这个类

Class c=Class.forName(s);

//获得这个类的实例化对象

Object obj=c.newInstance();

//强制转型

Color color=(Color)obj;

color.changeColor();

}

}

注意Frame类,当我们编译它的时候,只会出现两个class文件--Frame.class和Color.class,然后我们运行这个程序,由于没有编译ColorImp,会抛出一个异常-- java.lang.ClassNotFoundException。

于是,我们打开另一个cmd进程,单独编译ColorImp类,再在上一个cmd对话框中输入ColorImp,则程序会正常运行。

这样我们可以在不停止程序运行的情况下,动态地加载一个类。我认为这体现出了Java的动态性。通过上面的例子,我认为java语言是一种“半动态”语言。

我们可以看出,上述例子使用了Color接口类。这里不得不提我对接口的一点小小感触。

在使用数据库的时候,Java语言只是定义了一个数据库接口,然后不同的数据库来实现这个借口。这些包括了(以mysql数据库为例)

加载数据库驱动:

Class.forName("com.mysql.jdbc.Driver");

建立与数据库的链接:

java.sql.Connection conn = java.sql.DriverManager.getConnection(

url, user, password);

取得编译对象和结果集对象等,这些都只是定义了接口,具体的实现则交给了数据库开发商,只要实现了这个接口就行。这就体现了接口的扩展性和规范性。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java 静态 编译_Java中的动态和静态编译实例详解相关推荐

  1. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  2. java foreach标签_Java中Velocity foreach循环标签详解

    Java中Velocity foreach循环标签详解 Java Velocity中foreach循环可以很容易的遍历数组或者集合. 定义 #foreach( $elem in $allElems) ...

  3. java 分割数据_java 分割csv数据的实例详解

    java 分割csv数据的实例详解 实际需要解析的csv中很多都是从excel中转过来的,数据中本身包含了逗号的数据导致split的过程中发现数据对不上,因此,基于这种特性,重新写了一个csv数据的分 ...

  4. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  5. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  6. java 静态 编译_Java中的动态和静态编译

    public class Frame{ public static void main(String args[])throws Exception{ System.out.println(" ...

  7. java.equal例子_Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法: Java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boo ...

  8. java中用法实例_java中Calendar类用法实例详解

    本文实例讲述了java中Calendar类用法.分享给大家供大家参考,具体如下: java中的Calendar在开发中经常被忽略,这篇博客总结一下这个类,对后面项目中使用时期的时候有帮助. Calen ...

  9. java 操作excel jxl_java 中JXL操作Excel实例详解

    JXL操作Excel 前言: jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一 ...

最新文章

  1. 从无到有算法养成篇-利⽤栈思想解决问题
  2. 深入理解JVM(2)——GC算法与内存分配策略
  3. Matlab图像处理创新实践-实验1【图像滤波基础(1)】
  4. 2017西安交大ACM小学期数据结构 [树状数组 离散化]
  5. 鸿蒙应用开发培训笔记02:应用开发入门
  6. ieda中快捷搜索_快捷指令(07)早上好(三)播报当日日程安排。
  7. 论一只爬虫的自我修养(第二天)
  8. 怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G
  9. [Windows Phone] 自己动手实现Telerik公司的LayoutTransform动画效果
  10. 阿里云ECS+Nginx+nginx_rtmp_module+FFMPEG服务器搭建过程
  11. sql 截取字符串:
  12. String类的intern方法学习
  13. 修改阿拉伯语等语言下的数字显示
  14. 神经网络占用内存(显存)的计算
  15. mysql的联接算法_【MySQL—SQL编程】联接
  16. crontab定时执行任务命令详解及crontab 误删除恢复
  17. 超大气友价商城仿互站源码
  18. Spark论文思想之-基于RDD构建的模型(Shark的来龙去脉)
  19. Linux服务器卡顿如何排查
  20. jq实现checkbox全选中以及获得选中的checkbox的值

热门文章

  1. 如何给Centos添加静态地址
  2. 波涛汹涌的黄金甲,一碗中药引发的血案!
  3. linux安装python虚拟环境_linux环境下安装python虚拟环境及注意事项
  4. countif函数比较两列不同_COUNT函数家族的使用(下篇)
  5. php cms帮助文档,phpcms手册
  6. 邵阳一中2021高考成绩查询入口,邵阳高考成绩查询系统
  7. java集合代码_Java-集合(示例代码)
  8. BufferedInputStream与BufferedOutputStream用法简介
  9. lower() oracle,PLSQL LOWER用法及代码示例
  10. 制作灵动单片机MM32F3277 测试版