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面试问题及答案

更新于:2024年6月17日

浏览量:172

开启你的职业生涯

通过完成课程获得认证

开始学习
广告