软件编程
位置:首页>> 软件编程>> java编程>> Java中的动态和静态编译实例详解

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

作者:lqh  发布时间:2021-07-30 15:25:10 

标签:Java,动态,静态

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);

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

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

来源:http://08rjzhou.iteye.com/blog/726396

0
投稿

猜你喜欢

  • Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager
  • 目录Directory:创建文件夹删除文件夹获取文件夹下的子文件夹获取同类型的文件判断文件夹是否存在移动文件夹总结之前发过File对文件的操
  • 什么是volatile关键字volatile是Java中用于修饰变量的关键字,其可以保证该变量的可见性以及顺序性,但是无法保证原子性。更准确
  • 在jdk1.4中提出的技术,非阻塞IO,采用的是基于事件处理方式。传统的io技术为阻塞的,比如读一个文件,惹read方法是阻塞的,直到有数据
  • java异常分为两大类,Checked异常和Runtime异常,Checked异常都是在编译阶段可以被处理的异常。Checked异常和Run
  • Java语言的历程丰富多彩,被现在众多程序员和企业广泛使用,不用质疑这是Java的领先技术的结果。Java是Sun公司开发的一种编程语言,S
  • 大家好,我是程序员田同学!今天上午收到一个需求,针对当前的系统开发一个对外开放的接口。既然是对外开放,那么调用者一定没有我们系统的Token
  • 本文实例为大家分享了java实现图片分割指定大小的具体代码,供大家参考,具体内容如下1.使用工具:ThumbnailsThumbnails
  • 场景既然要搞懂Redis分布式锁,那肯定要有一个需要它的场景。高并发售票问题就是一个经典案例。搭建环境准备redis服务,设置redis的键
  • 微信跳一跳辅助的Java具体实现代码,供大家参考,具体内容如下1.参考知乎教你用Python来玩微信跳一跳,鉴于本人Python一直都是半吊
  • 建造者模式针对的是复杂对象的构建,比如一个产品有多个部分构成,每个部分都可以单独进行生产,这时候就可以用建造者模式,由Builder构造产品
  • 由于众所周知的原因,maven的库在中国大陆非常慢。我在百度上搜到的大部分文章都是直接在~/.m2/settings.xml 加入以下内容&
  • 一、多线程的优缺点多线程的优点:1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快多线程的代价:1)设计更复杂虽然有一些多线程
  • 不同的加锁顺序我们来看一个不同加锁顺序的例子:public class DiffLockOrder {private int amount;
  • 引言用过Spring Cloud的同学都知道在使用动态配置刷新的我们要配置一个 @RefreshScope,在类上才可以实现对象属性的的动态
  • 今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落。 针对现实中的排序问题,算法有七把利剑可以助你马道成功
  • 前言:文件的上传和下载在日常开发中很是常见,那么这一功能是如何实现的呢,下面我给大家介绍一下实现条件:1、需要一个form标签,method
  • 委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。同步调用的例子:
  • * 在JavaWeb开发中用得比较多Java Web开发中的 * (listener)就是application、session、requ
  • 面向对象编程(Object Oriented Programming)有三大特性:封装、继承、多态。在这里,和大家一起加深对三者的理解。封装
手机版 软件编程 asp之家 www.aspxhome.com