纯JAVA实现Online Judge--2.代码编译与类加载

本文介绍了如何在Online Judge系统中用JAVA实现代码编译和类加载的过程。用户提交的代码需遵循特定规则:仅有一个以Main命名的public外部类,所有其他类为内部类,通过System.In读取数据,使用System.out输出结果,并包含main方法作为入口。完整的代码将在系列博文中分享。
摘要由CSDN通过智能技术生成

前言

  作为一个Online Judge系统,最重要的一件事情,就是对用户提交给系统的代码进行编译,然后再将其加载进JVM中,然后才能通过反射的方式,调用入口方法,以此达到运行用户代码的目的。

  首先需要的说明是,我下面的贴出的代码,由于篇幅等缘故,我只会贴出跟我讲的内容有关的代码,因此并不会贴出所有的代码,代码会因此有些不连贯,也无法直接复制进行使用。整个系统完整的代码,会在这个系列最后的博文中给出GitHub的地址。

代码约束

  在开始讲我们实现之前,首先我说明几点,用户提交的代码必须要遵守的几点原则,至于为什么要有这样的规定呢,将会在后面慢慢给出答案:

  1. 有且只有一个外部类,并且是public并以Main命名,其余出现的类都必须是内部类
  2. 从系统标准输入流(System.In)中读取数据
  3. 将结果通过系统标准输出流(System.out)进行输出
  4. 必须拥有main方法并以此为程序入口


下图就是一个合格的代码规范示例:


  • 代码编译

      代码的编译在系统的web端进行的,大致流程就是从网络中接收到用户提交的代码后(其实就是一堆字符串),先用正则进行一些简单的判断,接着将其保存为一个文件,再然后利用JAVA提供的编译API(可以参考:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值