Java基础拾遗

Java基础拾遗

Java停止线程的三种方式

概述:好几天没写总结性博客了,这几天状态有点懈怠,你怎么

2020-04-11
59 0

Java的深拷贝和浅拷贝

首先我们来看一下Object类的clone()方法是怎么样做的:packagejava1;/***@Author:hadoo*@Date:2020/4/211:56*/publicclassPersonimplementsCloneable{//privateIntegerage;privateintage;//阿里规范中规定pojo类中的属性强制使用包装类型,这里只是测试privateStringname;publicPerson(Integerage,Stringname){super();this.age=age;this.name=name;}publicIntegergetAge(){returnage;}publicvoidsetAge(Integerage){this.age=age;}publi

2020-04-02
54 0

构造方法中super()的总结和理解

在类的继承中,子类构造方法中都会默认有一条super()语句,其作用相当于执行了父类构造方法中的语句,我们直接上代码:classExtends_Demo{publicstaticvoidmain(String[]args){Catc=newCat();//---------------(1)System.out.println("-------------------");Catc1=newCat("花花",4);//----------------(2)}}classAnimal{privateStringcolor;privateintfoot;publicAnimal(){System.out.println("我是父类无参数构造器");}pub

2020-04-01
58 0

字符串那些事

1.概述这周就要刷字符串的题目了,上周在阿里笔试的时候由于自己临场的傻缺,在没有使用IDE的情况下忘记了StringBuffer的api调用,所以这里将字符串方面的内容做一个小总结2.String我们都知道String类的底层是一个final类型的char数组,这样婶的:/**Thevalueisusedforcharacterstorage.*/privatefinalcharvalue[];final表明这个字符串一旦被创建之后,只能进行一次赋值,之后便不能修改,如果我们之后对字符串对象进行修改,那么都会在字符串常量池中生成一个新的字符串对象,并返回新的引用,所以我们在经常变动字符串内容的时候尽量不要使用String,这样会产生很多没有被引用的字符串对象,可能会提前触发JVMGC,导致系统性能下降还需要知道

2020-03-30
62 0

ArrayList再探究

1.概述1.问题引出在上一篇文章,主要讲述了为什么ArrayList是线程不安全的,[为什么ArrayList是线程不安全的](https://hadoo666.top/archives/%E4%B8%BA%E4%BB%80%E4%B9%88arraylist%E6%98%AF%E7%BA%BF%E7%A8%8B%E4%B8%8D%E5%AE%89%E5%85%A8%E7%9A%84md)在源码的探究上,也仅仅是到了这个层面:publicbooleanadd(Ee){ensureCapacityInternal(size+1);//IncrementsmodCount!!elementData[size++]=e;returntrue;}甚至连ensureCapacityInternal(size+1);这个方

2020-03-28
61 0

String.intern()的理解

**转载出处:**https://blog.csdn.net/soonfly/article/details/70147205在翻《深入理解Java虚拟机》的书时,又看到了2-7的String.intern()返回引用的测试。其实要搞明白String.intern(),我总结了下面几条规则:一、newString都是在堆上创建字符串对象。当调用intern()方法时,编译器会将字符串添加到常量池中(stringTable维护),并返回指向该常量的引用。二、通过字面量赋值创建字符串(如:Stringstr=”twm”)时,会先在常量池中查找是否存在相同的字符串,若存在,则将栈中的引用直接指向该字符串;若不存在,则在常量池中生成一个字符串,再将栈中的引用指向该字符串。三、常量字符串的“+”操作,编译阶段直接会合成为

2020-03-27
58 0

Java中只有值传递的理解

概述不多BB,直接上题:之前对这个知识点只是有一个经验性的认知,并没有深入的理解,碰到这个题之后我直接就给出了一个错误答案:map中的键值对是<KEY,TRY>,人家try模块下面都有return语句了啊,直接方法返回啊,正确答案是FINALLY这个原理是和方法中的参数传递是一样,也就是不管在finally还是在方法参数中,只有值得传递方法的参数一共有两种,一个是基本数据类型变量,另外一个是引用变量,那么为什么说只有值传递而没有引用传递呢?实际上Java中的引用就是一串长度固定的二进制数值,用来保存对象在内存中的地址,也是一个数值要想比较好的理解,我们还是需要一些JVM知识,每个方法对应Java栈里面的一个栈帧,每个栈帧里面都有自己的局部变量表和操作数栈,而方法参数就是局部变量表中的一部分,当我们调

2020-03-25
53 0

Java中==和equals的理解

====比较的是两个值是否相等,分为两种情况:1.如果作用于基本数据类型的变量,那么就看他们的字面值是否相等2.如果作用于两个引用类型的变量,就比较这两个引用是否指向同一个对象几乎所有的对象都是存放在堆内存中的,而对象的引用变量是存放在栈空间中的,引用变量中存储的就是对象的内存地址,实际上也是长度固定的一组二进制数字,也就是比较两个引用变量中地址的值是否相等equalsequals只能用于对象的比较,基本数据类型不能调用这个方法,除非使用对应的包装类,这是Object类中的一个方法,源码如下:publicbooleanequals(Objectobj){return(this==obj);}我们可以看到,在进行对象的比较时,如果不对这个方法进行重写,实际上比较的还是两个引用变量是否指向同一个对象,也就是比较的还

2020-03-25
59 0

Java常量池的理解和总结

池化技术的好处无论是数据库连接池,还是线程池,或者是现在讨论的Java常量池,使用池化技术的目的无非就是为了避免频繁的创建和销毁对象而影响系统性能,以字符串常量池为例,在编译阶段,就把所有的字符串文字全部放入到Class文件中的常量池中,这样做有两个好处:节省空间:字符串常量池中的字符串只存在一份节省运行时间:因为==要比equals更快,这样才比较两个字符串时就可以直接使用==判断两个引用是否相等,而不用使用equals进行逐一字符的比较1.字符串常量池存在位置在JDK6.0及之前版本,存在于方法区中在JDK7.0中,字符串常量池被移到了堆中,可能是由于方法区的内存不够用了每一个被虚拟机加载的类都对应一个class常量池和运行时常量池,但是字符串常量在JVM中只存在一份,被所有的类共享在JDK6.0及之前版本

2020-03-25
54 0

单例模式是Singleton.md

概述:单例模式用来保证一个类只有一个实例存在,避免对象的重复创建,减少创建对象的时间消耗,如果一个对象可以贯穿整个应用程序,起到统一控制管理的作用,例如线程池,那么单例模式是一个不错的选择。下面介绍单例模式的实现方法:1.饿汉模式publicclassSingleton{privatestaticSingletoninstance=newSingleton();privateSingleton(){}publicstaticSingletonnewInstance(){returninstance;}}类的构造方法定义为private,保证其他类不能实例化此类,然后提供了一个静态实例并返回给调用者。饿汉模式在类加载的时候就创建,优点是只在类加载的时候创建一次实例,多线程同时调用getInstance()方法不会出现线程安全问题,多个线程同时调用不会在内存中创建多个对象,只要调用这个方法就会

2020-03-12
56 0