问:谈谈你对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"); }