Java 基础
文章平均质量分 69
Java基础语法、设计模式、常用类和功能模块使用及实现原理介绍。
gary-liu
Like technology, like recording life. Since I went to a foreign company, I have to use English to quickly integrate it. WeChat Offical account: gary_foreign
展开
-
ArrayList 和 LinkedList
其实数组和链表是最基本的数据结构,栈、队列、树、图都是在这两个基本结构的基础上去实现的。java中常用的数组和链表实现是ArrayList 和 LinkedList。ArrayList该类通过transient Object[] elementData; 保存数据,默认大小是10,类的继承关系图add操作末尾插入和在某个位置插入public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments mo原创 2020-11-21 17:07:03 · 233 阅读 · 1 评论 -
Java——NIO浅析
Java NIO: Non-blocking IO(非阻塞IO)一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。NIO解决的问题解决线程池处理海量连接的瓶颈,包括利用面向事件的方式编写服务端/客户端程序。核心组成Channels(通道)标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer原创 2020-10-07 11:49:05 · 313 阅读 · 0 评论 -
java——CurrentHashMap
什么时候使用CurrentHashMap在多线程并发向HashMap中put数据时,就需要把HashMap换成ConcurrentHashMap。因为多线程环境下,使用HashMap进行put操作resize会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap.线程安全的使用map结构可以使用HashTable和CurrentHashMap,HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为同步机原创 2020-10-05 12:17:19 · 3314 阅读 · 0 评论 -
Java——JMM 内存模型
JMM 内存模型java内存模型(JMM)是线程间通信的控制机制.JMM定义了主内存和线程之间抽象关系。线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。Java内存模型的抽象示意图如下:jvm内存结构1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫原创 2020-10-05 10:56:49 · 217 阅读 · 1 评论 -
Java——classloader 类加载
Java——classloader 类加载类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java 语言的运行时绑定(也成为动态绑定或晚期绑定)。加载加载时类加载的第一个过程,在这原创 2020-10-05 10:41:45 · 315 阅读 · 1 评论 -
Java——HashMap
HashMap结构它是基于哈希表的 Map 接口的实现,HashMap实现了Map接口,继承AbstractMap。其中Map接口定义了键映射到值的规则(一个map不能包含重复的key,每个key最多只能对应一个value,HashMap最多只允许一条记录的键为null,允许多条记录的值为null。),而AbstractMap类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作,其实AbstractMap类已经实现了Map。默认容量(哈希表桶的数量)和装载因子是16和0.75,也就是元素原创 2020-07-15 02:54:44 · 190 阅读 · 0 评论 -
反编译Java class文件
需求有时需要确认自己的改动在服务器上是否已经部署,最可靠的办法就是将代码反编译对比看下反编译一般部署到服务器上的Java应用会打成 jar 包,此时可以先解压 jar xvf xxx.jar然后找到对应的class文件反编译 javap xxx.class 一般要找到javap 命令的路径,可以用 ps -ef|gerp java 找到jdk 的安装目录找到 javap 命令的位置使...原创 2019-10-27 00:24:39 · 1897 阅读 · 0 评论 -
java虚拟机基础知识
JDK未来的功能规划:Lambda项目(Lambda表达式,函数式编程(函数式编程的优点是程序天然的适合并行运行))、Jigsaw项目(虚拟机模块化支持,但是业界其实再用OSGi ),动态语言支持(以后更流行混合式编程,Jython等,但是这方面还有很多不足,c++、Java是静态语言)运行时数据区域:程序计数器:java的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的。为原创 2014-08-12 23:03:48 · 1301 阅读 · 0 评论 -
java 在dos窗口下运行命令
1.建立的文件名必须和类名一样2.定义一个类,写main函数3.将文件编译为字节码文件命令 javac Test.java4.运行文件命令 java Test原创 2015-09-21 23:33:34 · 1940 阅读 · 0 评论 -
Java 注解(Annotation)
什么是注解(Annotation): 注解是 Java 5 的一个新特性。注解是插入你代码中的一种注释或者说是一种元数据(meta data)。这些注解信息可以在编译期使用预编译工具进行处理(pre-compiler tools),也可以在运行期使用 Java 反射机制进行处理。(来自极客学院)注解作用生成文档。常用的有@see @param @return 等跟踪代码依赖性,实现替代配置文件原创 2016-06-21 00:03:04 · 833 阅读 · 0 评论 -
Java native 关键字
Java native 关键字今天在看Thread类,启动线程用的 start()方法,该方法使线程开始执行,jvm 调用这个线程的run方法。(线程不能重复start),而 start()方法中又调用了 native start0()方法,该方法没有实现体,其实现体是由非java语言在外面实现的,JVM将控制调用本地方法的所有细节。Object 类中也有很多 native 方法。JNIJava N原创 2016-08-11 23:10:33 · 902 阅读 · 0 评论 -
Java——Exception
异常情形是指阻止当前方法或者作用域继续执行的问题。比如用户输入了非法数据、要打开的文件不存在、网络通信时连接中断,或者JVM内存溢出等都可能导致异常。通过后面的异常类型和常见异常的介绍,可以知道产生的异常的原因有很多,有可能是用户不当的操作或者程序中的逻辑错误,也有可能是JVM等物理错误产生的。异常类型检查性异常最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存原创 2016-10-04 19:09:26 · 838 阅读 · 0 评论 -
Java——GC(垃圾回收)
垃圾回收机制的意义C++程序员非常头疼的一个问题就是内存管理,而垃圾回收机制使得Java程序员不用关心内存动态分配和垃圾回收的问题,交由JVM去处理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个原创 2016-10-05 14:36:09 · 1323 阅读 · 0 评论 -
Java——main函数
Java 写了这么久,终于想了解下 main 函数了。main 函数作用在 java 中,main() 方法是 java 应用程序的入口方法。java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被java虚拟机装载。如果没有装载,那么就装载该类,并且装载所有相关的其他类。因此程序在运行的时候,第一个执行的方法就是main()方法。通常情况下, 如果要运行一个类的方法,原创 2017-02-16 02:05:21 · 910 阅读 · 0 评论 -
Java——反射
什么是反射?反射(Reflection)能够让运行于 JVM 中的程序检测和修改运行时的行为。Class 类在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。虚拟机利用运行时信息选择相应的方法执行。可以通过专门的Java类访问这些信息,保存这些信息的类被称为 Class。 将 Class 类中的 forName 和 newInstance 配合使用,可以根据存储在字原创 2017-02-16 02:17:45 · 682 阅读 · 0 评论 -
Java——IO流
流的理解在很多时候,流(Stream)是字节流(Byte Steram)的简称,也就是长长的一串字节,当然,除了字节流,我们还可以有视频流、音频流、数据流。流只有一个特征就是连续,流可以没有头可以没有尾,甚至可能没有绝对的位置(因为无头无尾),但是由于流是连续的,所以有相对位置。但也有人更倾向于流是类库或执行环境中的数据流概念,而不是编程语言里的概念。这种“流”的典型代表好比Java里的InputS原创 2017-02-18 17:16:14 · 942 阅读 · 0 评论 -
Base64简介
Base64编码介绍Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。比如三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。完整的base64定义可见RFC 1421和RFC 2045。编码后的数据比原始数据略长,为原来的4/3。所以当原有数据不是3字节的倍数时,会将二进制数据原创 2017-03-11 13:34:34 · 934 阅读 · 0 评论 -
设计模式——责任链模式
模式介绍责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。模式的优缺点优点1.因为客户端的请求不知道会被哪个对象处理,所以系统的更改可以在不影响客户端的情况下动态的重新原创 2017-03-12 13:56:24 · 715 阅读 · 0 评论 -
Java——transient and 序列化
序列化序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。 在网络传输过程中,可以是字节或是XML,json等格式。而字节的,XML,json编码格式可以还原完全相等的对象。这个相反的过程又称为反序列化。transientjava 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transie原创 2017-03-14 23:33:29 · 758 阅读 · 0 评论 -
Java——进程
进程进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位, 每个进程都有其自己的内存空间。Java中创建进程其实是创建了操作系统的一个进程,Java虚拟机本身就是一个进程,该进程创建了多个线程能够同时运行的条件。进程特征动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的;并发性:任何进程都可以同其他进程一起并发执行;独立性:进程是一个能独立运行的基本单原创 2017-03-15 20:47:45 · 1071 阅读 · 0 评论 -
从fatjar中读取资源文件
需求传个模板文件到服务器上,读取这个模板文件做些事情做法将模板文件放到Java工程的资源文件目录里,然后将文件拷贝到服务器上的某个目录下,程序中用到的时候从该目录读取注意因为程序是打成fatjar后再服务器上运行的,所以不能像以前遍历资源目录的方式去读模板文件,需要使用流的方式读取文件代码import org.apache.commons.io.IOUtils;public S...原创 2019-09-29 14:02:48 · 852 阅读 · 0 评论