基本数据类型
a.8种基本数据类型:byte、short、int、long、float、double、char、boolean;
byte,short,int,long都是有符号的二进制补码表示的,第一位为符号位,‘0’表示正,‘1’表示负;正数的补码为本身;负数的补码为将除符号位以外的所有位取反后加1,符号位不变;0的补码为本身;
float为单精度的浮点数,32位分为3段,1位符号位,8位指数位,23位尾数位。
指数位范围0~255,格式2^E-127,即范围为-127-128,但由于指数全0或者全1,为非正规形式,所以范围为-126-127。
float为双精度的浮点数,64位分为3段,1位符号位,11位指数位,52位尾数位。
Java float和double精度范围大小_double范围值的大小_tianmd_Eric的博客-CSDN博客
b.java基本类型:
byte (Byte) 1字节 -2^7--2^7-1
short (Short) 2字节 -2^15--2^15-1
int (Integer) 4字节 -2^31--2^31-1
long (Long) 8字节 -2^63--2^63-1
float (Float) 4字节
double (Double) 8字节
char (Character) 2字节 16位Unicode字符
boolean (Boolean) 1位 true/false
运算符(按功能分类)
a.算术运算符
~(按位取反),-(负号运算符)
b.位运算符
&(位与):运算时把运算数转化为二进制,相同位上均为1结果为1,否则为0。
~(位非):取反,0变1,1变0。
|(或):当两边存在1时,结果为1,否则为0。
^(异或):两边结果相同为0,不同为1。
>>(带符号右移):正数右移,左边补0;负数右移,左边补1。
>>>(无符号右移):正负数右移,左边均补0。
由于无符号左移和带符号左移意义相同,所以Java不存在无符号左移。
异常
1.博客:
详解Java中的异常(Error与Exception):
Java:详解Java中的异常(Error与Exception)_王小二(海阔天空)的博客-CSDN博客:
2.分类:
a.Exception可分为运行时异常与编译时异常
运行时异常:是RuntimeException类及其子类异常,表示“JVM常用操作”引发的异常。可根据需求自定义运行时异常。
常见:IndexOutOfBoundException、NullPointerException、ArithmeticException(算数异常)...
编译时异常:是继承Exception类的除RuntimeException以外的异常,从程序角度讲是必须处理的异常,否则,程序编译不通过。一般情况下不自定义编译时异常。
常见:IOException、SQLExceptiom、InterruptedException...
b.Throwable分为可查异常(checked exception)和不可查异常(unchecked exception):
可查异常(编译器要求必须处理的异常):范围与编译时异常相同
不可查异常(编译器不要求强制处理的异常):包括运行时异常和错误(Error)。
3.关系:
Throwable—————— Exception————————RuntimeException
|___________ Error |_____________编译时异常(e.g.)
4.异常处理:
抛出异常:方法中使用throw抛出异常,声明方法时必须使用throws抛出异常,多种异常","隔开。
捕获异常:try-catch捕获异常,多个catch字句应尽量将详细异常放在前面,相对高层的异常放在后面,避免详细的异常catch被屏蔽。
5.finally
a.finally的执行顺序早于finally包含的程序块外的return执行,但外面的return结果不会受finally程序块而影响,
try {
int a = 10;
return a;
} finally {
a = 20;
};返回值依然为10。
b.发生以下情况是,finally的程序块不一定被执行:
在finally语句块中发生异常;
finally代码块之前执行了System.exit()退出程序;
程序所在线程死亡;
关闭CPU。
Java关键字
博客
java中volatile关键字详解:
https://www.cnblogs.com/zhengbin/p/5654805.html
让你彻底理解volatile:
彻底理解valatile关键字:
https://www.cnblogs.com/wangwudi/p/12303772.html
violatile怎么保证可见性的从 volatile 说起,可见性和有序性是什么_alinshen的博客-CSDN博客
1.volatile
volatile修饰的变量保证对所有线程的可见性;vilotile修饰的变量禁止指令重排序优化。
2.native
使用native关键字说明这个方法是原生函数,也就是这个方法使用C/C++语言实现的,并且被编译成DLL,由Java去调用,这些函数的实现体是在DLL中,JDK的源代码不包含,故无法看到。native就是在Java和其他语言协作时使用的,即native后的函数实现不是Java写的。
native的关键字的函数都是操作系统实现的,因为Java是跨平台的,所以就牺牲了对底层的控制,而Java需要对底层实现控制时,就需要其他语言的帮助了,这就是native的作用。
Java跨平台
1.Java跨平台原理:
https://www.cnblogs.com/roger-yu/p/5827452.html
2.java面试必问,ThreadLocal终极篇:
引用
强引用:最普遍的引用方式,只要垃圾回收时存在强引用,则不会被回收。
软引用:用于描述还有用但非必须的对象,如果内存足够,不回收,如果内存不足则回收。
弱引用:弱引用与软引用大致相同,区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器扫描他所管辖的内存区域时,一旦发现只具有软引用的对象,不管当前内存是否充足,都会回收它的内存。
虚引用:形同虚设,与其他几种引用方式不同,虚引用并不会决定对象的生命周期,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可以被垃圾回收期回收。虚引用主要用于追踪对象被垃圾回收器回收的活动。