给定一个定义类的字符串,比如“package com.teasp.compile; public class Test{ public static void main(String[] args){System.out.println(\"compile test.\");} }”,怎么将其转换成Class对象呢?下面的代码可以实现该功能:
/** * Java6及以上才可用。 * 如果ToolProvider.getSystemJavaCompiler();返回的是null,说明jre的lib里面 * 没有tools.jar,要将jdk的lib中的tools.jar复制到jre的lib中。 * 设计作者: teasp * 信息描述: */ public class CompileTest { public final static Class<?> compile(String name, String content) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); StrSrcJavaObject srcObject = new StrSrcJavaObject(name, content); Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(srcObject); String flag = "-d"; String outDir = System.getProperty("user.dir") + "/bin"; Iterable<String> options = Arrays.asList(flag, outDir); CompilationTask task = compiler.getTask(null, fileManager, null, options, null, fileObjects); boolean result = task.call(); if (result == true) { System.out.println("Compile it successfully."); try { return Class.forName(name); } catch (ClassNotFoundException e) { e.printStackTrace(); } /*ClassLoader loader = CompileTest.class.getClassLoader(); Class<?> cls; try { cls = loader.loadClass(name); return cls; } catch (ClassNotFoundException e) { e.printStackTrace(); }*/ } return null; } public static void main(String[] args) { Class<?> cls = compile("com.teasp.compile.Test", "package com.teasp.compile; public class Test{ public static void main(String[] args){System.out.println(\"compile test.\");} }"); System.out.println(cls.getCanonicalName()); try { Method method = cls.getMethod("main", String[].class); System.out.println(method.getName()); method.invoke(null, new Object[]{new String[]{}}); } catch (Exception e) { e.printStackTrace(); } } private static class StrSrcJavaObject extends SimpleJavaFileObject { private String content; public StrSrcJavaObject(String name, String content) { super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE); this.content = content; } public CharSequence getCharContent(boolean ignoreEncodingErrors) { return content; } } }
相关推荐
在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...
本文将详细介绍如何在Java中生成随机字符串,并且会结合给定的部分代码示例进行深入分析。 #### 基本原理与方法 Java提供了多种方法来生成随机字符串,主要包括使用`java.util.Random`类和`java.security....
### 字符串转日期知识点详解 #### 一、概述 在日常开发工作中,我们经常会遇到需要将日期格式的字符串转换为`Date`类型的情况。这种转换对于数据处理、时间比较等操作至关重要。本文将详细介绍如何在Java环境中...
根据给定的文件信息,本文将详细介绍如何使用Java实现基于字符串的余弦相似度算法,并应用于推荐系统中。 ### 一、引言 在推荐系统领域,为了衡量两个字符串之间的相似性,通常会采用多种算法,其中余弦相似度算法...
在Java编程语言中,处理字符串是非常常见的操作,尤其是在涉及到文本分析和处理的场景。本文将深入探讨如何在Java中进行中文字符的判断和计数,这主要基于Java的Unicode编码特性以及字符集的理解。 首先,我们需要...
在Java中,字符串是对象,且它们可以是常量或变量。 - `String`类处理的是不可变字符串,这意味着一旦创建,字符串的内容就不能被修改。例如,尝试更改`String`对象的任何操作(如连接、查找、比较)都会返回一个新...
在Java编程中,处理数字时,我们经常需要将数字格式化为包含千分位分隔符的字符串,以便于人类阅读。例如,一个大数字123456789.012可能需要转化为"123,456,789.012"的形式。这个过程可以通过使用`DecimalFormat`类...
实验结果证明了 Java 中数组和字符串的概念和使用,例如使用 Math 类生成随机数、数组和字符串的概念、String 类和 StringBuffer 类创建字符串对象的区别等。同时,实验还展示了使用 Java 编程语言来实现实际应用中...
在Java编程语言中,字符串的逆序输出是一个基础但重要的概念,它经常在各种问题解决中出现,例如数据处理、字符串操作等。本资源聚焦于如何利用Java编写一个程序,该程序接受用户输入的字符串,并返回这个字符串的...
当创建`MyException`对象时,可以传递一个字符串参数作为异常消息,这个消息将在异常被抛出时打印出来。 #### 输入函数 该程序提供了三个输入函数:`inPut()`用于接收用户输入的字符串;`inPutChar()`用于接收单个...
在本篇文章中,我们将深入探讨如何利用Java中的Xeger和automaton库来根据正则表达式生成随机字符串。 首先,我们要了解什么是正则表达式。正则表达式,也被称为regex,是由字符、特殊符号组成的模式,用于匹配一...
在Java中,可以通过多种方式实现字符串排序,包括但不限于使用内置的`Collections.sort()`方法(适用于可变字符序列如`ArrayList<Character>`)、自定义比较器以及编写专门的排序算法等。本案例采用了一种基于递归的...
在Java编程语言中,动态地使用字符串来实例化类并调用其方法是一种高级特性,主要依赖于`java.lang.Class`类和`java.lang.reflect`包中的反射机制。这一技术在许多场景下都非常有用,例如在插件架构、动态加载类、...
在Java编程语言中,倒置字符串是一个常见的任务,它涉及到将一个给定的字符串的字符顺序反转。在本文中,我们将深入探讨如何在Java中实现这个功能,以及使用哪种数据结构和方法可以最有效地完成这一操作。 首先,让...
总的来说,通过Java反射,我们可以动态地调用对象的方法,这在处理不确定或动态行为时非常有用,比如解析字符串、插件系统或者序列化/反序列化等场景。然而,反射也带来了性能开销和安全风险,因此在使用时需要谨慎...
在Java编程中,有时我们需要对字符串进行精确截取,特别是在处理中文字符时,由于中文字符在内存中通常以双字节形式存储,因此简单的按照字符数截取可能会导致汉字被分割,影响显示效果。这个问题在文档标题“Java...
在Java编程中,统计字符串中每个...这个程序可以方便地统计任何给定字符串中每个字符的出现次数,包括大小写字母。在实际应用中,可以修改或扩展这个程序以适应其他需求,例如忽略大小写、只统计特定字符集内的字符等。
Java的`String`类用于表示不可变的字符序列,它包含许多方法用于操作和处理字符串。在实验中,`String`类的`regionMatches()`方法被用来检查一个字符串是否包含在另一个字符串中。 【regionMatches()方法】 `...
- `split(String regex)`:根据给定的正则表达式将字符串分割成多个子字符串,并返回一个包含这些子字符串的数组。 ### 示例代码 ```java public class TestJavaDemo01 { public static void main(String[] args)...
标题 "比较字符串1" 描述的是一个算法训练问题,旨在比较两个字符串的字典序,并在它们不相等时找出第一个不同的字符。这个问题涉及到的主要知识点包括字符串操作、字典序比较以及基本的ASCII码理解。 首先,我们...