
Java知识总结
姜毛毛-JYM
这个作者很懒,什么都没留下…
展开
-
getInstance和new的区别
getInstance与new的区别原创 2022-08-23 09:32:44 · 690 阅读 · 0 评论 -
匿名内部类
匿名内部类匿名内部类:匿名内部类要不然是实现了接口,要不然是继承了抽象类作用:为啥要匿名内部类,因为有的类方法里面的参数是接口或者抽象类类型的,因为接口和抽象类本身不能创建实例化对象,所以如果没有匿名内部类,就需要对其进行继承或实现,然后再创建继承和实现后的类对象,作为方法的参数。但是如果我们有匿名内部类,只需要在参数的位置:A.Test(new B(){实现抽象方法;});就可以了。...原创 2021-09-15 16:43:07 · 177 阅读 · 0 评论 -
JVM的类加载机制
启动类加载器(Bootstrap)//启动类加载器加载了什么public class ClassLoaderTest { public static void main(String[] args) { URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for(URL url:urls) { System.out.println(url.toExternalForm()); } }}..原创 2021-07-09 21:08:12 · 80 阅读 · 0 评论 -
JVM的类加载机制
启动类加载器(Bootstrap)//启动类加载器加载了什么public class ClassLoaderTest { public static void main(String[] args) { URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for(URL url:urls) { System.out.println(url.toExternalForm()); } }}...原创 2023-04-16 17:43:20 · 99 阅读 · 0 评论 -
HashMap和HashTable的区别
HashMap1、没有synchronized修饰线程非安全2、允许key,value值为nullHashTable1、线程安全2、不允许键值对为nullHashMap的底层实现:数组+链表jdk8开始链表到8,数组长度超过64,链表转化为红黑树,元素以内部类node节点存在。...原创 2023-04-16 17:43:06 · 104 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList1、基于动态数组(如果在下标越界的时候,会新建一个数组,底层默认数组大小为10,将老数组内容存放到新数组中,扩容机制为1.5倍),连续的内存地址,适合下标访问。2、适合做查询,不适合做插入和查询。3、使用尾插法,并指定初始数组容量可提高性能。LinkedList1、基于链表,可以分散的存储在内存中。2、适合做数组插入和删除,不适合做查询。3、遍历只可以使用迭代器,和强制for,不可以使用for循环,因为每次for循环体内取得get(i)取得某一元素时都需要对l..原创 2021-07-09 11:14:24 · 58 阅读 · 0 评论 -
HashCode和equals
hashcode在new一个新对象的时候,java实际分为几个步骤:1、生成hashcode的值2、根据hash寻址算法找到对应的物理地址3、如果当前位置没有值,那么将对象存入4、如果有通过equals比较对象是否相同5、如果相同,不存入6、如果不同,在这里建立链表,将对象存入String a = new String(“Aa”);String b = new String(“BB”);//hashcode的值都是2112,所有会建立链表hashcode的优势:,没有ha..原创 2021-07-09 10:37:36 · 94 阅读 · 0 评论 -
HashCode与equals
HashCode:HashCode()的作用是获取哈希码,也称散列码,返回值是一个int型的整数。以 java.lang.Object来理解,JVM每new一个Object,它都会将这个Object丢到一个哈希表中去,这样的话,下次做Object的比较或者取这个对象的时候,它会依据对象的hashcode再从Hash表中取这个对象。这样做的目的是提高取对象的效率。equals...原创 2023-04-16 17:30:05 · 73 阅读 · 0 评论 -
List和Set的区别
List:有序,按对象进入的顺序保存对象,可重复,允许多个null元素对象,可以使用iterator迭代取出所有元素,也可以使用get(int index)取出指定下标的元素。List<String> list = new ArrayList<String>(); for(int i=0;i<list.size();i++) { System.out.println(list.get(i)); }for(String s : list) { S..原创 2021-07-08 10:57:28 · 148 阅读 · 0 评论 -
重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数列表不同(类型,个数,顺序),方法返回值和访问修饰符可以不同,发生在编译时。public int add(int a,String b) {}public String add(int a,String b) {}//编译会报错重写:发生在父子类中,方法名和参数列表必须相同返回值范围可以小于等于父类抛出的异常范围也要小于等于父类访问修饰符范围要大于等于父类如果父类方法时private,final时,子类不可以重写...原创 2021-07-07 19:25:17 · 60 阅读 · 0 评论 -
String、StringBuffer、StringBuilder区别及使用场景
String:final关键字进行修饰,不可变,每次对字符串的改造其实都是在创建新的String对象StringBuffer:在原对象上进行操作线程安全(多线程,共享变量,结果不受影响),加了synchronized进行修饰StringBuilder:在原对象上进行操作线程不安全性能:StringBuilder>StringBuffer>String场景:经常要改变字符串内容的情况使用StringBuffer,StringBuilder。优先使用StringBuil原创 2021-07-07 19:14:56 · 202 阅读 · 0 评论 -
final关键字
修饰类:表示类不可以被继承修饰方法:表示方法不可以被子类重写(即不可扩展),但可以在类内重载修饰变量:表示变量一旦被赋值,就不可以更改它的值1、修饰成员变量(1)修饰类成员变量在声明时就需要被赋值,或者静态代码块赋值。(2)修饰成员变量在声明时就需要被赋值,或者代码块赋值,或者构造器赋值。2、修饰局部变量fianl修饰局部变量,不赋值不会报错,但使用前一定要赋值。public class FianlVar { //final修饰类成员变量 final static int a=0.原创 2021-07-07 18:59:29 · 66 阅读 · 0 评论 -
==与equals
==:比较的是栈中的值。基本数据类型存储在栈中,引用类型变量名存储在栈中(只保存其在堆中的地址信息),实际的数据存储在堆中。所以,基本数据类型“”比较的是变量值,引用类型“”比较的是地址。equals????*如果没有重写底层默认使用的也是“==”的比较方式。**String类型已经默认重写了equals方法(就是把字符串中每个字符取出来对比一下),所以即便String是引用类型,equals比较的也是变量值。public class StringDemo { public static void原创 2021-07-07 17:59:52 · 74 阅读 · 0 评论 -
JDK、JRE、JVM三者区别和联系
JDK:(Java Development Kit),Java开发者工具。Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。JRE:( Java Runtime Environment) ,Java运行时环境。普通用户只需要安装JRE就可以运行Java程序。下图是JRE的安装目录:里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jr原创 2021-07-07 17:36:38 · 529 阅读 · 0 评论 -
Java面向对象(什么是面向对象,谈谈对面向对象的理解)
面向对象和面向过程的区别面向对象更注重事件中有哪些参与者,这些参与者各自需要做什么;面向过程更注重事件发生的顺序及步骤。例子:大象放冰箱需要几步面向过程:打开冰箱门-把大象放进去-关闭冰箱门面向对象:大象:进入冰箱冰箱:开门、关门面向对象更容易复用、扩展、维护;面向过程更加直接高效。面向对象的三大特征封装:内部属性对外部调用透明,外部调用无需修改或关心内部实现。1.JavaBean属性私有,提供get/set对外访问,因为属性的获取和赋值逻辑只能由JavaBean本身决定,而不能由外原创 2021-07-07 17:19:46 · 299 阅读 · 0 评论