Java 中重要的知识,进阶之路

1.javac:
.JAVA--.CLASS

2.java JVM:是桥梁
.CLASS--.机器语言二进程文件

3.被 transient 修饰的成员变量,在序列化的时候其值会被忽略
instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类
的实例,返回 boolean 的数据类型

4.volatile 有可见行,顺序行,无原子性
volatile 是一个变量修饰符,只能用来修饰变量。无
法修饰方法及代码块等

可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能
够立即看得到修改的值。volatile 关键字提供了一个功能,
那就是被其修饰的变量在被修改后可以立即同步到主内存,被其修饰的变量在每次是用之前
都从主内存刷新。

volatile 可以禁止指令重排,这就保证了代码的程序会严格按照代码的先后顺序执行。
这就保证了有序性。被 volati le 修饰的变量的操作,会严格按照代码顺序执行.

原子性是指一个操作是不可中断的,要全部执行完成,要不就都不执行。
线程是 CPU
调度的基本单位。CPU 有时间片的概念,会根据不同的调度算法进行线程调度。当一个线
程获得时间片之后开始执行,在时间片耗尽之后,就会失去 CPU 使用权。所以在多线程场
景下,由于时间片在线程间轮换,就会发生原子性问题。

主内存中-有自己的工作内存

5..synchronized 是 Java 提供的一个并发控制的关键字.有可见行,顺序行,原子性
被 synchronized 修饰的代码块及方法,在同一时间,只能被单个线程访问.

6.final 可以定义 :变量、方法、类,final 是 Java 中的一个关键字,它所表示的是“这部分是无法修改的”。无法覆盖,无法继承.
String 类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。
1、如果不是在循环体中进行字符串拼接的话,直接使用+就好了。
2、如果在并发场景中进行字符串拼接的话,要使用 StringB uffer 来代替
StringBuilder。

7.总结string:
字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过 65535,并且在
javac 执行过程中控制了最大值为 65534。
在运行期,长度不能超过 Int 的范围,否则会抛异常。

8.数据超出范围:
这就是发生了溢出,溢出的时候并不会抛异常,也没有任何提示。所以,在程序中,使
用同类型的数据进行运算的时候,一定要注意数据溢出的问题.

9.为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起
来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

10.拆箱与装箱
那么,有了基本数据类型和包装类,肯定有些时候要在他们之间进行转换。比如把一个
基本数据类型的 int 转换成一个包装类型的 Integer 对象。
我们认为包装类是对基本类型的包装,所以,把基本数据类型转换成包装类的过程就是
打包装,英文对应于 boxing,中文翻译为装箱。反之,把包装类转换成基本数据类型的过程就是拆包装,英文对应于 unboxing,中文
翻译为拆箱。

11.自动拆箱与自动装箱
在 Java SE5 中,为了减少开发人员的工作,Java 提供了自动拆箱与自动装箱功能。
自动装箱: 就是将基本数据类型自动转换成对应的包装类。
自动拆/装箱的实现 < 102
自动拆箱:就是将包装类自动转换成对应的基本数据类型。
Integer i =10; //自动装箱

int b= i; //自动拆箱
Integer i=10 可以替代 Integer i = new Integer(10);
这就是因为 Java 帮我们提供了自动装箱的功能,不需要开发者手动去 new 一个
Integer 对象。

12.可以看到,包装类与基本数据类型进行比较运算,是先将包装类进行拆箱成基本数据类
型,然后进行比较的。
Integer a=1;
System.out.println(a.intValue()==1?"等于":"不等于");
Boolean bool=false;
System.out.println(bool.booleanValue?"真":"假");

在 Java 中,==比较的是对象应用,而 equals 比较的是值

这种使用包装类型定义变量的方式,通过异常来阻断程序,进而可以被识别到这种线上
问题。如果使用基本数据类型的话,系统可能不会报错,进而认为无异常。

13.Netty异步网络应用程序框架.

14.反射
在 java 中,只要给定类的名字,
那么就可以在运行时通过反射机制来获得类的所有属性和方法。

反射机制的缺点:对性能有影响。使用反射基本上是一种解释操作,我们可以告诉
JVM,我们希望做什么并且让它满足我们的要求。这类操作总是慢于直接执行相同的操作。

15.常用java工具包:apache-commons,google-guava,netty
SPI,API

16.Java 代码的编译与反编译那些事儿中
深入分析 Java 的编译原理中
再有人问你 Java 内存模型是什么,就把这篇文章发给他
一文读懂什么是 Java 中的自动拆装箱
一文读懂你到架构师的距离

posted @ 2023-10-19 16:11  大树2  阅读(12)  评论(0编辑  收藏  举报