問:談談你對java的理解?java
javac 將.java文件進行編譯,編譯出.class文件(二進制字節碼,包含java類中的屬性、方法、常量信息,還會有個共有的靜態常量屬性.class,這class記錄了類的相關信息及類型信息,是class的一個實例)mysql
javap 可反編譯class文件 能夠查看java編譯器生成的字節碼sql
如何跨平臺的:網絡
問:jvm如何加載.class文件?併發
問:談談反射?寫例子?jvm
理論:Java反射說的是在運行狀態中,對於任何一個類,咱們都可以知道這個類有哪些方法和屬性。對於任何一個對象,咱們都可以對它的方法和屬性進行調用。咱們把這種動態獲取對象信息和調用對象方法的功能稱之爲反射機制。函數
實例:3d
ps:getDeclaredMethod 公共的私有的包私有的方法(private、protected、public和default),即全部的均可以,可是不能獲取到繼承的,實現接口的方法code
私有方法必須設置 .setAccessible(true)對象
getMethod 能夠獲取public方法和繼承的方法、實現接口的方法
類從編譯到執行的過程:
問:談談ClassLoader?
理論:ClassLoader在Java中有着很是重要的做用,它主要工做在Class裝載的加載階段,其主要做用是從系統外部得到Class二進制數據流。ClassLoader是Java的核心組件,全部的Class都是由ClassLoader進行加載的,ClassLoader負責經過各類方式將Class信息的二進制數據流讀入系統,而後交給Java虛擬機進行鏈接、初始化等操做。所以,ClassLoader在整個裝載階段,只能影響到類的加載,而沒法經過ClassLoader去改變類的鏈接和初始化行爲。
最核心的就是 ClassLoader.java中的loadClass方法
ClassLoader的種類:
類的加載方式:
loadClass和forName的區別:
類的裝載過程(加載和生成實例的過程)
public class Robot { static { System.out.println("Hello Robot"); } }
public static void main(String[] args) throws ClassNotFoundException { //不會初始化 因此沒有打印(加快加載速度,延遲加載) ClassLoader cl = Robot.class.getClassLoader(); //會初始化 因此打印了(mysql驅動就是用的這個) Class r = Class.forName("myclassloader.Robot"); }