1,类基本加载流程(ClassLoader)
a,当一个程序启动时,jvm启动,运行 bootstrap classloader,加载java核心API(ExtClassLoader 和 AppClassLoader也在此时被加载)
b,调用ExtClassLoader加载扩展API
c,最后AppClassLoader 加载CLASSPATH目录下定义i的Class
分为三步
装载,找到class读入jvm
连接,分为验证,验证class是否合格
准备,为类变量分配内存设置默认初始值
解释,(可选,loadClass加载不需要)根据类中符号引用查找对应的实体,把符号引用转换为直接引用
初始化,class文件初始化(loadClass加载不进行)
注意:ClassLoader具备层次关系;ClassLoader不止一个种类;不同的类装载器分别加载同一个类class文件,得到的是不同的对象,没有任何关联;利用父类委托机制避免重复加载,消除安全隐患(避免核心API被替代);class.forName()加载类和jvm加载类loadClass()不同,class.forName()调用class.forName(name,initialize,loader),相当于class.forName(“”,true,CALLCLASS.class.getClassLoader())。loadClass()加载类不需要对该类解释,因此不需要初始化该类
2,JVM使用哪种字符表示
Unicode characters(不使用任何编码,直接使用他们在字符集中的编号)
3,静态代码块里定义的变量属于局部变量
class a{.
static{
int x=1;
}
static int x;//如果输出x,x=0
}
4,j=j++问题,java缓存变量机制
int j=0;
j=j++;
即 第一步,j(新)=j(旧)+1
第二步,j(真正)=j(旧)
所以不管执行多少次
j都等于0
如果两步颠倒(假设)就变成只少生效一次j++
5,java数据类型
三大类 字符 布尔 数值
8种 char boolean 整型byte short int(默认) long 浮点型 float double(默认)
常用String Date属于类变量
+运算符不能用于boolean,其他相加会按照char-整型-浮点型-字符串精度自动向上转
0开头代表八进制
0X开头代表十进制
short s=1;s=s+1;s+1提升到int,int转换short要强转
short s=1;s+=1;+=会自动转换
6,main方法,接口特点
main修饰符必须是public static void
接口成员变量默认public、static、final 可以省略,但不能写其他的
方法默认public、abstract 可以省略,不能写其他
7,