-
反编译命令
javap进行反编译操作,例如:javap Test;使用jd-gui.exe来实现反编译。 -
二进制数据是采用0和1来表示,则换算单位肯定为2的n次方,而2的10次方恰好等于1024,所以就使用了1024来作文文件存储的换算单位。
-
八进制和十六进制由来,为了更好的表示二进制(缩短二进制长度)。
-
算术运算中的类型自动转换原则:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型,结果为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型,结果为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型,结果为long类型。
否则,两个操作数都转换为int类型,结果为int类型。 -
switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。与任一case值不匹配,则进入default语句(如果存在default语句的情况)。
【注意事项】
switch()中的数据类型只能为:byte、short、int、char、String(JDK7)和枚举(后面会学习)。
case后面必须是常量,并且常量的类型应该和switch()中的数据类型保持一致。并且不允许有重复的case值。
JVM规范中的运行时数据区
The pc Register(程序计数器):是一块较小的内存空间,此计数器记录的是正在执行的虚拟机字节码指令的地址;
Java Virtual Machine Stacks(Java虚拟机栈):Java虚拟机栈用于存储栈帧。栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
Heap(堆):是Java虚拟机所管理的最大的一块内存。堆内存用于存放Java对象实例以及数组。堆是垃圾收集器收集垃圾的主要区域。
Method Area(方法区):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
Run-Time Constant Pool(运行时常量池):是方法区的一部分,用于存放编译期生成的各种字面量与符号引用。
Native Method Stacks(本地方法栈):在本地方法的执行过程中,会使用到本地方法栈。和 Java 虚拟机栈十分相似。
总结:这些运行时数据区虽然在功能上有所区别,但在整个 Java 虚拟机启动时都需要被创建,并且在虚拟机运行期间始终存在,直到虚拟机停止运行时被销毁。同时,不同的 JVM 实现对运行时数据区的分配和管理方式也可能不同,会对性能和功能产生影响。
面向抽象编程,面向接口编程,可以降低程序的耦合度,提高程序的扩展力。
Set keySet(); 获取所有的key
Set<Map.Entry<K,V>> entrySet(); 获取所有键值对的Set视图。
(我当时并没有使用 边读边写)
lambda表达式(原来可以写的这么帅)
public class Test01 {
public static void main(String[] args) {
// (1)形参类型可以省略,如果需要省略,每个形参的类型都要省略。
// 没有精简的Lambda表达式代码
MoreParameterNoReturn obj1 = (String str1, String str2) -> {
System.out.println(str1 + " : " + str2);
};
obj1.test("hello", "world");
// 精简之后的Lambda表达式代码
MoreParameterNoReturn obj2 = (str1, str2) -> {
System.out.println(str1 + " : " + str2);
};
obj2.test("你好", "世界");
// (2)如果形参列表中只有一个形参,那么形参类型和小括号都可以省略。
// 没有精简的Lambda表达式代码
OneParameterHasReturn obj3 = (double num) -> {
return "传入的小数为:" + num;
};
System.out.println(obj3.test(520.0));
// 精简之后的Lambda表达式代码
OneParameterHasReturn obj4 = num -> {
return "传入的小数为:" + num;
};
System.out.println(obj4.test(1314.0));
// (3)如果方法体当中只有一行代码,那么方法体的大括号也可以省略。
// 没有精简的Lambda表达式代码
NoParameterNoReturn obj5 = () -> {
System.out.println("无参无返回值");
};
obj5.test();
// 精简之后的Lambda表达式代码
NoParameterNoReturn obj6 = () -> System.out.println("无参无返回值");
obj6.test();
// (4)方法体中只有一条return语句,则大括号可以省略,且必须去掉return关键字
// 没有精简的Lambda表达式代码
MoreParameterHasReturn obj7 = (int a, int b) -> {
return "运算的结果为:" + (a + b);
};
System.out.println(obj7.test(10, 20));
// 精简之后的Lambda表达式代码
MoreParameterHasReturn obj8 = (a, b) -> "运算的结果为:" + (a + b);
System.out.println(obj8.test(20, 30));
}
}
stream流
java新特性(这一节常看常新,因为也记不住)看那么多新特性,用着jdk8也没用,等之后要去开发jdk17的时候再看吧。