![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
成为更好的qyk嘻嘻
一个努力的人
展开
-
ArrayList扩容机制总结
以add()触发的扩容为例:minCapacity为size+11.如果minCapacity>数组长度elementData.length,进行grow()扩容扩容后数组长度:newCapacity = elementData.length*2数组最大长度:MAX_ARRAY_SIZE = Integer.MAX_VALUE - 82.如果newCapacity>minCapacity,说明扩容后的长度大于所需要的长度并且newCapacity>MAX_ARRAY_SIZ原创 2022-03-14 17:19:17 · 630 阅读 · 0 评论 -
String总结
String a = “abc”;1.判断字符串常量池有没有"abc"没有则加进去,返回引用;有则返回引用总共创建一个String对象:常量池中"abc"String a = new String(“abc”);1.判断字符串常量池有没有"abc"没有则加进去2.在堆中new一个String对象,value字符数组存"abc"总共创建两个String对象:常量池中"abc",堆中"abc"String a = new String(“abc)+ new String(“def)1.判断字原创 2022-03-03 12:31:41 · 96 阅读 · 0 评论 -
String不可变的真正原因
String里真正存字符串的地方是value数组value数组是final的,说明value指向的地址空间不可变,此时如果直接对value元素进行赋值也是能更改的,但是value又被private修饰,且没有提供修改value数组的方法,所以无法修改value...原创 2022-03-01 01:40:57 · 210 阅读 · 0 评论 -
JVM浅显总结
.class文件我们都知道,class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。字面量就是我们所说的常量概念,如文本字符串、被声明为final的常量值等。符号引用是一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可(它与直接引用区分一下,直接引用一般是指向方法区的本地指针,相对偏移.原创 2022-02-14 18:56:39 · 159 阅读 · 0 评论 -
HashMap的重写的hashCode方法、重写的equals方法,hash(key)方法,get(key)方法
原创 2022-02-11 01:12:20 · 527 阅读 · 0 评论 -
内部类总结
public class Outer { static String name = "outer"; //成员内部类 public class Inner1{ void doit(){ System.out.println("成员内部类"); } } //静态内部类 public static class Inner2{ void doit(){ Sys原创 2022-01-20 22:05:17 · 151 阅读 · 0 评论 -
线程——synchronized到底锁的是什么
修饰非静态方法:锁的是调用这个方法的对象可以看到begin()和end()方法使用synchronized关键字,存在两个线程调用同一个对象thing。执行过程:thing调用begin(),锁thing,begin()完成,释放thing,thing调用end(),锁thing,end()完成,释放thin结果:更改后可以看到,因为每个线程都是new的新对象thing,分别调用begin和end锁的对象也就不同了,所以begin不会阻塞end方法再次修改:将end方法的synchroni原创 2022-01-20 20:18:05 · 77 阅读 · 0 评论 -
jvm内存模型
1.方法区 method area2.堆 heap3.java栈 stack4.本地方法区 native method area5.程序计数器 pc6.本地方法接口7.执行引擎原创 2022-01-19 00:34:02 · 165 阅读 · 0 评论 -
class文件加载过程
加载:把类的class文件读到内存中,并为其创建Class类对象。链接:(1)验证:确保加载的类信息符合JVM规范(2)准备:为静态变量分配内存并设置类变量默认初始值(3) 解析:符号引用替换为直接引用初始化:(1)执行类构造器方法并且真正初始化类变量...原创 2022-01-18 23:31:34 · 234 阅读 · 0 评论 -
java集合总结
java集合list:1.arraylist:基于数组2.linkedlist:基于链表set:1.hashset:基于hashmap,使用hashcode方法判重2.treeset:基于treemap,使用重写的comparato方法判重,有序map:1.hashmap:基于链表数组,即每个元素都为链表的数组,其中链表元素为node(key,value)。put即放入node过程:先将key值使用hashcode方法求出hash值,然后通过算法将hash值转化为数组下标:如果数组下标没有原创 2022-01-19 02:43:49 · 233 阅读 · 0 评论 -
泛型的总结
泛型类2.泛型类派生子类3.泛型接口4.泛型方法5.类型通配符6.类型擦除7.泛型数组原创 2022-01-16 17:55:26 · 142 阅读 · 0 评论 -
反射的总结
反射概述静态语言&动态语言动态语言动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python等。静态语言与动态语言相对应的,运行时结构不可变的语言就是静态语言。如:Java、C、C++等。Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态转载 2022-01-16 17:45:01 · 142 阅读 · 0 评论