java基础
文章平均质量分 66
hymKing
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解Java的内存模型与线程并发问题
文章大部分内容参考《深入理解Java虚拟机》!!!一、引言为什么要了解java的内存模型?java的内存模型是程序运行的基础知识,对于我们理解java的并发编程有一定的帮助,甚至一些并发知识的底层实现原理也是基于java的内存模型来实现的。计算机系统硬件与执行效率的一致性“让计算机并发执行若干个并发任务”与“更充分的利用计算机的处理器效能”之间的因果关系相对复杂,这种复杂性的来源是绝大多数的运算任务不可能只是靠处理器的“计算”就能完成。处理器至少要与内存进行交互,如读取运算数据、存储运算结果等,这个原创 2022-01-20 10:32:26 · 801 阅读 · 0 评论 -
CopyOnWriteArrayList实现原理源码分析
针对于并发场景下动态数组的选型,可以使用线程安全的列表Vector,Vector是jdk1.0版本就带有的一个线程安全的动态数组类,但是Vector的实现原理之前分析过,对于所有对内部存储数据结构的操作,都添加了同步锁,这样的实现方式,虽然保证了线程的安全性,大并发场景下,却等同于多个线程的串行化执行,效率低下。jdk1.5引入了新的线程安全的列表实现CopyOnWriteArrayList。一、CopyOnWriteArrayList的实现类图类图结构和ArrayList完全一致,这个也合理,从Co原创 2021-11-11 16:40:56 · 3437 阅读 · 0 评论 -
JDK1.8版本HashMap源码原理分析
HashMap是一个KV的容器对象,也是日常在开发当中非常常用的对象,比如我们可能经常做一些内存缓存的时候,很多时候就选用HashMap这种KV的数据结构。在实现原理上,是基于哈希表的Map接口实现,是常用的java集合之一,非线程安全的。HashMap可以存储null的key和value,但是null作为键值只能有一个,做为值的话,可以是多个。这和Map的键要保持唯一性并不冲突。一、HashMap的类图结构二、概念、原理概述Jdk1.8之前的HashMap是由数组+链表作为底层数据结构实现的,数原创 2021-10-27 18:57:56 · 1145 阅读 · 2 评论 -
Vector实现原理源码分析
Vector在jdk1.0版本就存在的一个并发列表类,Vector和ArrayList实现了非常相似的接口,集成了相同的类。和ArrayList不同的是,Vector是线程安全的,大部分的对外暴露的公共方法上,都添加了synchronized同步锁,很显然,同步锁的加入,使得Vector的性能并不高,要使用线程安全的List,则推荐CopyOnWriteArrayList。一、Vector的类结构从类的结构图看,Vector的类结构体系基本和ArrayList一致。二、源码分析/** * 存储元原创 2021-09-29 17:50:14 · 1891 阅读 · 0 评论 -
集合对象-ArrayList实现原理源码分析
集合对象-ArrayList实现原理源码分析最近再重看并发编程,又有新的体会,读书真是一个神奇的事情,读书能够提升认知水平,认知水平提高后,再复读往往能够获得新知。扯远了,在读构建线程安全类章节中,看到了CopyOnWriteArrayList,今天咱们结合ArrayList,Vector做一个简单的对比记录。主要从以下几个维度来看他们之间的联系和差别,比如代码底层的数据结构的实现、扩容机制上的区别、是否线程安全、性能上的差别。一、ArrayList继承体系图:ArrayList直接实现了了四个原创 2021-09-29 16:04:57 · 329 阅读 · 0 评论 -
网络分层模型、协议以及理解
OSI七层网络分层模型:参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。为什么网络进行网络层次划分?开闭原则。其实,大部分事实的道理都存在共性,随着人们对网络传输过程认知不断提升,人们发现网络传输实在是太复杂了,既要确定传输的信号是什么,还要确定给谁传输,还有各种中传输过程中的控制逻辑,容错逻辑等等。在软件工程OOD思想中,最顶层的原则就是开闭原则,网络分层的原因,有何尝不是如此,控制了层层之间的边界,每一层承.原创 2021-06-03 15:03:41 · 873 阅读 · 1 评论 -
解决ifelse过多问题
问题if else过多问题可以分成三类问题:if…else 过多逻辑表达式复杂嵌套过深本节只讨论过多问题:public void test(){ if(condition1){ //do something &nbs...原创 2020-04-30 16:54:55 · 2676 阅读 · 0 评论 -
算法基础回顾-时间复杂度和空间复杂度
时间复杂度和空间复杂度主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。时间复杂度时间复杂度使用大O表示法,在大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O...原创 2020-04-29 10:55:59 · 584 阅读 · 0 评论 -
JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件
package ioTest.io3;import java.io.File;/* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 。 * 并将文件夹和文件名称打印在控制台上面。并且要显示文件目录的层级 * 注:运用了递归的算法。 */public class FileDemo3 { public static void main(String[] args) {原创 2014-05-03 16:04:26 · 19844 阅读 · 1 评论 -
JAVA之IO技术相关Properties类的使用
package ioTest.io3;/*Properties是hashtable的子类。 * 也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串 * 是集合中和io技术结合的一个容器 * * 该对象的特点是可以用于键值对形式的配置文件 */import java.util.Properties;public class PropertiesDemo { p原创 2014-05-03 23:30:54 · 1226 阅读 · 0 评论 -
JAVA之IO技术相关 如何设置软件的使用次数
/* * 如何设置软件的使用次数? * 开发了一款软件,可以给用户进行试用,但是到了一定次数后,软件不能再被试用 * 同时提醒用户付费。 * 思路: * 计数呗 * 问题出现,计数器只能存在于程序运行过程中,实际是保存在内存中的。 * 那么一旦程序结束,这个计数器的值又恢复为了初始程序中设定的值。 * 那么如何保存这个值,在下一次启动应用程序的时候,让其仍然存在啊 * 思路:让这原创 2014-05-04 12:57:04 · 1940 阅读 · 0 评论 -
JAVA之File类-将指定目录下的所有java文件的绝对路径存储到文本文件中
/* * 将指定目录下的所有java文件的绝对路径存储到文本文件中 * 建立一个java列表。 * 思路: * 1.对指定目录进行递归 * 2.获取递归过程所有的java文件的路径 * 3.将这些路径存储在集合中 * 4.将集合中的内容写到文本文件 * 注:3,4步骤也可以合并成一个步骤 */package ioTest.io3;import java.io.Buffere原创 2014-05-03 23:26:59 · 4515 阅读 · 0 评论 -
JAVA之IO技术File类的使用
package ioTest.io3;/* * File类是对文件和文件夹的抽象。 * File类的常见方法: * 1.创建 * createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建,返回false。 * 和输出流对象不一样,输出流对象,只要已建立就创建,如果文件存在,则覆盖。 * mkdir():创建此抽象路径名指定的目录 * mkd原创 2014-05-03 13:36:50 · 1463 阅读 · 0 评论 -
java5核心基础之泛型(1)
java5新特性泛型产生的最基本原因是什么,当然后续还有泛型的深入分析原创 2014-04-27 23:03:38 · 1180 阅读 · 0 评论 -
JAVA之IO技术 分割文件
/* * 讲一个图片文件按照指定的大小切割成多个碎片文件。 * 方法: * 循环读取数据到缓冲区,存放到不同的文件中就OK的啦 */package ioTest.io3;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class S原创 2014-05-04 16:00:23 · 1749 阅读 · 0 评论 -
JAVA之IO技术相关Properties类 存储配置文件信息
package ioTest.io3;/* * Properties存储配置文件信息 * 1.文件信息--------------------------- * 2.根据文件信息获取key和value---|流| * 3.将key,value的之对应存储到properties对象中 */import java.io.BufferedReader;import java.io.Buf原创 2014-05-04 12:55:09 · 1607 阅读 · 0 评论 -
JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。
package ioTest.io3;/* * 获取指定目录下的文件夹和文件的File对象或是字符串名称。 * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用。 */import java.io.File;import java.io.FileFilter;import java.io.Filenam原创 2014-05-03 13:39:12 · 3110 阅读 · 0 评论 -
JAVA之File类-删除一个有内容的文件夹
package ioTest.io3;/* * 删除有内容的文件夹:从最里面一直向外删除。建议千万不要删除硬盘上面有用的文件夹哦 * 方法思路 * 循环+递归 */import java.io.File;public class RemoveDir { public static void main(String[] args) { // TODO Auto-generat原创 2014-05-03 23:25:03 · 4028 阅读 · 0 评论 -
JAVA之IO技术 合并文件--有bug哦
/*将三个文本文件的内容copy到一个文件中。 * 基本思路:通过续写的方式。 * * JAVA之IO技术中提供了一个可串联的字节输入流对象。 * * 合并流对象 * SequenceInputStream: * SequenceInputStream 表示其他输入流的逻辑串联。 * 它从输入流的有序集合开始,并从第一个输入流开始读取, * 直到到达文件末尾,接着从第二个输入原创 2014-05-04 15:59:21 · 1461 阅读 · 0 评论 -
java5核心基础泛型(2):泛型在反射中的应用
如何通过反射获取指定参数类型的构造函数。原创 2014-04-28 23:28:14 · 1192 阅读 · 0 评论 -
java5核心基础之泛型(3)-泛型作用于编译阶段-如何将String对象传入Integer类型的泛型对象中?
泛型作用于编译阶段:泛型是作用于编译阶段,在编译阶段控制类型,以确保在编写代码的时候只能传入指定类型数据到泛型集合对象中去。如何验证呢,贴代码如下:package highBasic.generic;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import ja原创 2014-04-29 00:15:49 · 1859 阅读 · 0 评论 -
parent,son深刻理解this,super关键字
核心点:super关键字,表示调用的是父类对象。this关键字,表示调用的是当前运行类对象。那么如果在父类中,使用了关键字,this,此时的this指的是什么呢?看下面的例子,再加深理解核心店的第二句话就ok了。parent类:package com.ghsy.thissuper;public class Parent { public void init(){原创 2014-05-14 14:00:47 · 2278 阅读 · 0 评论 -
JAVA之IO技术用字节流对文本文件进行读写FileInputStream,FileInputStream
package ioTest.io2;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/* * IO: * 字符流:Writer,Reader * 字节流:OutPutStream,InPutStream * * 下面的实例仍然是对文本文件进行原创 2014-05-02 22:13:49 · 4471 阅读 · 0 评论 -
JAVA之IO技术自定义装饰类MybufferedReader
package ioTest.io2;import java.io.FileReader;import java.io.IOException;/* * 自定义的BufferedReader类 * MyBufferedReaderDemo:也是为了提高对流的操作性能。 * 所以构造函数中应该将流传入 * * --------拓展:装饰设计模式 * 装饰设计模式是28种设计模原创 2014-05-02 14:17:16 · 1354 阅读 · 0 评论 -
JAVA之IO技术键盘录入 System.in
package ioTest.io2;import java.io.IOException;import java.io.InputStream;/* *键盘录入:如果录入的是一行数据打印,如果录入了over就结束录入 *System.in:标准输入流对象 *System.out:标准输出流对象 */public class ReadIn { public static v原创 2014-05-02 22:26:25 · 1956 阅读 · 0 评论 -
java常量池技术
java常量池技术 java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。 String类也是java中用得多的类,同样为了创建String对象的方便,也实现了常量池的技术。 测试代码如下:转载 2013-12-20 15:27:30 · 1037 阅读 · 0 评论 -
Java实现id自增的字符串类型的数字编号
一些id标识的要求,比如数字自增,0001,0002,0003等。下面这个方法实现了这个功能:思路:int a;a++;fillchar();贴代码:public class mainTest { public static void main(String[] args) { String outString=""; outString=fillStr("123", 9原创 2013-11-27 17:28:37 · 13075 阅读 · 0 评论 -
java集合框架(1)-从api角度分析集合框架的结构
在java的基础类库中,集合框架的类库是非常重要的。在web开发中,也会经常用java的集合类库。首先看一下java api:从api的这个截图可以看出:Collection 是interface,它的父接口Iterable,然后又很多子接口,如Set,SortedSet,List等,以及它们的实现类。 Collection是最基本的集合接口,一个Collection代表一组Obje原创 2013-09-22 19:41:10 · 1510 阅读 · 0 评论 -
设置Eclipse实现实时提示.
设置Eclipse实现实时提示.很多人都比较喜欢微软那个编辑器的实时提示功能,说Eclipse没有这种实时提示,要按下“.”才会提示.其实这些都是可配置的. 1.点击“windows”选择preferences.显示界面如下:2. 在preferences对话框中选择“java”-“edit”-“Content Assist”然后在“Auto activation trigge转载 2013-08-13 17:23:07 · 1983 阅读 · 0 评论 -
JAVA开发和运行环境之JRE和JDK
JDK是java开发的开发和运行工具,其中JDK包含了JRE,但是JRE是可以独立安装的,它们起着不同的作用。JRE是Java Runtime Enviroment的缩写,表示java运行时的环境。显然包含了jvm也就是java虚拟机,还有所有的java类库的class文件,都lib目录下,并且打成了jar包。JDK是Java Develop Kits的缩小,表示的含义是Java开发工具,原创 2013-07-09 10:11:38 · 2524 阅读 · 0 评论 -
在条件表达式中null.equals(str)和str.equals(null)类似形式的区别
package test1;public class javatest1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str="123";原创 2013-04-25 15:37:35 · 2519 阅读 · 0 评论 -
main函数和thread线程类的初步理解
首先,复制了一下网络上一些关于main()函数的资源:JAVA中的主函数是我们再熟悉不过的了,相信每个学习过JAVA语言的人都能够熟练地写出这个程序的入口函数,但对于主函数为什么这么写,其中的每个关键字分别是什么意思,可能就不是所有人都能轻松地答出来的了。我也是在学习中碰到了这个问题,通过在网上搜索资料,并加上自己的实践终于有了一点心得,不敢保留,写出来与大家分享。 主函数的一般写法如下原创 2012-12-29 17:54:59 · 3845 阅读 · 0 评论 -
java中线程的生命周期
多线程:如一个以上的线程同步执行,线程管理工作便显得非常的重要。有些线程必须安排在某些线程之后才能执行,有些线程则必须让它小睡片刻,或者先暂停后执行,在等待其他的线程唤醒它。线程的生命周期:新创建的线程:线程在产生时候便马上进入到这个状态,也就是说,当用new 关键字创建线程对象的时候,线程所处的状态就是这种状态,但是此时系统并不会配置资源,直到调用start()启动线程的时候才会原创 2012-12-28 22:34:54 · 887 阅读 · 0 评论 -
java的反射机制
1.什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。简而言之,就是只要给定类的名字,在运行状态下可以通过反射机制获取类或者对象的所有信息,包括属性和方法。ps:动态语言:程序运行时,可以改变程序的结构,变量类型,原创 2012-12-12 19:52:16 · 897 阅读 · 0 评论 -
JAVA 常用类System以及Properties类的使用
package ioTest.io1;import java.util.Iterator;import java.util.Properties;import java.util.Set;/* * System: * API描述:public final class System extends Object * System 类包含一些有用的类字段和方法。它不能被实例化。原创 2014-05-01 19:39:47 · 1376 阅读 · 0 评论 -
JAVA之IO技术文件的复制原理。
package ioTest.io1;import java.io.FileReader;import java.io.FileWriter;/*将d盘的文件复制到e盘 * Copy的原理: * 读取d盘的文件内容,然后写入到e盘的同名文件中。(同名文件需要创建) * */public class CopyText { public static void main(St原创 2014-05-01 21:48:36 · 1938 阅读 · 0 评论 -
JAVA之IO技术Reader类的子类FileReader的使用
package ioTest.io1;import java.io.FileReader;import java.io.IOException;public class FileReaderDemo { public static void main(String[] args) throws IOException { FileReader reader=new FileRe原创 2014-05-01 20:05:38 · 2479 阅读 · 0 评论 -
JAVA之IO技术中对指定存在的文件进行续写
package ioTest.io1;import java.io.FileWriter;/* * 对已有文件中的数据进行续写 * 为了方便处理,这里面的异常都直接抛出 */public class FileWriterDemo2 { public static void main(String[] args) throws Exception { //参数true,确定了原创 2014-05-01 20:03:43 · 1113 阅读 · 0 评论 -
JAVA之IO技术的操作总结
IO技术流操作的基本规律:1.明确源和目的源:输入流 (是指向流中输入,所以叫输入流)InputStream,Reader目的:输出流(从流向外输出到其它位置)OutputStream,Writer它们各自有都有带有缓冲区技术的子类或者叫装饰类。2.判断操作的数据是否是纯文本。是:字符流不是:字节流特殊情况下运用转换流3.当体系明确后,再明确要原创 2014-05-02 22:38:41 · 1095 阅读 · 0 评论 -
JAVA之IO技术BufferedReader,BufferedWriter的缓冲区技术的使用和原理
BufferedReader:package ioTest.io2;/* * BufferedReader:该缓冲区提供了一个一次读一行的方法 * readline(); * * 加入缓冲区技术的优点是什么呢? * 原来我是读一个字符取一个字符,现在变成我读一行字符,将其放在数组中,然后再取。 * 这样是不是提高了效率。实际上BufferedReader类底层实现的原理,就是利原创 2014-05-02 13:43:43 · 2937 阅读 · 0 评论
分享