1、一个字节8bit
2、char2个字节
3、接口的方法默认为public,除了static、final变量,不能有其他变量,接口是对行为的抽象,是一种行为的规范,可以通过extends关键字扩展多个接口
4、StringBuffer 线程安全 ,对于线程不安全的StringBuilder 性能低10%~15%
5、protected和private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员
6、java是单根继承,顶级父类只有Object,是便于垃圾收回的基础。
7、堆栈 指针向下移动,分配新的内存,向上移动 释放内存
8、存储位置 寄存器——》堆栈——》堆——》常量存储——》非RAM存储
9、方法名和参数列表 合起来称为“方法签名”
10、while(x = y) 编译器期望的是一个布尔值。由于Java不会自动将int换成布尔值,所以编译器会抛出一个编译时错误,所以如果x和y都是布尔值的时候,x=y属于合法表达式
11、类型转换(cast)原意为模型铸造
12、窄化转换(narrowing conversion) 将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型
13、static方法的内部调用非静态方法
传递一个对象的引用到静态方法里(静态方法可以创建其自身的对象),然后通过这个引用(和this效果相同),就可以调用非静态方法和访问非静态数据成员。但通常达到这个效果,只需要写一个非静态方法即可
public class StaticInvokeNoStaticMethod {
private String a = "hello";
public static void main(String[] args) {
StaticInvokeNoStaticMethod financeBenefit = new StaticInvokeNoStaticMethod();
StaticInvokeNoStaticMethod.Test1(financeBenefit);
}
void show(){
System.out.println("world");
}
public static void Test1(StaticInvokeNoStaticMethod financeBenefit){
System.out.println(financeBenefit.a);
financeBenefit.show();
}
}
14、即时(Just-In-Time,JIT)编译器技术,可以把程序全部或部分翻译成本地机器码(这本来是Java虚拟机的工作),程序运行速度因此提升。当需要装载某个类(通常是在为该类创建第一个对象)时,编译器会先找到其.clss文件,然后将该类的字节码装入内存。
此时,有两种方案可供选择。一种是让即时编译器编译所有代码,但是这方法有2个缺陷:这种加载动作散落在整个程序生命周期内,累加起来要花更多的时间;
并且会增加可执行代码的长度(字节码要比即时编译器展开后的本地机器码小很多),这将导致页面调度,从而降低程序速度。
另一种做法为惰性评估(lazy evaluation),即时编译器只在必要的时候才编译代码,这样,从不会被执行的代码也许就压根不会被JIT所编译。新版JDK的Java HotSpot技术就采用了类似的方法,代码每次被执行的时候都会做一些优化,所以执行的次数越多,它的速度越快。