最近复习java基础的时候发现很多知识点都忘记了,所以在这里专门整理一下。
1.4种访问修饰符
2. switch 接收byte、char、short、int ; 1.5 后支持 枚举 ; 1.7 后支持 String
3.类型转换
精度:byte<short<int<long<float<double
低精度到高精度自动转换,高精度到低精度需要强制转换
int i = 133; long l = i;
double d = 3.5; float f = (float) d;
小数常量默认double 类型,所以小数常量需要转换才能赋值给float
float f = (float) 3.5;
整数常量默认为int 类型,但是byte char short 类型在不超过精度时,不需要手动转换
byte b1 = 1; byte b2 = (byte) 128;
char 类型不在自动转换之列,所以需要手动转换
char c = 'C';
byte b = (byte) c;
short s = (short) c;
char c1 = (char) b;
char c2 = (char) s;
计算时 byte short char 型的值将被提升为int型,有long转long,有double转double
short s1=1,s2 = 1;
s1 = (short) (s1+s2);
复合赋值运算符 += / -= 会自动转换为左侧的类型
short a = 1;
a += 1;
自动装箱与自动拆箱
/** 自动拆箱 自动装箱 **/
Integer i1=100;
Integer i2=100;
Integer i3=300;
Integer i4=300;
System.out.println(i1==i2); // true 同一个对象
System.out.println(i3==i4); // 包装基础对象时,-128 <= i <= 127 返回已存在对象, 超出范围返回全新对象
Integer i = 100; int ii = 100;
System.out.println(i == ii); // 包装类与基础数据比较时,包装类会自动拆箱,然后再比较
4.String 类为final,不可以继承;String 类重写了equal方法,所以我们可以使用equal来判断字符串内容是否相等。
5.构造器不能被重写,只能重载;子类的构造都必须调用父类的构造,默认就是super(),所以如果父类没有构造无参数构造函数,必须显式的调用。
6.StringBuffer 与 StringBuilder 的区别时,StringBuilder时单线程环境下使用的,效率略高;而StringBuffer 是线程安全的,多线程下是使用;
7.String s = "123" 与 String s = new String("123"); 的区别
// 以下两条语句创建了1个对象。"凤山"存储在字符串常量池中
String str1 = "凤山";
String str2 = "凤山";
System.out.println(str1==str2);//true
//以下两条语句创建了3个对象。"天峨",存储在字符串常量池中,两个new String()对象存储在堆内存中
String str3 = new String("天峨");
String str4 = new String("天峨");
System.out.println(str3==str4);//false
8.java 异常处理
1、 异常都会中断代码执行,除非 try catch 处理之
2、 RuntimeException 为不可查异常,所以不是必须处理的,可以不申明也不处理。
3、 throw 抛出异常 throws 申明异常(交给下一个调用者处理)
4、 try 块后可同时接 catch 和 finally 块,但至少有一个块
2、 RuntimeException 为不可查异常,所以不是必须处理的,可以不申明也不处理。
3、 throw 抛出异常 throws 申明异常(交给下一个调用者处理)
4、 try 块后可同时接 catch 和 finally 块,但至少有一个块
9.java 内存
1、内存主要可以分为 堆、栈、方法区、本地方法栈及程序计数器(寄存器)。常量池在方法区中。
2、栈 -- 局部变量,对象引用;堆 -- 对象,数组;方法区 -- 常量池,类方法字段描述;本地方法栈与方法区类似,为调用本地方法使用
3、类的只有四种情况会初始化:new 对象 或 操作static字段、static方法 ; reflect 调用; 调用子类的时候父类还没有初始化则会初始化父类; 虚拟机启动时会加载包含main()方法的类