DAY01(SE)
在JDK低层源码中添加注释或者修改
1、将该√取消选中,表示在调试时可以进入低层源码
2、将jdk源码解压到当前项目根路径下,并修改查看源码时读取的源码的路径,将路径改为自己解压的路径,就可以随意修改源码了。
3、以ArrayList源码为例
第一步
public ArrayList() {
//默认初始化,为一个Objecte的数组
//private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
第二步,添加元素
public boolean add(E e) {
//确定数组容量是否足够,如果不足,则扩容 // Increments modCount!!
ensureCapacityInternal(size + 1); //刚开始,size为0
elementData[size++] = e;
return true;
}
private static int calculateCapacity(Object[] elementData, int minCapacity) {
//第一次添加的时候会将当前elementData数组的长度变为10:
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { //判断是否是一个{}
return Math.max(DEFAULT_CAPACITY, minCapacity);//返回10和minCapacity最大值,即第一次扩容为10,默认值为10
}
return minCapacity;
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;//修改次数modCount 标识自增1,如果当前数组已使用长度(size)加1后的大于当前的数组长度,则调用grow方法,增长数组,grow方法会将当前数组的长度变为原来容量的1.5倍。
// overflow-conscious code
if (minCapacity - elementData.length > 0)//判断是否需要扩充数组长度,判断条件就是用当前所需的数组最小长度与数组的长度对比,如果大于0,则增长数组长度。
grow(minCapacity);
}
扩容算法
将当前数组的长度扩容1.5倍
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);//将数组长度右移1位也就是除以2,然后加上数组长度,也就是扩容1.5倍
if (newCapacity - minCapacity < 0) //如果新计算得到的容量小于传过来的容量,就以传过来的值为大小
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);//数组拷贝
}
将元素添加到数组下标为0的位置
Java核心技术(基础巩固)
1、

2、数据类型
-
8种基本数据类型:4种整型,2种浮点型,一种字符型(用Unicode编码),一种布尔型
“大数类型”big number,能够表示任意精度的算术包,是对象类型
-
在java中,所有的数值类型所占的字节数与平台无关
-
java整型
类型 存储需求 取值范围 int 4字节 -2的31次方–2的31次方(4*8=32,又因为是有符号所以是2的31次方) short 2字节 -32768–32768 long 8字节 -2的63次方–2的63次方 byte 1字节 -128–127 -
判断是不是一个Double,可以使用Double.isNaN(x)
-
强烈建议不要在程序中使用char类型,除非需要处理UTF-16代码单元(一个字符的长度为16为,则为一个代码单元),否则使用String作为抽象数据类型处理。
-
在java中布尔类型不可以与整型转换,而C++ 可以
3、变量
- 声明变量尽量不要在一行中声明多个变量,逐一声明可以提高可读性
- 变量的声明,尽可能的靠近第一次使用该变量的地方
- 全局变量有初始化值,局部变量没有,需要显示初始化
- Java10开始,对于局部变量,如果可以从变量的初始化值推断它的类型,则声明时可以使用var关键字而无需指定类型。
4、运算符
- 整数被零除,会发生异常,而浮点型被零除会得到无穷大或者NaN结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗