Я играл с джавапом и очень простым кодом, и это подняло вопрос - надеюсь, простой.Является ли javac также встроенным?
здесь код первого:
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(m1());
System.out.println(m2());
}
private static String m1() {
return new String("foobar");
}
private static String m2() {
String str = "foobar";
return new String(str);
}
}
Теперь я скомпилировал код и посмотрел на выходе (опуская -verbose на данный момент).
$ javap -c Main.class
Compiled from "Main.java"
public class Main {
public Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: invokestatic #3 // Method m1:()Ljava/lang/String;
6: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
9: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
12: invokestatic #5 // Method m2:()Ljava/lang/String;
15: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
18: return
}
Теперь все это имеет смысл, и я понимаю различные коды байтов, но вопросы, которые пришли мне на ум являются:
- Я вижу «m1» и «m2» упоминается в invokestatic вызовов , поэтому их так или иначе называют, но я не вижу их фактических выходов байт-кода в javap-вызове!
- Теперь, они встроены или просто не отображаются? И если да, то почему?
Снова этот вопрос представляет собой исключительно интересный вопрос о том, как Javac обрабатывает этот материал внутри страны. Благодаря!
ah спасибо, частное и -p было недостающим звеном Спасибо большое! – daschl