随笔分类 - Java
摘要:Junit下使用Mock进行单元测试的注意点(待补充) 编写测试方法前 不要使用@Autowired注入待测试类,使用@InjectMocks。 @Autowired会启动Spring,导致单元测试运行速度变慢。 如果待测试类中有读配置文件的全局变量,@Autowired会自动读配置,可能在环境上造
阅读全文
摘要:JUnit单元测试小结 单元测试关注单一的类,目的:检查这个类中的代码是否按照期望正确运行。 基本概念 单元测试 在单元测试中, 我们需要保证被测系统是独立的, 即当被测系统通过测试时, 那么它在任何环境下都是能够正常工作的。编写单元测试时, 不需要关注例如数据库服务, Web 服务等组件。 被测系
阅读全文
摘要:asList()方法可以将数组转换成list对象 List<String> list = Arrays.asList("a","b","c"); 但是这个方法只适用于对象型数据的数组,如String、Integer等包装类,且不支持add()、remove()、clear()等方法 同时这个方法转换
阅读全文
摘要:Thread中sleep函数的作用是让该线程进入休眠状态,让出cpu的执行时间给其他进程,该线程休眠后进入就绪队列和其他线程一起竞争cpu的执行时间。 所以sleep(0)的作用就是让该线程立即从运行阶段进入就绪队列而非等待队列,释放cpu时间,可以让操作系统切换其他线程来执行,提升效率。 总得来说
阅读全文
摘要:Java的线程创建有两种方法:继承Thread类和实现Runnable接口。 这二者最明显的区别是:java不能多继承类,因此可以在实现了Runnable接口后再继承其他类,但继承Thread类后不能继承其他类。 其二是:Runnable可以很容易的实现多线程资源共享,而Thread类不适合。 Th
阅读全文
摘要:子类继承父类时对父类方法的重写: 1.父类为普通类(不含抽象方法) 可重写可不重写 2. 父类为抽象类(含抽象方法) 1)子类是一个抽象类,并不要求重写父类中的方法 2)子类不是一个抽象类,要求重写父类中的抽象方法 3. 父类为接口 1)子接口,可以扩展父接口的方法 2)子抽象类,可以部分或全部实现
阅读全文
摘要:区别 array arraylist 长度 固定 可变,默认为10,不足时以2倍扩充 存放数据的类型 对象类型和基本数据类型 只能存放对象类型数据,基本数据类型数据只能存放其包装类 使用方法 只能通过下标对指定位置元素进行变更 在array基础上新增了很多功能方法,如remove,add,conta
阅读全文
摘要:浅拷贝只增加了一个指向原对象地址的指针。 如果原地址内容发生改变,浅拷贝出的对象也会相应改变。 释放内存时会因为浅拷贝出现释放同一个内存的问题。 深拷贝开辟了一块新内存地址用于存放复制的对象。 如果原地址内容发生改变,深拷贝出的对象不会改变。 深拷贝相比于浅拷贝速度较慢并且花销较大。
阅读全文
摘要:总结来说就是两点 1. 保证是同一个对象,如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。 2. 使用hashcode方法提前校验,可以避免每一次比对都调用equals方法,提
阅读全文
摘要:HashMap的数据存储结构是一个 Node<K,V> 数组,每一个Node包含一个key-value键值对。(Java 7 中是 Entry<K,V> 数组,但结构相同) 它的存储结构是数组加链表的形式,如下图。 数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的, 如果定位到的数组
阅读全文
摘要:1. ArrayList 实现了基于动态数组的数据结构,LinkedList 是基于链表的数据结构。 2. 对于随机访问 get 和 set,ArrayList 优于 LinkedList,因为 LinkedList 要移动指针(如 get 的时间复杂度分别为O(1)和O(n))。 3. 对于新增和
阅读全文
摘要:一. 基本用法 在Java中,final 关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。 1.1 修饰类 用 final 修改类时,该类无法被继承。要注意 final 类中的所有成员方法都会被隐式地指定为 final 方法。 1.2 修饰方法 使用 final 修饰方法时,这个方法将成
阅读全文
摘要:一. 为什么要使用 synchronized 在并发编程中存在线程安全问题,主要原因有: 1. 存在共享数据 2.多线程共同操作共享数据。 关键字 synchronized 可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时 synchronized 可以保证一个线程的变化可见(可见
阅读全文
摘要:(1)抽象:(类的构造) 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 (2)继承:(对父类和方法的复用) 继承是一种联结类的层次模型,并且允许
阅读全文
摘要:Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 1. 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 2. 类可以实现很多个接口,但是只能继承一个抽象类 3. 类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
阅读全文
摘要:类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。 从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制
阅读全文
摘要:Java 中的常量池是JVM内存模型中方法区的一部分。JVM内存模型如下: 方法区是jvm里线程共享的一部分内存,主要放,存储已被虚拟机加载的类信息,常量,静态常量,即编译器编译后的代码数据等。也称为永久代,就是放一些不会经常改变的东西。 Java中的常量池,实际上分为两种形态:静态常量池和运行时常
阅读全文
摘要:Java 内部类 即在一个类的内部再定义一个类。 public class OuterClass { private String name ; public String getName() { return name; } public void setName(String name) { t
阅读全文
摘要:简而言之,equals()比较的是两个对象的内容是否相等; == 比较的是两个对象的内存地址是否相同。 详解: equals()比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象。 如果没有对该方法进行覆盖的话,调用的仍然是Object类中
阅读全文
摘要:ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下: import java.util.
阅读全文