java-基础
xinyihhh
这个作者很懒,什么都没留下…
展开
-
ThreadLocal
ThreadLocal类是为了实现让每一个线程拥有自己的本地专属变量如果创建了一个ThreadLocal变量,那么访问这个变量的所有线程都会有这个变量的本地副本,并可以使用get()或set()方法来获取默认值或者将其值修改为当前线程所存副本的值,避免线程安全问题。ThreadLocal变量定义:线程修改结果:ThreadLocal原理:Thread类中有ThreadLocalMap类型的变量,所以每个线程都拥有一个ThreadLocalMap,当线程调用ThreadL...原创 2022-02-22 12:00:49 · 115 阅读 · 0 评论 -
浮点型数据的MIN_VALUE
Double、Float里的最小值是非0非负的最小值,需要最小值只需 -MAX_VALUE即可,负的最大值是-MIN_VALUE。原创 2022-03-04 10:33:12 · 340 阅读 · 0 评论 -
线程状态转化
线程调用start()方法进入ready状态,获得cpu后进入running状态; Sleep() 线程,释放CPU,不会释放对象锁,进入Time_Waiting状态,结束后,进入ready状态,等待CPU时间片; wait()导致线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入ready状态Wait()和notify()方法只能从synchronized方法或块中调用,需要在其他线程正在等待的对象上调用notify方法 s原创 2022-02-25 20:23:22 · 124 阅读 · 0 评论 -
序列化和反序列化
序列化理解起来很简单 - 知乎 (zhihu.com)定义序列化:把对象转化为可传输的字节序列过程称为序列化。反序列化:把字节序列还原为对象的过程称为反序列化。目的序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组Java 是如何实现序列化要实现Serializable 接口public class User implements Serializable{ //年龄 priv.转载 2022-02-25 10:46:15 · 129 阅读 · 0 评论 -
try-catch-finally
代码段首先进入try语句,因无异常抛出,代码将要return的内容保存在内存中,然后执行finally,因finally中无可执行内容,再转回try中执行return,整个代码段执行结束,而finally后面的return是不会执行的注:如果finallly中有return,程序在这里就会退出,不会再返回try中执行return...原创 2022-02-25 09:51:18 · 149 阅读 · 0 评论 -
hashMap的扩容机制
capacity 即容量,默认16。loadFactor 加载因子,默认是0.75(3/4,与容量相乘总是整数;设置太小频繁扩容,浪费空间;设置太大碰撞的概率高,查询效率慢)threshold 阈值。阈值=容量*加载因子。默认12。当元素数量size超过阈值时便会触发扩容。空参数的构造函数:实例化的HashMap默认内部数组是null,即没有实例化。第一次调用put方法时,则会开始第一次初始化扩容,长度为16。 有参构造函数:用于指定容量。会根据指定的正整数找到不小于指定容量的2的幂数,.原创 2022-02-24 15:28:11 · 1689 阅读 · 3 评论 -
hashCode()在HashMap中的作用
hashCode()返回值为int类型,它的作用是获取哈希码,也称散列码;哈希码的作用是确定对象在hash表中的位置;任何类都有hashCode()方法在HashMap中,通过计算元素key的哈希码经过扰动函数(指HashMap的hash方法,作用是防止一些实现比较差的hashCode()方法,减少碰撞)处理后得到hash值,然后通过hash&(n-1)判断当前元素存放的位置,n指的是数组长度;为什么HashMap的长度是2的幂次方?确定元素下标位置时,首先想到hash%length;只原创 2022-02-24 14:58:24 · 900 阅读 · 0 评论 -
抽象类和接口
定义抽象类:被关键字 abstract 修饰的类称为抽象类 ( abstract class)接口:是抽象方法的集合,接口通常以interface来声明接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为public abstract(只能是 public abstract,其他修饰符都会报错)。 接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量(并且只能是 public,用 private 修饰会报编译错误)。相同点 都...原创 2022-02-24 11:25:04 · 158 阅读 · 0 评论 -
String,StringBuilder,StringBuffer
String是不可变的,因为String类底层使用的是final修饰的数组,jdk9之前是private final char[] value,之后是private final byte[] valueStringBuilder,StringBuffer是可变的,因为他们都继承于AbstractStringBuilder,在AbstractStringBuilder中字符数组没有被final修饰;StringBuilder,StringBuffer的构造方法都是调用AbstractStringBui..原创 2022-02-24 10:00:55 · 262 阅读 · 0 评论 -
java中的this和super
Java中this和super的用法总结 - codersai - 博客园 (cnblogs.com)super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名super.成员函数据名(实参),实际上调用的是父类对象) this:它代...转载 2022-02-23 16:51:00 · 117 阅读 · 0 评论 -
java中静态方法只能继承不能被重写
重写只能适用于可观察的实例方法,如果子类有和父类相同的静态方法,那么父类的静态方法将会被隐藏,对于子类不可见,也就是说,子类和父类中相同的静态方法是没有关系的方法,他们的行为不具有多态性// 该类测试静态方法为什么不能被重写public class Test1_Static { public static void main(String[] args) { Father f = new Father(); f.staticMethod();转载 2022-02-23 16:35:46 · 424 阅读 · 0 评论 -
java枚举(enum)
自定义枚举类1. 私有化类的构造器,保证不能在类的外部创建其对象2. 在类的内部创建枚举类的实例。声明为:public static final3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化class Season{ private final String SEASONNAME;//季节的名称 private final String SEASONDESC;//季节的描述 private Season(String season原创 2022-02-02 17:45:17 · 127 阅读 · 0 评论 -
ArrayList扩容机制
ArrayList类的属性 // 数组默认初始长度 private static final int DEFAULT_CAPACITY = 10; //空数组 private static final Object[] EMPTY_ELEMENTDATA = {}; // 默认空数组 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /..原创 2022-01-25 21:32:20 · 2130 阅读 · 0 评论 -
成员变量,成员方法(包含实例变量和实例方法;类变量和类方法)
一个类方法体之外的成员变量有两种实例变量和静态变量/类变量(static修饰)String name; //成员变量,实例变量static String name="小明";//成员变量,静态变量(类变量)成员方法也有实例方法和静态方法/类方法(static修饰)public int x() { //该方法为实例方法 return x; } public static void setX(int x1){ //该方法为类方法原创 2022-01-16 16:26:27 · 404 阅读 · 0 评论 -
javap反编译
先写一个简单的类class JavaBean implements Comparable{ private int value = 1; public String s = "abc"; public final static int f = 0x101; public void setValue(int v){ final int temp = 3; this.value = temp + v; } public i原创 2022-01-16 14:35:58 · 657 阅读 · 0 评论 -
collection.toArray(new String[0])
Collection的公有方法中,toArray()是比较重要的一个。但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]。 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了。而把Object[]给cast成 String[]还是很麻烦的,需要用到这个:String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].cla转载 2021-12-03 16:18:26 · 396 阅读 · 0 评论