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

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告