Java中的编译器类
什么是Java中的编译器类?
原生代码是一种可以在Java虚拟机中运行的代码形式。编译器类提供支持,并为我们将Java代码转换为原生代码提供空间。这是一个公共包,嵌入在Java环境中的java.lang.Compiler.command()包中。
Java中编译器类的示例
这是一个Java中编译器类的示例:
class of the NewClass$CompilerClass Name Value Is: null value Is the compilation successful here? : false value Is the compilation successful using str here? : false value
在Java中使用编译器类的算法
在这个可能的算法中,我们将向您展示如何执行编译器类,该类为从Java代码到原生代码提供支持和服务。通过使用此算法,我们将构建一些Java语法来有效地解释该过程。
步骤1 - 开始进程。
步骤2 - 导入并声明一些Java包以运行进程。
步骤3 - 声明一个公共类。
步骤4 - 提及一个字符串参数。
步骤5 - 提及并调用编译器类函数类。
步骤6 - 使用enable()方法。
步骤7 - 为编译器方法声明一个类。
步骤8 - 使用print命令。
步骤9 - 检查子类是否存在。
步骤10 - 检查布尔值。
步骤11 - 获取打印值。
步骤13 - 使用desable停止方法。
步骤14 - 以编译器类的形式声明一个私有类。
步骤15 - 终止进程。
在Java中使用编译器类的语法
protected void assertRun(String mainClass) { try { List<String> args = new ArrayList<>(); args.add(jvm); args.add("-cp"); args.add(".:" + System.getProperty("java.class.path")); args.add(mainClass); log.debug("command: " + StringUtils.join(args.toArray(new String[]{}), " ")); Compiler Class In Java ProcessBuilder pb = new ProcessBuilder(args); pb.redirectErrorStream(true); pb.directory(getClassOutputDir()); Process p = pb.start(); jvmOutput = IOUtils.toString(p.getInputStream()); int exitCode = p.waitFor(); log.debug(jvm + " exit code: " + exitCode); log.debug(jvm + " console output: " + jvmOutput); assertEquals(jvmOutput, 0, exitCode); } catch (IOException ex) { throw new RuntimeException(ex); } catch (InterruptedException ex) { throw new Error(ex); } }
在上述可能的语法中,我们尝试向您展示如何在特定过程中声明和创建编译器类方法。通过使用这种特殊的语法,我们将朝着与问题陈述相关的某些可能的方法前进,以有效的方式。
遵循的方法
方法1 - 演示编译器类方法用法的Java程序
方法2 - 通过使用各种Long类方法和位计数来演示编译器类的Java程序
方法1:编译器类方法的用法
编译器扩展对象方法的用法
在这种可能的方法中,我们将应用Java编译器类方法,如果编译成功,该方法将返回true值。但它也可能抛出NullPointerException。
public final class Compiler extends Object public static boolean command(Object argument) public static boolean compileClass(Class c) public static void enable() public static void disable() public static boolean compileClasses(String string)
示例
//Java Program illustrating the use of Compiler class Methods. import java.lang.*; public class ARBRDD { public static void main(String[] args){ CompilerClass geek = new CompilerClass(); Compiler.enable(); Class c = geek.getClass(); System.out.println(c); Object g = Compiler.command("javac CompilerClass Has Been Declared"); System.out.println("Value Of The Process Is : " + g); boolean check = Compiler.compileClass(c); System.out.println( "Is the particular compilation successful here? : " + check); String str = "CompilerClass"; boolean check1 = Compiler.compileClasses(str); System.out.println( "Is the particular compilation successful using str here ? : " + check1); Compiler.disable(); } private static class CompilerClass { public CompilerClass() {} } }
输出
class ARBRDD$CompilerClass Value Of The Process Is : null Is the particular compilation successful here? : false Is the particular compilation successful using str here ? : false
方法2:Long类和位计数方法的用法
Long类方法的用法
在这种可能的方法中,我们将应用Long对象来表示与系统属性关联的值。如果该值在进程中不存在,则它可以返回null值。
public Long(long b) public Long(String s)throws NumberFormatException public String toString(long b) public byte byteValue() public static int bitCount(long i) public static int numberofLeadingZeroes(long i)
示例
//Java program to illustrate compiler class by using various Long class methods public class Long_test{ public static void main(String args[]){ long b = 55; String bb = "45"; Long x = new Long(b); Long y = new Long(bb); System.out.println("toString(b) = " + Long.toString(b)); System.out.println("toHexString(b) =" + Long.toHexString(b)); System.out.println("toOctalString(b) =" + Long.toOctalString(b)); System.out.println("toBinaryString(b) =" + Long.toBinaryString(b)); Long z = Long.valueOf(b); System.out.println("valueOf(b) = " + z); z = Long.valueOf(bb); System.out.println("ValueOf(bb) = " + z); z = Long.valueOf(bb, 6); System.out.println("ValueOf(bb,6) = " + z); long zz = Long.parseLong(bb); System.out.println("parseLong(bb) = " + zz); zz = Long.parseLong(bb, 6); System.out.println("parseLong(bb,6) = " + zz); long prop = Long.getLong("sun.arch.data.model"); System.out.println("getLong(sun.arch.data.model) = " + prop); System.out.println("getLong(abcd) =" + Long.getLong("abcd")); System.out.println("getLong(abcd,10) =" + Long.getLong("abcd", 10)); String decimal = "45"; String octal = "005"; String hex = "0x0f"; Long dec = Long.decode(decimal); System.out.println("decode(45) = " + dec); dec = Long.decode(octal); System.out.println("decode(005) = " + dec); dec = Long.decode(hex); System.out.println("decode(0x0f) = " + dec); long valrot = 2; System.out.println("rotateLeft(0000 0000 0000 0010 , 2) =" + Long.rotateLeft(valrot, 2)); System.out.println("rotateRight(0000 0000 0000 0010,3) =" + Long.rotateRight(valrot, 3)); } }
输出
toString(b) = 55 toHexString(b) =37 toOctalString(b) =67 toBinaryString(b) =110111 valueOf(b) = 55 ValueOf(bb) = 45 ValueOf(bb,6) = 29 parseLong(bb) = 45 parseLong(bb,6) = 29 getLong(sun.arch.data.model) value = 64 getLong(abcd) = null getLong(abcd,10) =10 decode(45) = 45 decode(005) = 5 decode(0x0f) = 15 rotateLeft(0000 0000 0000 0010 , 2) =8 rotateRight(0000 0000 0000 0010,3) =4611686018427387904
位计数方法的用法
在这种可能的方法中,我们将为编译器类应用highestOneBit()和LowestOneBit()来获取单个一位的值。它还会返回一个最后一位为1的较高和较低的值。例如:
如果数字的值为0000 0000 0000 1111,则进程返回的值为0000 0000 0000 0001。
示例
//Java program to illustrate compiler class by using various Long class methods by using bit count public class ARBRDD{ public static void main(String args[]){ long b = 55; String bb = "45"; Long x = new Long(b); Long y = new Long(bb); System.out.println("bytevalue(x) = " + x.byteValue()); System.out.println("shortvalue(x) = " + x.shortValue()); System.out.println("intvalue(x) = " + x.intValue()); System.out.println("longvalue(x) = " + x.longValue()); System.out.println("doublevalue(x) = " + x.doubleValue()); System.out.println("floatvalue(x) = " + x.floatValue()); long value = 45; System.out.println("Long.bitcount(value)=" + Long.bitCount(value)); System.out.println("Long.numberOfTrailingZeros(value)=" + Long.numberOfTrailingZeros(value)); System.out.println("Long.numberOfLeadingZeros(value)=" + Long.numberOfLeadingZeros(value)); System.out.println("Long.highestOneBit(value)=" + Long.highestOneBit(value)); System.out.println("Long.lowestOneBit(value)=" + Long.lowestOneBit(value)); System.out.println("Long.reverse(value)=" + Long.reverse(value)); System.out.println("Long.reverseBytes(value)=" + Long.reverseBytes(value)); System.out.println("Long.signum(value)=" + Long.signum(value)); int hash = x.hashCode(); System.out.println("hashcode(x) = " + hash); boolean eq = x.equals(y); System.out.println("x.equals(y) = " + eq); int e = Long.compare(x, y); System.out.println("compare(x,y) = " + e); int f = x.compareTo(y); System.out.println("x.compareTo(y) = " + f); } }
输出
ytevalue(x) = 55 shortvalue(x) = 55 intvalue(x) = 55 longvalue(x) = 55 doublevalue(x) = 55.0 floatvalue(x) = 55.0 Long.bitcount(value)=4 Long.numberOfTrailingZeros(value)=0 Long.numberOfLeadingZeros(value)=58 Long.highestOneBit(value)=32 Long.lowestOneBit(value)=1 Long.reverse(value)=-5476377146882523136 Long.reverseBytes(value)=3242591731706757120 Long.signum(value)=1 hashcode(x) = 55 x.equals(y) = false value compare(x,y) = 1 x.compareTo(y) = 1
结论
Java编译器类是一个后端代码容器,它将字节码存储在Java虚拟机中。javac方法将源代码转换为已编译的类方法,并使用特定的类扩展名重命名源文件。在今天的文章中,我们学习了Java环境中编译器类的运作过程。通过上述语法和算法,我们构建了一些Java代码来有效地解决问题陈述。
另请阅读: Java面试问题及答案