java学习记录
文章平均质量分 69
静-修
我是一个善良、活泼开朗的小伙子;喜欢打篮球、游泳、跑步、阅读、旅游等;热爱编程,注重理论实践相结合的检验——千里之行,始于足下
展开
-
简述Arrays.asList警示
asList方法顾名思义:转换为集合,接收的是Object变动参数——Arrays.asList(Object... a) 示例: import java.util.Arrays; import java.util.List; public class Test47 { public static void main(String[] args) throws Exception { int[] data = {5, 4, 3, 2, 1}; ...原创 2021-03-19 11:54:15 · 215 阅读 · 0 评论 -
同父不同子类集合可判断该元素组是否相等
同父不同子类判断集合是否相等时只关注元素是否相等,无需考虑子类类型,即同调父类AbstractList里的equal方法 源码如下: public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof List)) return false; ListIterator&l...原创 2021-03-19 10:22:58 · 133 阅读 · 0 评论 -
yield与join的区别
yield()让当前线程状态改为可运行状态,和其它线程一起竞争资源 代码示例如下: public class Test68 extends Thread { @Override public void run() { for (int i = 1; i <= 5; i++ ) { try { Thread.sleep(500); } ...原创 2021-03-19 10:02:46 · 2078 阅读 · 0 评论 -
Java的反射机制简介
Java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。 注:每个类被加载之后,系统都会为该类生成一个对应的Class对象,通过Class对象就可以访问到JVM中该类的信息,一旦类被加载到JVM中,同一个类将不会被再次载入。被载入JVM的类都有一个唯一标识就是该类的全名(包名和类名)。 获取Class类对应有 1、使用Class类的静态方法forName(Strin...原创 2021-03-19 09:27:04 · 108 阅读 · 0 评论 -
线程主内存和工作内存交互
在java的内存模型中每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问摸一个对象时的值时,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,并建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值再回写到对象在堆中变量,在堆中的对象的值就产生了变化 参照来源:《黑马程序员面试宝典(java).pdf》 ...原创 2021-03-18 17:52:53 · 173 阅读 · 1 评论 -
集合List、Map、Set简介
List的三个子类的特点 ArrayList底层结构是数组,查询快,增删慢。 LinkedList底层结构是链表型,增删快,查询慢。 Vector底层结构是数组,线程安全,增删慢,查询慢。 List、Map、Set的区别 List和Set是存储单例数据的集合,Map是存储键和值这样的双列数据的集合;List中存储的数据是有顺序并允许重复的;Map中存储的数据是没有顺序且键值是不允许重复的;Set中的存储数据是没有顺序且不允许重复的,但元素在集合中的位置由元素的hashcode决定,位置是固定的(Set原创 2021-03-18 17:36:44 · 269 阅读 · 1 评论 -
java之静态加载和动态加载类(隐式和显式)
java语言是先把Java源文件编译成后缀为class的字节码文件,然后再通过ClassLoader机制把这些类文件加载到内存中,最后生成实例执行 静态加载:程序编译时就自动加载所有的类 对象的生成一般经过两个步骤: 1、加载到内存中生成Class的实例对象 2、通过new关键字生成对象 动态加载:程序运行时通过Class.forName方法进行动态加载,加载类的过程中会初始化该类的static变量和代码块等,非static类型对于forNam...原创 2021-03-18 17:25:18 · 781 阅读 · 0 评论 -
new和clone的区别
new操作符的本意是分配内存。程序执行到new操作符时,首先去看new操作符后面的类型,因为知道了 类型,才能给它分配多大的内存空间。分配完内存后就调用构造函数进行填充对象的各个域,这一步 叫对象的初始化,构造方法返回后,一个对象创建完毕,就可以把他的引用(地址)发布到外部,在 外部就可以使用这个引用操纵这个对象。 clone在第一步是和new相似的,都是分配内存,调用clone方法时,分配的内存和原对象(调用clone 方法...原创 2021-03-18 17:09:04 · 667 阅读 · 1 评论 -
多线程java.util.concurrent包简介
java.util.concurrent包描述(java1.5版本引入) 在并发编程中很常用的实用工具类。此包包括了几个小的、已标准化的可扩展框架,以及一些提供 有用功能的类。其中包括:1、执行程序(线程池);2、并发队列;3、同步器;4、并发Collocation 线程池的作用就是限制系统中执行线程的数量。 ThreadPoolExecutor线程池中的corePoolSize核心线程数,maximumPoolSize可拓展的最大线程数, keepAliveTime(超过corePo...原创 2021-03-18 17:00:18 · 321 阅读 · 1 评论 -
synchronized和Lock或volatile的区别
java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域, 这些区域都有各自的用途,创建和销毁时间 图: 程序计数器是一个较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行 号指示器,其中字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的 字节码指令(分支、循环、跳转、异常处理、线程恢复等基础功能),由于java虚拟机的多 线程是通过线程轮流切换并分配处理器执行时间的方法来实现的...原创 2021-03-18 16:55:14 · 655 阅读 · 1 评论 -
使用Map进行的封装拼接sql语句
import java.util.*; public class SQLDemo { public static String sqlCommon=""; //模拟写sql语句 public static String querySQL(Map<String,Object> map,String tableName){ //map若有参数查询则...原创 2019-03-29 11:32:40 · 1526 阅读 · 0 评论 -
简述多种形式遍历(迭代)用法
import java.util.ArrayList; import java.util.List; public class MutilIterationDemo { public static List<String> list=null; public static void main(String[] args) { //添加数据 ...原创 2019-03-29 11:30:58 · 475 阅读 · 0 评论 -
Date、System、Calendar获取当前时间毫秒
Date、System、Calendar三个类都可以获取getTime方法,若要考虑性能,应选哪一个才比较合适呢? 如下代码模拟所示: public class Test35 { public static void main(String[] args) { long time = 0L; // 执行函数SCTM time =...原创 2019-03-29 11:09:30 · 1441 阅读 · 0 评论 -
简述String、StringBuilder、StringBuffer三者的区别
运行速度:StringBuilder>StringBuffer>String String是常量,一旦创建不可更改,在代码中模拟是累加字符串,实际上是JVM回收该对象,并重创建对象来重新赋值(假象) String str="hello"; str=str+"world"; StringBuilder stringBuilder=new StringBuilder().append("h...原创 2019-03-29 11:11:49 · 396 阅读 · 0 评论 -
简述map之遍历用法
hashMap和hashTable的区别(都是实现Map的接口) 1、特点(hashMap允许key和value为空,但key具有唯一性,速率快,非线程安全、hashTable,线程安全、速率慢--加锁等待耗时间) 2、简单介绍keySet()、values()、forEach()、entrySet()进行遍历及源码 public class Test22 { pu...原创 2019-03-29 11:14:48 · 394 阅读 · 0 评论 -
简述equals和==的区别
public class StaticDemo { public static void main(String[] args) { /** * 1、包装类的“==”运算在未遇到算术运算的情况下不会自动拆箱(堆中存储的地址是否相同,即栈中的内容是否相同) * 2、equals()方法不会处理数据类型转换关系(同一个对象的引用,即堆中的内容...原创 2019-03-29 11:18:12 · 1266 阅读 · 0 评论 -
JUnit4单元测试的两种形式
特点: JUnit 是一个开放的资源框架,用于编写和运行测试。 提供注释来识别测试方法。 提供断言来测试预期结果。 提供测试运行来运行测试。 JUnit 测试允许你编写代码更快,并能提高质量。 JUnit 优雅简洁。没那么复杂,花费时间较少。 JUnit 测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果...原创 2019-03-29 11:22:05 · 574 阅读 · 0 评论 -
java笔记分享
一、java能做什么 除了硬件设备接口之外,所有PB/VB/C#/Delphi等高级语言能做的事情,Java都能做,而且因为JAVA具有丰富的开源项目,还具有广大高级语言所不能做的事情,主要包括如下几大应用: WEB应用开发类:包括门户、企业管理系统、行业应用等,JAVA是WEB应用开发首先。 TCP/IP通信类:如QQ,TCP/IP接口 用户界面类:Java具有强大的...原创 2019-03-29 11:25:12 · 190 阅读 · 0 评论 -
垃圾收集器
1、哪些内存需要回收? 2、什么时候回收? 3、如何回收? "自动回收" 当需要排查各种内存溢出、内存泄露问题时 当垃圾集成为系统达到更高并发量的瓶颈时 引用计数算法 假设方案一:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值 就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不可能再...原创 2019-04-02 17:54:12 · 68 阅读 · 0 评论 -
简述JVM解释器与编译器的区别
JAVA编译器(javac.exe)的作用是将java源程序编译成中间代码字节码文件,是最基本的开发工具JAVA解释器(java.exe)(英语:Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻...原创 2019-04-02 17:56:49 · 3316 阅读 · 2 评论 -
方法的重载则优选基本数据形参类型
前言:对于形参是基本类型或包装类型而已,方法的重载会优先选择基本类型。 如下代码所示: =======================BaseType============================ public class BaseType { public void f(long index) { System.out.println(...原创 2019-03-29 11:04:26 · 176 阅读 · 0 评论