1.谈谈你对java的理解?
1.1平台无关性
编译时,运行时
Java源码首先被编译成字节码xx.class文件,再由不同平台的jvm进行解析,不需要再重新编译,java虚拟机会把字节码转换成具体平台上的机器指令.
jvm如何加载.class文件 ?
Class Loader: 加载class文件到内存
Execution Engine: 对命令进行解析
Native Interface: 不通开发语言原生库
Runtime Data Area: jvm内存空间结构模型
谈谈java反射?
java程序运行时,可以动态获取类或者对象的任意方法属性,允许改变程序结构或变量类型,这种动态获取和调用的功能,称为java反射机制
java反射示例
package s.simple.reflect;
/**
* @Title: Robot
*/
public class Robot {
private String name;
private void sayHelloPrivate(String tag) {
System.out.println("hello " + tag);
}
public void hello() {
System.out.println(name + " hello");
}
}
package s.simple;
import s.simple.reflect.Robot;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
try {
// 加载类
Class cls = Class.forName("s.simple.reflect.Robot");
// 实例化
Robot robot = (Robot) cls.newInstance();
// 获取方法(获取当前类的所有方法和属性,不能获取父类方法和接口方法)
Method sayHelloPrivate = cls.getDeclaredMethod("sayHelloPrivate", String.class);
// 获取private方法开启
sayHelloPrivate.setAccessible(true);
sayHelloPrivate.invoke(robot, "666");
// 获取方法
Field name = cls.getDeclaredField("name");
// 设置private属性可读取
name.setAccessible(true);
// 给属性赋值,属性没有get set方法
name.set(robot, "999");
// 获取public方法可以获取父类方法
Method hello = cls.getMethod("hello");
// 执行,没有参数不传
hello.invoke(robot);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
1.2.GC
1.3.语言特性
1.4.面向对象
1.5.类库
1.6.异常处理
原文:https://www.cnblogs.com/412013cl/p/11089750.html