
java
枫之木落
爱好旅游…………………………………………………………………………
展开
-
线程安全集合
从Java5开始,在Java.util.concurrent包下提供了大量支持高效并发访问的集合接口和实现类,如下图: 从图中可以看出,这些线程安全的集合主要分为两类,以Concurrent开头的集合类和以CopyOnWrite开头的集合类。1、以Concurrent开头的集合类,可以支持多个线程并发写入访问,写入操作都是线程安全的,读取操作不必锁定,采用更复杂的算法保证永不会锁住整个集...原创 2018-04-25 10:01:53 · 1175 阅读 · 0 评论 -
集合
Collection接口下的子接口和实现类: Map接口下的子接口和实现类: Collections:操作集合的工具类该工具类提供大量方法对集合元素进行排序、查询和修改等操作,还提供了将集合设置为不可变、对象集合实现同步控制等方法。1、排序操作void reverse(List list); 反转集合元素顺序 void shuffle(List list); 对集合元...原创 2018-04-19 22:10:05 · 134 阅读 · 0 评论 -
HttpClient
转载:https://www.cnblogs.com/ITtangtang/p/3968093.html转载 2018-04-19 21:02:09 · 123 阅读 · 0 评论 -
Thread.currentThread().getContextClassLoader().getResource 获得路径资源
转载 :https://blog.youkuaiyun.com/z69183787/article/details/22774537转载 2018-04-17 16:40:32 · 9905 阅读 · 0 评论 -
Java 自定义注解的实现
什么是注解?对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。Annontation...转载 2018-04-17 16:31:52 · 286 阅读 · 0 评论 -
Java线程池ExecutorService
开篇前,我们先来看看不使用线程池的情况:new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();那你就太ou...转载 2018-04-17 16:10:24 · 362 阅读 · 0 评论 -
java7新特性--自动关闭资源
格式 try( //此处写打开资源的代码,此处创建的对象必须实现java.lang.AutoClosable接口 声明变量 变量=java.lang.AutoClosable接口的实例 ) { } catch{ //处理异常的方法 } 例:在java6中 public static void copy(File srcFile,File target...转载 2018-04-17 15:47:29 · 1205 阅读 · 0 评论 -
Java内存模式
转载:https://www.cnblogs.com/HJrefueling/p/8637976.html转载 2018-04-17 15:40:52 · 468 阅读 · 0 评论 -
Java7中增加的新特性
Java7语言,语法的变化1、switch语句中的String在Java6及之前,case语句中的常量只能是byte,char,short和int(也可以是对应的封装类型Byte,Character,Short和Integer)或枚举常量。Java7中增加了Stringpublic static void main(String[] args) { TestSwitchUseS...转载 2018-05-17 21:43:37 · 575 阅读 · 0 评论 -
foreach实现原理
在平时Java程序中,应用比较多的就是对Collection集合类的foreach遍历,foreach之所以能工作,是因为这些集合类都实现了Iterable接口,该接口中定义了Iterator迭代器的产生方法,并且foreach就是通过Iterable接口在序列中进行移动。Iterable接口API:package java.lang;import java.util.Iterator...原创 2018-05-05 15:21:49 · 1157 阅读 · 0 评论 -
Java 抽象类和接口区别
抽象类和接口的对比参数抽象类接口实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现变量接口中只能定义全局静态常量,不能定义变量抽象类中可以定义常量和变量默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根...原创 2018-12-14 18:16:33 · 278 阅读 · 0 评论 -
Java获得zip包内文件名
ZipFile zipFile=new ZipFile(zipPath);//或者ZipFile zipFile=new ZipFile(zipFile);for (Enumeration<? extends ZipEntry> e = zipFile.getEntries(); e.hasMoreElements();){ ZipEntry entry=e.nextElem...原创 2018-09-15 11:29:29 · 6656 阅读 · 0 评论 -
HashMap HashTable和ConcurrentHashMap的区别
转载:https://yq.aliyun.com/articles/38213转载 2018-08-06 16:26:15 · 185 阅读 · 0 评论 -
HashSet原理
转载:http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532999.html 做为个人笔记复习,如若侵权,请联系删除1、HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet中不允许有重...转载 2018-07-20 19:48:25 · 151 阅读 · 0 评论 -
HashMap的实现原理
转载:http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html转载 2018-07-20 14:46:17 · 343 阅读 · 0 评论 -
ArrayList的实现原理
http://www.cnblogs.com/ITtangtang/p/3948555.html转载 2018-05-05 17:11:47 · 169 阅读 · 0 评论 -
Java 数组扩容
Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的。 2)利用数组复制方法可以变通的实现数组扩容。 3)System.arraycopy()可以复制数组。 4)Arrays.copyOf()可以简便的创建数组副本。Arrays.copyOf() 方法调用了System.arraycopy() 5)创建数组副本的同时将数组长度增加就变...原创 2018-05-05 16:34:56 · 647 阅读 · 0 评论 -
对象克隆
如何实现克隆先介绍一下两种不同的克隆方法,浅克隆(ShallowClone)和深克隆(DeepClone)。在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int、double、byte、boolean、char等简单数据类型,引用类型包括类、接口、数组等复杂类型。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制,下面将对两者进行详细介绍。一般步骤...转载 2018-05-05 16:23:58 · 170 阅读 · 0 评论 -
枚举
Java 5 新增一个enum关键字,用以定义枚举类。枚举,是指一个经过排序的、被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值。特殊的枚举类与普通类的区别:可以实现一个或多个接口,默认继承java.lang.Enum类,不能继承其他父类,其中ava.lang.Enum类实现了java.lang.Serializable和java.lang.Comparab...原创 2018-04-17 15:38:17 · 165 阅读 · 0 评论 -
Java 反射机制
Java 反射的简单介绍与运用java的反射机制:简单来说就是通过类名来获得类的所有信息。优点:可以实现动态创建和编译,体现出灵活性。缺点:运行效率没有直接new对象快,但现在有很大的提升,可以忽略不计首先获得类的Class文件(.calss文件)1、通过类的全名(含包名),但不推荐使用,编译时,编译器并不知道该类是否存在,需要抛出异常: Class clazz=Clas原创 2018-01-20 10:32:35 · 167 阅读 · 0 评论 -
Java中堆和栈的区别
栈在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以在原创 2017-08-31 11:03:44 · 153 阅读 · 0 评论 -
深入分析Java ClassLoader原理
一、什么是ClassLoader?大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序原创 2017-09-05 14:07:11 · 715 阅读 · 0 评论 -
int和integer的区别
Integer和int的区别1、Integer是int提供的封装类,而int是Java的基本数据类型;2、Integer默认值是null,而int默认值是0;3、声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;4、Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。原创 2017-09-14 20:22:58 · 268 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别
1、三者在执行速度方面的比较:StringBuilder > StringBuffer > String2、String <(StringBuffer,StringBuilder)的原因String:字符串常量StringBuffer:字符创变量StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这转载 2017-09-14 17:25:53 · 145 阅读 · 0 评论 -
Java垃圾回收机制
1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是”无用信息”,这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的原创 2017-09-14 16:11:06 · 150 阅读 · 0 评论 -
基于JavaMail的java邮件发送
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。1. 电子邮件协议电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。原创 2017-08-28 20:51:28 · 258 阅读 · 0 评论 -
jdk和jre的区别
JVM(java virtual machineJVM)java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JDK(java development kit),JDK是java开发工具包,里面包原创 2017-08-28 14:33:28 · 368 阅读 · 0 评论 -
基于JavaMail的Java邮件发送:简单邮件发送
http://blog.youkuaiyun.com/xietansheng/article/details/51673073转载 2017-08-22 08:33:04 · 304 阅读 · 0 评论 -
java的System.getProperty()方法可以获取的值
很多时候我们需要在项目中读取外部属性文件,用到了System.getProperty(“”)方法。这个方法需要配置JVM系统属性,用键值对存储。java.version Java 运行时环境版本java.vendor Java 运行时环境供应商java.vendor.url Java 供原创 2017-10-21 20:26:59 · 5074 阅读 · 0 评论 -
java获得文件路径
1,FileTest.class.getResource(“”) 得到的是当前类FileTest.class文件的URI目录。不包括自己2,FileTest.class.getResource(“/”) 得到的是当前的classpath的绝对URI路径。3,Thread.currentThread().getContextClassLoader().getResource(“”) 得到的也是当原创 2017-10-30 20:35:31 · 255 阅读 · 0 评论 -
java poi excel 2003和2007导入导出
参考网上整理了一下excel的导入和导出,excel的2003版和2007版以后的读写方法不同,文件后缀名也不同,所以要注意这点。 我只是简单实现了excel的导入导出,还有好多对excel单元格的设置我没有试,如果要用,自己去查询。 源码下载地址:https://gitee.com/jxyfengzhimuluo/excel_poi_java源码ExcelUtil类import or原创 2017-12-03 13:18:39 · 455 阅读 · 0 评论 -
Date和String类型相互转换
参考网上整理了一下excel的导入和导出,excel的2003版和2007版以后的读写方法不同,文件后缀名也不同,所以要注意这点。 我只是简单实现了excel的导入导出,还有好多对excel单元格的设置我没有试,如果要用,自己去查询。 源码下载地址:https://gitee.com/jxyfengzhimuluo/excel_poi_java源码ExcelUtil类import org.apa原创 2017-12-02 13:30:22 · 416 阅读 · 0 评论 -
java中split()特殊符号"." "|" "*" "\" "]"
java中split()特殊符号”.”、 “|”、 “*” 、”\” 、”]”关于点的问题是用string.split("[.]") 解决。关于竖线的问题用 string.split("\\|")解决。关于星号的问题用 string.split("\\*")解决。关于斜线的问题用 sring.split("\\\\")解决。关于中括号的问题用 sring.split("\\[\\]")解决。原创 2017-11-16 20:15:57 · 510 阅读 · 0 评论 -
hashCode和equals
1 、首先理解什么是哈希码 2、理解hashCode方法 3、理解equals方法重写 4、equals方法和hashCode方法一般一起重写。原创 2017-11-06 14:42:35 · 187 阅读 · 0 评论 -
java Comparable 和Comparator区别
http://blog.youkuaiyun.com/tolcf/article/details/52229068转载 2017-11-12 16:33:41 · 181 阅读 · 0 评论 -
Java序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨。1.Java序列化与反序列化Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。2.为什么需要序列化与反序列化我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会转载 2017-11-09 20:47:55 · 173 阅读 · 0 评论 -
String 为什么是不可变的?
问:String 为什么是不可变的?答:String 不可变是因为在 J DK 中 String 类被声明为一个 final 类,且类内部的 value 字节数组也是 final 的,只有当字符串是不可变时字符串池才有可能实现,字符串池的实现可以在运行时节约很多 heap 空间,因为不同的字符串变量都指向池中的同一个字符串;如果字符串是可变的则会引起很严重的安全问题,譬如数据库的用户名密码都是以字符原创 2017-10-14 16:58:48 · 667 阅读 · 0 评论 -
读取properties配置文件
public class PropertiesUtil { public static void main(String[] args) { Properties p=new Properties(); //创建Properties对象 try { InputStream in=PropertiesUtil.class.getR原创 2017-10-31 14:10:23 · 276 阅读 · 0 评论 -
多线程状态及转换
状态转换图线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。...转载 2018-12-11 21:36:51 · 302 阅读 · 0 评论