

Java知识点汇总
source link: http://www.demanmath.com/index.php/2020/07/09/javazhishidianhuizong/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1.数据类型
1.1装箱和拆箱问题
1.2 缓存池
从深入理解Java虚拟机一书来说,是不存在这个说法的。从大部分百度而来的结果,就是说如下:
123,这个数字存在哪里? 这个从JVM来说,它是存在常量池中的。
按照缓存池的说法,int的缓存范围是-128~127,那我们用220来测试下结果。
private void cachePool(){ Integer a = Integer.valueOf(220); Integer b = Integer.valueOf(220); AppLog.i(String.valueOf(a == b)); Integer c = Integer.valueOf(123); Integer d = Integer.valueOf(123); AppLog.i(String.valueOf(c == d)); Integer e = 220; Integer f = 220; AppLog.i(String.valueOf(e == f)); Integer g = 123; Integer h = 123; AppLog.i(String.valueOf(g == h)); }
结果是false,true,false,true。
这里的理解是有误的。首先常量池存的是字符串,比如“abc”,abc存在常量池里面。s = "abc",这个时候,s并不在常量池。
在会过来说缓存池。在java中,当int的范围是【-128,127】时,JVM事先把这个范围内的数值,先存放在堆里面。所以对123的使用,缓存池的地址。
基本类型对应的缓冲池如下:
- boolean values true and false
- all byte values
- short values between -128 and 127
- int values between -128 and 127
-
char in the range \u0000 to \u007F
1.3 常量池
常量池只要针对字符串常量,这个上文有说到,字符串会在使用的时候,存放到常量池中。
String s1 = "abc"; String s2 = "abc"; AppLog.i(String.valueOf(s1 == s2));
结果是true,更进一步,把s2换成“abc”,还是true。也就是s1和s2都是常量池一个地址的引用。
1.4 String
最重要的是不可变性:
String 由final char[]value,由于final修饰,所以value不能指向其他数组,并且string内部没有修改value的方法,所以String是不可修改的。
hashcode可以缓存,应为不变。
StringPool机制,这个就是上面说的常量池。
String是线程安全的。
StringBuild不是线程安全
StringBuffer线程安全,内部有synchronized
String.intern(),这个方法会主动把字符串放入常量池。
1.5 精度问题
Java 不能隐式执行向下转型,因为这会使得精度降低。
short s = 1; /*1是int类型,所以+以后转换为int类型,强转为short型*/ s = (short) (s+1); /*支持隐私转换*/ s +=1;
1.6 static
1.6.1 static 变量
其他从JVM角度来讲,static的变量和类没有关系,类的实例是在java heap里面new出来的。而static 变量存在于方法区。类名只是为了找到这个全局变量的位置而已。(C++的说法,全局变量,功能类似)
1.6.2 static方法
静态方法也是独立于类的存在,所以静态方法必须实现。存在于JVM的方法区。
1.6.3 static代码块
- 首先这部分代码,只有在类使用的时候,才会被加载。
- 其次,它只会运行一次,或者说在类加载的时候,被运行。而不是new一个类的时候,所以它比new 更早。
-
构造代码块,也就是没有static,这个很显然,是在每次构造的时候调用。其次,每次都会调用。可以理解为是构造函数的一部分。
1.6.4 static内部类
从JVM的角度看,只是一个命名方式而已,跟外部类,是完全不想干的2个类。
Recommend
-
48
下面为最近使用swift 进行 OSX 开发中,对于一些知识点的总结与汇总,主要是跨行过来,很多内容都不太熟悉,所以这里进行一部分的记录与总结,方便日后的回顾与思考,后续有新的也会继续进行补充。 swift 代码同步块
-
67
在 AppDelegate 中,复写 applicationShouldTerminate 方法可以达到控制是否点击关闭按钮是否关闭应用的效果,其返回值 TerminateReply 有三个值,具体如下: publi...
-
45
在 OSX 中有一些列表的需求,这时候需要使用 OSX 中 TableView 来实现,但是这个 TableView 与 Android的 ListView 不太一样。使用还是比较复杂的。下面做一个简单的介绍, TableView 的使用 首先...
-
26
一年前写了一篇JavaScript八张思维导图,主要是对前端JavaScript知识点的一个系统的整理和总结。本篇文章用了近一个月时间,搜集整理了网上各种面试笔...
-
23
一年前写了一篇JavaScript八张思维导图,主要是对前端JavaScript知识点的一个系统的整理和总结。本篇文章用了近一个月时间,搜集整理了网上各种面试笔试题及本人针对前端的一些理解以及各路大神针对前端难点部分的详细介绍,可以作为以后面试或者考察面试人员
-
12
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)概述 在考研的时候,...
-
15
部分内容收集于网络~ dict 字典 python中的字典的实现也是一个散列表。是key-value结构。 Python的dict和set为什么是无序的? 为什么不是所有的python对象都可以用作dict的键和set中的元素 要弄懂上面的问题...
-
12
最近的项目中用了VUE,里面有不少的知识点和相关需求的解决方法值得记录下,作为后面的参考,不然时间一长还是会忘掉。汇总在这里逐渐更新吧。VUE的文档做的并不好,因为它默认隐藏的知识线索太多。普通用户看文档,基本上不知所云。很多问题没有第三方...
-
9
前段时间有粉丝问我,大一结束c++刚学完,不知道自己目前学得怎么样?要掌握的知识点有没有都弄懂了?是否基础入门了? 前几天已经整理过C++基础入门知识点,没看过的可以看看喔!
-
6
Redis 面试题&知识点汇总(2021最新版)| JavaGuide思特沃克软件技术(武汉)有限公司 软件工程师Java 面试题系列目前已经更新下面这些原创文章,文章质量非常高,...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK