精华内容
下载资源
问答
  • java用什么编译器
    千次阅读
    2020-06-25 22:35:52

    java用什么编译器

    在上一篇文章中,我写了关于如何在运行时生成代理的内容,我们已经了解到生成Java源代码的程度。 但是,要使用该类,必须对其进行编译,并将生成的字节码加载到内存中。 那是“编译”时间。 幸运的是,从Java 1.6开始,我们可以在运行时访问Java编译器,因此可以将编译时与运行时混淆。 尽管在这种非常特殊的情况下,这可能会导致过多的麻烦事情,通常导致无法维护的自我修改代码,但它可能还是有用的:我们可以编译运行时生成的代理。

    Java编译器API

    Java编译器读取源文件并生成类文件。 (将它们组装到JAR,WAR,EAR和其他软件包中是另一种工具的责任。)源文件和类文件不一定是驻留在磁盘,SSD或内存驱动器中的真实操作系统文件。 毕竟,当涉及到运行时API时,Java通常对于抽象是很好的,现在就是这种情况。 这些文件是一些“抽象”文件,您必须通过API提供访问这些文件,这些文件可以是磁盘文件,但同时几乎可以是任何其他文件。 将源代码保存到磁盘上只是为了让编译器在同一进程中运行以将其读回并在类文件准备好后对其进行相同操作,通常会浪费资源。

    Java编译器作为运行时可用的API,要求您提供一些简单的API(或您喜欢的SPI)来访问源代码并发送生成的字节码。 如果我们在内存中有代码,则可以有以下代码( 来自此文件 ):

    public Class<?> compile(String sourceCode, String canonicalClassName)
    			throws Exception {
    		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    		List<JavaSourceFromString> sources = new LinkedList<>();
    		String className = calculateSimpleClassName(canonicalClassName);
    		sources.add(new JavaSourceFromString(className, sourceCode));
    
    		StringWriter sw = new StringWriter();
    		MemoryJavaFileManager fm = new MemoryJavaFileManager(
    				compiler.getStandardFileManager(null, null, null));
    		JavaCompiler.CompilationTask task = compiler.getTask(sw, fm, null,
    				null, null, sources);
    
    		Boolean compilationWasSuccessful = task.call();
    		if (compilationWasSuccessful) {
    			ByteClassLoader byteClassLoader = new ByteClassLoader(new URL[0],
    					classLoader, classesByteArraysMap(fm));
    
    			Class<?> klass = byteClassLoader.loadClass(canonicalClassName);
    			byteClassLoader.close();
    			return klass;
    		} else {
    			compilerErrorOutput = sw.toString();
    			return null;
    		}
    	}

    编译器实例可通过ToolProvider并且要创建编译任务,我们必须调用getTask() 。 该代码通过字符串编写器将错误写入字符串。 文件管理器( fm )是在同一程序包中实现的,它只是将文件作为字节数组存储在映射中,其中的键是“文件名”。 这是类加载器稍后在加载类时将获取字节的位置。 该代码未提供任何可诊断的侦听器(请参见RT中Java编译器的文档),编译器选项或注释处理器要处理的类。 这些都是空值。 最后一个参数是要编译的源代码列表。 我们仅在此工具中编译一个类,但是由于编译器API是通用的并且需要可迭代的源,因此我们提供了一个列表。 由于存在另一个抽象级别,因此此列表包含JavaSourceFromString

    要开始编译,必须“调用”创建的任务,如果编译成功,则从生成的一个或多个字节数组中加载类。 请注意,如果在我们编译的顶级类中有嵌套类或内部类,则编译器将创建几个类。 这就是为什么即使只编译一个源类,我们也必须维护类的整个映射,而不是单个字节数组。 如果编译不成功,则错误输出将存储在一个字段中并可以查询。

    该类的使用非常简单,您可以在单元测试中找到示例:

    private String loadJavaSource(String name) throws IOException {
    		InputStream is = this.getClass().getResourceAsStream(name);
    		byte[] buf = new byte[3000];
    		int len = is.read(buf);
    		is.close();
    		return new String(buf, 0, len, "utf-8");
    	}
    ...
    	@Test
    	public void given_PerfectSourceCodeWithSubClasses_when_CallingCompiler_then_ProperClassIsReturned()
    			throws Exception {
    		final String source = loadJavaSource("Test3.java");
    		Compiler compiler = new Compiler();
    		Class<?> newClass = compiler.compile(source, "com.javax0.jscc.Test3");
    		Object object = newClass.newInstance();
    		Method f = newClass.getMethod("method");
    		int i = (int) f.invoke(object, null);
    		Assert.assertEquals(1, i);
    	}

    请注意,以这种方式创建的类仅在运行时可用于代码。 例如,您可以创建对象的不可变版本。 如果要在编译时使用可用的类,则应使用scriapt之类的注释处理器。

    翻译自: https://www.javacodegeeks.com/2016/03/java-compile-java.html

    java用什么编译器

    更多相关内容
  • 您必须下载Java编译器或下载并安装IDE(例如Eclipse)。 编译器的选项是有限的。 如今,有许多在线编译器和IDE。 与台式机相比,它们具有明显的优势。 易于设置–无需下载; 没有安装; 没有PATH变量。 快速...

    学生java用什么编译器

    您想开始使用Java吗? 您是一个不耐烦的程序员,不想在您的计算机上安装任何软件吗? 直到最近,您还没有太多选择。

    您必须下载Java编译器或下载并安装Eclipse之类的IDE。 编译器的选项是有限的。

    如今,有许多在线编译器和IDE。 与台式机相比,它们具有明显的优势。

    • 易于设置–无需下载; 没有安装; 没有PATH变量。
    • 快速入门–许多功能只需几秒钟即可打开,而Eclipse需要1分钟才能启动。
    • 轻松共享–老师与学生共享代码,学生共享作业,将任何问题发布到Stack Overflow。 超级容易! 只需复制链接并粘贴。

    一些在线编译器,例如Codiva和JDoodle,适合学习编程和练习面试问题。 这些简单易上手。 针对此特定用例进行了优化的功能。

    另一方面,还有在线IDE,例如Codenvy和Cloud9。这些IDE提供了完整的开发环境,专业人员可以使用。 许多初创公司使用它来提供一致的预配置开发环境,所有开发人员都可以使用它而无需维护。

    在本文中,我们将介绍适用于学生以及在换工作时练习面试计划的专业人员的在线编译器和IDE。 没有特别的顺序:

    1.

    Codiva.io是我们在线Java编译器的首选。 这是此游戏的新功能,但具有一些很酷的功能。

    Codiva的最大特色是,它可以在您键入时进行编译,解析编译错误并在编辑器中显示。 到您完成输入时,您将获得编译结果。

    它还具有很好的自动补全功能。 这两个功能将在编码时为您节省大量时间。

    Codiva支持多个文件和程序包,并且可以具有自定义文件名。 您也可以运行交互式程序。 因此,初学者学习Java和算法课程的大多数主题都可以由Codiva本身完成。

    Codiva还是唯一在移动设备上运行良好的IDE。

    Codiva的一些缺点是,它仅支持Java,C和C ++,不提供UI主题或不同的编译器设置。 Codiva支持Java 9,但不支持Java 9模块。 当然,没有其他在线编译器也支持Java 9模块。

    Java编译器

    Codiva中的自动补全和错误处理

    总体而言,它是使用Java进行编码的出色工具。 在此处尝试Codiva.io在线Java编译器。

    2.

    JDoodle是流行的Java在线编译器。 它开始于Java,但现在支持近70种语言。 JDoodle只允许一个文件,但您不必指定任何文件名。 它通过分析文件内容找到它。

    JDoodle对运行交互式程序具有出色的终端支持。 默认情况下,程序在非交互模式下运行,限制为10秒。 但是,如果每个项目都需要,您可以切换到交互模式。

    如果您是一个学习许多编程语言的人,或者经常在多种语言之间切换,那么JDoodle将是一个不错的选择。

    对于Java,与Codiva相比,JDoodle的主要缺点是,每次完成代码时都必须手动单击编译。 然后通读错误消息,找到行号,然后返回编辑器。 如果您以前使用过桌面IDE或用Codiva编码,您会发现它很烦人。

    第二个缺点是,它仅支持一个文件。 如果您将其用于编程课程,则无法教授包装,封装等概念。

    尽管有这些缺点,JDoodle是一个不错的网站。 受欢迎是有原因的。

    Java编译器

    在这里尝试JDoodle。

    3.

    Rextester最初是一个正则表达式测试仪,后来发展为在线IDE。 它支持大约30种语言,包括Java,但在C#用户中更受欢迎。

    Rextester允许在多个编辑器小部件之间切换以适合您的喜好。

    它具有最佳的实时协作支持之一。 只需共享URL,开始输入即可。 多个用户可以同时进行编辑,到目前为止,我还没有遇到任何问题。

    Rextester仅支持单个文件,并且该类应命名为Rextester。 另外,不应公开授课。 在撰写本文时,它仅支持Java 8。

    Java编译器

    如果您想进行实时协作,请尝试Rextester

    4.

    联机GDB是支持内置调试器的联机工具。 如果您编写一些复杂的程序,并且必须在发生错误的情况下进行调试,则调试器将派上用场。

    您可以设置一个断点,并且在运行代码时,它将在该行停止,并逐步执行代码,并查看中间变量值。

    它还具有一个内置的代码格式化程序,该代码格式化程序会自动将代码格式化为格式合理的代码,但是您无法定义首选的代码样式。

    它仅支持Java8。编译有点慢,但是仍然值得尝试。

    Java编译器

    5.

    Browxy曾经很受欢迎,但开始落后。 它支持多个文件。 目前只有Java 8。

    Browxy是唯一几乎没有限制的在线编译器。 您甚至可以将网络请求发送到外部URL。

    如果您想练习调用API调用,这将非常有用。 它还支持Applet,但是没有人使用Applet。

    Browxy可以快速编译并运行,我们可以在不到一秒钟的时间内获得响应。

    Java编译器

    6.

    Ideone是最早出现的在线编译器之一。 因此,值得一提。

    它支持大约60多种语言。 Ideone尚未更新为支持Java9。IDEOne提供了一个API,可作为服务进行编译,您可以使用它来构建自己的在线IDE,以在网站上使用。

    Java编译器

    了解更多:

    结论

    今天,您以前使用的每个工具都可以在云中使用。 尽管开发人员大量使用了IDE,但为云开发却有些困难,但是它正在发生。

    与台式机世界不同,在台式机世界中,每个IDE都会竭尽所能而变得肿,我预测在线IDE市场将是零散的,并针对利基用例。

    将分别为学生和专业人士提供IDE。 因为,每个人都将只有一个链接,那么为什么要夸大该网站?

    翻译自: https://jaxenter.com/top-6-java-compilers-students-141549.html

    学生java用什么编译器

    展开全文
  • Java用什么编译器最好?

    千次阅读 2021-04-23 15:46:45
    你说的是ide吧,如果你问的是编译器的话,那java编译器包含在jdk里面,具体一点说应该是 c1/...openjdk就行了,如果你已经学完java了, 打算进一步探索一些高级功能,比如用java写一个安卓的apk这种,那就graal了

    你说的是ide吧,如果你问的是编译器的话,那java的编译器包含在jdk里面,具体一点说应该是 c1/c2那些

    java目前通用的编译器就是一个openjdk,还有一个比较值得看的就是openjdk的扩展graalvm的 ce版,后者是基于前者制作的一个能够编译其他语言的编译器,兼容前者,并提供了更多的功能, 比如native image等等,如果你只是学习java的话,用openjdk就行了,如果你已经学完java了, 打算进一步探索一些高级功能,比如用java写一个安卓的apk这种,那就用graal了

    然后不同的公司,在openjdk的基础之上,也有一些特殊的分支,比如oracle jdk之类的,但是一般 而言,多数人和公司,都建议使用openjdk,因为不同公司的jdk会在openjdk的基础上加一些工具 等等,那些都是用来捆绑用户用的,不建议使用

    理论上,你有jdk就能开始写java代码了,只是在这个前提下,你只能用各种命令,还有文本编辑器 去编写代码,比如java,javac, jshell这些东西,然后vi去编写,那java的要求规则相对较多,比起 c来说,所以如果用这种方式去编写代码,你的效率很低,开发效率上不去

    所以一般会找一个集成开发环境,也就是ide,来编写代码,有了ide之后,各种自动,即时提示, 可以极大地方便你的开发流程,大多数ide还集成了maven,gradle等依赖管理工具,所以除了jdk 以外,你还可以下载一下idea的社区版,免费的,学java,写java的话,idea社区版够你用了

    然后你就可以用这个工具来提升你的开发效率,尤其是学习的过程中,一些初级的错误,比如大小 写之类的,ide会即时提示你,就不需要你每次都javac完,看着一堆错误在那边抓瞎

    文末分享:学习手册,面试题,开发工具,PDF文档书籍教程,扣扣群:639714511免费分享

    点击链接加入群聊

    展开全文
  • MiniJava-编译器这是一个 Java 编写的简单编译器,用于将名为“MiniJava”的 Java 子集编译成 MIPS 汇编语言。 摘自 MiniJava 项目的网站 ( ): MiniJavaJava 的一个子集。 MiniJava 程序的含义由其作为 Java ...
  • java实现c语言编译器,包括词法分析,语法分析,语义分析,目标代码生成四个部分,总体实现编译器功能,有运行界面,代码精简,值得下载。
  • 编译器 用Java编写的编译器
  • 学习Java用什么编译软件好

    千次阅读 2021-02-26 18:49:56
    在线的java编译器和在线运行帮助我们轻松编译代码直接在浏览器上显示。java编译器网络版成为有用的在许多情况下。例如,假设你正在编写一个java代码,但不在自己的计算机上,减少时间的浪费,可以无需下载和安装任何...

    在线的java编译器和在线运行帮助我们轻松编译代码直接在浏览器上显示。

    java编译器网络版成为有用的在许多情况下。例如,假设你正在编写一个java代码,但不在自己的计算机上,减少时间的浪费,可以无需下载和安装任何软件,使用免费的在线工具运行代码。

    也就很有帮助,如果不需要编写java代码而定期一周甚至一天几次。增加电脑的速度,减少从您的计算机未使用的软件数量。

    但如果不想错过它,可以尝试免费的在线编译器分享收藏。

    现在,在这一段后,让我们在最好的免费在线列表Java编译器。在测试这些,注意到每个工具都是好的或坏的事情很少,所以让你挑最好的所有,我们将添加一个简短的描述每个下面的列表。

    最好的免费在线java编译器

    godingground

    7d8c76d8e4b234240ecae19d3d5d4761.png

    这godingground,原名compileonline但是在这个月,它有自己的名字,godingground。我也利用这一工具,当我需要java代码执行。tutorialspoint不仅提供程序编辑器和运动员又是著名的许多编程语言教程。如果我们谈论他们的java编写的实用程序,它提供了一个简单的和用户友好的界面,在那里你可以很容易地粘贴你的源代码和可得到的结果通过点击“编译”按钮。

    jdoodle在线java编译器和编辑器

    d624d492b0ec889b8a80f0b8980ad47e.png

    另一个伟大的互联网工具对于那些想要执行java代码,但不想在自己的电脑上安装一个编译软件。jdoodle是有用的java编辑器和执行你的java代码。

    你可以很容易的,在适当的方格内加java代码,然后向下滚动并点击“执行”按钮没有,这会给代码的结果进入盒子的上面。它也有下载的代码作为一个java文件的津贴,你必须在你的电脑与他人分享。

    codetwist

    74d0ebba1166bb1429e208e3e0b35052.png

    宣传自己是“简单的C,C和java解释器和编译器。因为它很简单,因此可以很容易地访问。它支持上述三种语言和编译。在场地的中间,看到了两个盒子,在第一个框中,你可以粘贴代码要执行,第二框,如果代码需要一个输入。在进入你的代码,必须点击提交按钮,看结果。

    ideone.com

    d01d23d02592edbcc5058ee8bb47a950.png

    在线java编译器–在线java编辑器–在线javaIDE–java编码在线–在线java运行–保存java在线分享。

    browxy.com

    1db99a9a3f6c5cffca1b33c4d5c5507c.png

    java在线编译器IDE和发射控制台程序和小程序。

    Java学习视频入门到精通

    以上就是动力节点java学院小编针对“学习Java用什么编译软件好”的内容进行的回答,希望对大家有所帮助,如果对于学习Java的学习计划,怎么学才有效率,或者学完如果找工作的问题,请在线咨询,有专业老师随时为你服务。

    相关推荐

    展开全文
  • JAVA编译器

    2017-10-23 16:26:25
    反编译,可以把Java开发打包后的 class,或者 jar,war进行反编译
  • Java语言在线编译器的设计与实现.pdf
  • 这是一个用java实现的简易的编译器,他能将一个具有加法和乘法的算术表达式编译成类汇编语言,这是我博文对应的代码,具体请参看我的博文: http://blog.csdn.net/tyler_download/article/details/50668983 例如...
  • PL0编译器使用Java和IntellJidea的编译器产品作业代码,一个基本的pl0编译器java pl0编译器代码
  • JAVA编译器

    2018-04-15 22:54:43
    JD-GUI是一个独立图形界面的...一、支持众多Java编译器的反编译; 二、支持对整个Jar文件进行反编译,并本源代码可直接点击进行相关代码的跳转; 三、Java反编译工具,实现了eclipse的高亮着色功能,多文件标签浏览;
  • java编译器

    2019-02-27 16:31:45
    《JD-GUI》是一款反编译软件,JD-GUI是以单独的程序的方式运行,小巧,方便,不用安装。
  • DrJava is a lightweight development environment for writing Java programs. It is designed primarily for students, providing an intuitive interface and the ability to interactively evaluate Java code. ...
  • 编译原理课设作业,java实现,附上实验报告以及答辩ppt 实现词法分析,语法分析,语义分析
  • 三、java编译器

    千次阅读 2022-05-03 21:04:01
    java编译器 、解析器 (bytecode intepreter)、JIT (just in time compiler)
  • java编译器

    2018-02-07 16:25:57
    一款java编译器,可以编译java代码文件成为可执行程序.
  • minijava:MiniJava编译器

    2021-04-30 17:10:45
    由JavaFX支持的MiniJava编译器 描述 作为编译器课程的最后工作,使用某些工具(例如JFLEX和CUP)开发了MiniJava语言的编译器,以解析代码。 为了方便开发人员访问该语言,开发了一个小型IDE,以便在编写和编译代码时...
  • jave decompiler using method pdf
  • 6月更新:终于完成了我的论文,将开始使用Apache Commons BCEL在编译器的后端工作。 我终于决定创建自己的编译器。 自从我第一次学习如何编码以来,这就是我一直想要做的事情,并且会问起最初用来编写要在其中键入...
  • java转C#编译器的大型试验实验报告,附有详细过程及原始代码。
  • 不过,编译后生成的并不是cpu使用的本地代码(段后解释),而是叫做字节代码的程序,.class文件 机器语言的程序成为本地代码。程序员书写的为源代码。 通过对源代码进行编译,就可以得到本地代码。 一般应用软件包下...
  • 编译器是用来编译java源代码的,以.java为后缀的java源代码必须编译以后才能运行; java虚拟机是java代码的运行环境也就是说被编译器编译以后的java代码在java虚拟机上运行。
  • 不要在生产中使用。 当前状态: 特征 地位 主意 基本概念、项目结构 进行中 —— 基本包/类结构 进行中 —— 表达式、控制结构 进行中 —— 代码块、作用域、闭包 进行中 可变后缀 方法重载 很快 方法后缀,默认变体...
  • 这是C语言编译器的源代码,供网友学习C语言编译器使用。源代码对C语言的基本架构做了具体的实现,而且代码非常精简,只保留了最基本的部分。
  • java中的编译器和解释器 Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够...
  • 1.用java实现一个简易编译器1-词法解析入门.mp4 2.用java实现一个简易编译器2-语法解析.mp4 3.语法解析改进及代码生成.mp4 4.输入系统及分词系统概述.mp4 5.输入系统代码实现.mp4 6.词法解析算法的一些概念说明.mp4 ...
  • 在众多编译器中鄙人推荐新手使用eclipse来进行入门。 这里是32位/64位通用的地址: http://pan.baidu.com/s/1c2h6Ex6 下载过来的是一个压缩包,我们直接解压到想要的位置即可,进去之后找到这个exe文件 (此图片来源...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 576,530
精华内容 230,612
关键字:

java用什么编译器

友情链接: greedy algorithm.zip