精华内容
下载资源
问答
  • java用什么编译器_Java用Java编译

    千次阅读 2020-06-25 22:35:52
    java用什么编译器 在上一篇文章中,我写了关于如何在运行时生成代理的内容,我们已经了解到生成Java源代码的程度。 但是,要使用该类,必须对其进行编译,并将生成的字节码加载到内存中。 那是“编译”时间。 幸运...

    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编译器javac不是C语言或者是C++语言写的,而是用Java本身写的(源代码可以看这里:...为什么可以用Java语言编写用来编译自身的Java编译器,其...
    b2a743fa105576cae41b2eccecb05d3b.png

    其实我们熟知的Java编译器javac不是用C语言或者是C++语言写的,而是用Java本身写的(源代码可以看这里:http://hg.openjdk.java.net/jdk6/jdk6/langtools/file/779c45081059/src/share/classes/com/sun/tools/javac)

    或许我们会觉得奇怪,为什么可以用Java语言编写用来编译自身的Java编译器,其实这在编译器技术中叫做自举(bootstrap),可以用如下过程来解释其原理:

    如果你想创造一门V语言,而且用V语言来写V编译器的话,你得按照下面的方法做:

    1、用C++把那个编译器(A)写出来,顺便留下很多测试用例。

    2、用V语言把那个编译器写(B)出来,用A.exe来编译B,修改直到所有测试用例都通过为止。

    3、B.exe来编译B自己得到B2.exe,修改直到B2.exe所有测试用例都通过为止。这是为了保证,就算B本身有很多bug,至少编译自己是没有bug的,从而你就可以走到第四步。

    4、当你觉得有信心了,用A.exe把B编译一遍,就得到了B.exe。然后A的代码和A.exe都在也不需要存在了,删掉他们。以后你就不断的用B.exe来编译下一个版本的B就好了。就自举了。

    所以为什么要用自举?自举能带来什么好处?

    自举其实是为了证明语言的表达能力,同时语言的设计者也可以通过这样一个实际的复杂的项目来验证语言的设计。

    同时自举也能方便后续开发人员对语言增加新特性且不用依赖其他语言,实现自我迭代和进化。

    展开全文
  • 在线的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编译器或下载并安装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什么Java是一门编程语言,是一门连接人与计算机的语言。由于计算机只认识二进制(只有0和1)的信息,对于我们来说,二进制的信息与我们平时所说的话比较起来就太难懂了,所以为了能够很好的和电脑交流,就产生...
  • 其实我们熟知的Java编译器javac不是C语言或者是C++语言写的,而是用Java本身写的(源代码可以看这里:...为什么可以用Java语言编写用来编译自身的Java编译器,其...
  • 华为为什么要做编译器前一段时间在国内P30发布会的时候,顺便发布华为针对android一款编译器---方舟编译器,而且在巴黎发布P30系列的手机的时候,华为并没有说有发布方舟编译器,这个可能是这次P30海外和国内发布会...
  • 其实很简单 一个关于运算符的问题 为什么在不同的编译器下会得到不同的结果 题目是 int i=3,k=0; k=(++i)+(++i)+(++i); System.out.println(k); 在C中是 printf("%d\n",k); 同样的题目为什么会有不...
  • 16个回答 默认排序​ ...我一开始学编译原理的时候就是用Java写了好多小编译器和解释器。其实用什么语言来实现编译器并不是最重要的部分(虽然Java也不是实现编译器...
  • 编译器方便了代码编码,对程序员的代码能力要求降低了很多;如果是面对JVM编码,程序员要面临的挑战更多更可怕,首先自身代码...做个文件有什么了不起的,没有我,文件也没有编译器:请你放尊重点,不然我要叫...
  • 想学习一下java开发!用什么编译器,如何生成并运行程序?从csdn上下载的源代码例程,如何打开并重新生成可执行代码?
  • JAVA 到底有什么用 经常有人在网上问 JAVA到底能派什么用今天我就来简单地回 答一下这个问题 要回答这个问题首先要从 JDK的三个版本说起这三个版本就 是标准版 (Standard Edition) 企业版 (Enterprise Edition) 微 ...
  • 如何Atom打造简单的javaIDE自己一直比较喜欢Atom编辑器,前段时间给Atom配置好了C/C++的运行环境,自己心里还是感觉挺好的,最近在学习java ,偶然的机会让我看到了一篇文章,就是介绍怎么在Atom 中配置java环境的...
  • Jocky--Java混淆编译器

    2010-10-13 15:58:25
    一、前言 1.1 什么是Jocky?  我们知道,Java是一种跨平台的编程语言,其...相信每一个Java开发人员,都曾经过诸如Jad之类的反编译器,对Java的class 文件进行反编译,从而观察程序的结构与实现细节。如此一来...
  • Java虚拟机--JIT编译器

    2019-09-29 00:36:16
    2.为什么JIT编译器  我们都知道,通常通过javac将程序源代码编译(前端编译,与语言有关,机器无关)成字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经...
  • 用java做也得用到java编译器啊。 就是做一个编译器,能编译basic语言。 我会编译原理。可是也是没头绪,囧。期待高手的解答 关键是想把程序编译成什么东西? exe? 还是自定义的字节序? ...
  • Java-代碼混淆编译器

    千次阅读 2016-01-08 14:05:33
    1.1 什么是Jocky?  我们知道,Java是一种跨平台的编程语言,其源码(....相信每一个Java开发人员,都曾经过诸如Jad之类的反编译器,对Java的class 文件进行反编译,从而观察程序的结构与实现细节。如此一来,对于
  • 原标题:Java 源代码编译成 Class 文件的过程分析在上篇文章《》中了解到了它们各有什么优点和缺点,以及前端编译+JIT编译方式的运作过程。下面我们详细了解Java前端编译:Java源代码编译成Class文件的过程;我们从...
  • 一个大概的java程序执行过程:java虚拟机跨平台原理:不管是什么系统,java源代码程序经过javac编译器编译成二进制的.class文件,.class文件在运行在jvm(虚拟机)上解释成对应平台的机器码执行。9*9倒序乘法表举例...
  • 最近看了下一篇关于string优化的文章,借此分析下string  先看看作者的问题分析: ...打印结果会是什么?类似这样的问题,有人考过我,我也拿来考过别人(蛮好玩的,大家也可以拿来问人玩),一般答案会
  • 最近看了下javaeye上一篇关于string优化的文章,借此分析下string 原文地址... 打印结果会是什么?类似这样的问题,有人考过我,我也拿来考过别人(蛮好玩的,大家也可以拿来问人玩),一般答案会是以下几种: 1.tr
  • java/c/c++在线编译器

    2015-01-14 15:50:01
    一直以来都喜欢手机看书,尤其是在上班时。...于是想到UC浏览器找找看网上有没有在线的编译器,想什么时候写代码都可以验证。于是就找了几个,各有千秋吧。中文的我没找到,全是英文的,不过
  • 因为项目的需要,设计了一个满足特定需要的代码自动生成工具。在开发过程中需要根据方法名和方法参数类型数组在指定的类中根据java编译器的规则...当然java器肯定知道,但它是用什么规则进行匹配的呢?public class Te
  • Java是全世界最受欢迎的语言之一,全世界的使用率一直都排名在前,那么究竟是什么java如此受大家欢迎,大致是java清晰明了的代码吧。那么今天就为大家讲解如何Eclipse创建JAVA编程。 双击打开要使用的Eclipse...
  • 我最近在自学JAVA编程,安装了最新的JDK,直接进入cmd.exe窗口下输入JAVAC和JAVA都没有问题,关键...javac Test.java编译没用问题 用java Test来执行的时候就问题来了 这是运行后的结果 不管运行什么程序都这样...
  • 我是指最初设计者的初衷,这个可能涉及比较多的... 我的几个环境是: JAVA:JBuilder2005 winXP C++:Vc 6.0 winXP C:solaris 8 CC&&cc 1/在JAVA下面,编译是不通过的,也是我这次想弄清楚的问题;“int x”出现错误

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,451
精华内容 580
关键字:

java用什么编译器

java 订阅