![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
tuobana123
从事J2EE开发,熟悉Spring Framework,Hibernate,Mybatis等开源java框架。
展开
-
java 自定义序列化
如果采用java序列化的方式传输java对象,我觉得最好还是采用自定义序列化的方式来完成。下面就来看看如何利用readObject,writeObject,writeReplace,readResolve这4个私有方法来自定义序列化的过程。 1)第一个场景,我们希望在序列化的过程中改变那些被transient修饰的变量,class TestSer implements Serializable {原创 2016-02-28 16:20:39 · 1171 阅读 · 0 评论 -
java 序列化
java序列化简单来讲就是将java对象转换为二进制文件的过程;反序列化的过程就是从二进制文件中生成原java对象拷贝的过程。代码实现的基本过程为,通过ObjectOutputStream调用writeObject方法将类的对象序列化为二进制文件;反序列化就是从二进制文件通过ObjectInputStream调用readObject方法生成一个新的对象的过程。 上面简单的描述了java序列化和反序原创 2016-02-27 21:36:55 · 441 阅读 · 0 评论 -
java Comparable和Comparator
Comparable 用作默认的比较方式;Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用。 像Arrays和Collections中的排序方法,当不指定Comparator时使用的就是默认排序方式,也就是使用Comparable。指定Comparator时就是使用提供的比较器。 sort(Object[])原创 2013-06-24 15:04:16 · 701 阅读 · 0 评论 -
java 泛型原理
泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是在获取的时候要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的,原创 2016-02-25 13:05:18 · 837 阅读 · 0 评论 -
java 获取数组元素类型的class对象
每一个类被jvm加载到内存中后,都会生成一个class对象,而且每一个类的实例对象都会有一个引用指针指向该class对象。基于这个class对象我们可以做很多事情,同时它也是整个反射机制的基础。 这里,我只想说一下,如何才能获取到数组元素类型的class对象,这个和普通元素获取的方式还是有区别的,具体看看代码:public class ClientTest { public static原创 2015-12-23 16:31:10 · 15783 阅读 · 0 评论 -
java 深度克隆
关于java的深度克隆,以及为什么要重写clone方法,这个网上又很多介绍。自己曾经尝试着实现Cloneable接口重写clone方法来实现深度克隆,但是总感觉效果不好,而且非常的繁琐,当我们要深度克隆的对象是一个非常复杂的结构时,要实现这个对象的深度克隆,不但对象本身要实现Cloneable接口,而且对象里面的非基本类型也必须实现Cloneable接口才行,这是极其不方便的。 所以,我原创 2015-11-26 20:02:07 · 1104 阅读 · 0 评论 -
java 序列化字节流解析
定义下面一个类然后执行序列化得到字节流写入文件,解析文件,基于这个过程了解java序列化的原理。package com.heetian.erange.studio.crypt;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io原创 2016-02-28 23:43:09 · 2969 阅读 · 0 评论 -
java jvm shutdownhook
shutdownhook是jvm提供给应用程序在jvm退出时,处理应用程序未处理完的任务的一种安全退出机制,通过这种机制,可以在jvm退出时关闭一些资源,中断一些必须优雅关闭的线程等。 使用方式也很简单,可以在主线程启动的时候使用下面的代码注册,具体如下: Runtime.getRuntime().addShutdownHook(new CleanWorkThread()); /**原创 2016-05-13 20:51:37 · 1570 阅读 · 0 评论 -
java directmemory监控
DirectBuffer是NIO提供的可以直接使用系统物理内存的结构,目的是提高内存访问速度,但是销毁和创建的成本则比JVM堆内存的大很多,使用的时候需要注意。 当使用nio的DirectBuffer功能时,我们可以通过-XX:MaxDirectMemorySize=100M,指定DirectMemory的最大使用物理内存,一般的可视化监控似乎没有针对物理内存的监控,那如何监控DirectBuff原创 2016-07-21 16:24:21 · 3153 阅读 · 1 评论 -
guava cache
1、Guava Cache概述 Guava cache是一种本地缓存轻量级的缓存方案,底层依赖于ConcurrentHashMap,但比ConcurrentHashMap提供了更多的功能,比如缓存的回收(但是需要注意的是这种缓存回收机制并不是guava cache主动回收的,而是被动的基于缓存的读写进行回收的,这样的实现机制也是guava cache轻量级的一个原因之一)。2、Guava key回原创 2017-07-12 11:57:07 · 1435 阅读 · 0 评论 -
url下载文件(重定向+cookie设置)
很多时候,下载文件时会重定向,并且要求携带cookie才允许下载,这种情况下,如果让下载支持重定向,并且设置cookie呢?下面的代码可以供大家参考。 public static void main(String[] args) throws Exception { String cookie = ""; HttpURLConnection conn ...原创 2018-05-08 22:28:38 · 4971 阅读 · 1 评论 -
Java 对象占用内存大小
Java 对象HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。Java 对象头包括Mark Word,Class Metadata Address,ArrayList(数组对象)三部分。Mark Word(32/64 bit)HotSpot虚拟机的对象头(Object Header)...原创 2019-03-24 11:30:12 · 2190 阅读 · 1 评论 -
java intelliJ eclipse 配置文件处理的一点区别
问题背景: 之前在eclipse环境中,我把项目的hbm文件放在了java/main目录的一个package中,然后在spring的配置文件中采用Locations的方式加载hbm的xml文件,加载方式如下:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >原创 2015-11-18 11:39:42 · 925 阅读 · 0 评论 -
linux java jdk 环境变量
vi /etc/profileJAVA_HOME=/usr/java/jdk1.7.0_45JRE_HOME=/usr/java/jdk1.7.0_45/jrePATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libexp原创 2015-08-31 14:28:01 · 617 阅读 · 0 评论 -
java 如何将byte中的有效长度转换为String
一般的我们使用byte接收读取到的数据,若数据没有达到byte定义的大小时,我们直接将byte转换为String则会出现乱码的情况,在这种情况下应该基于read的返回值来转换byte,否则将产生乱码的情况,下面是一个简单的示例:package com.javaio.myinputstream;public class MyConsole { public static void main原创 2013-12-16 18:58:10 · 9051 阅读 · 1 评论 -
java 不可变类 缓存实例
不可变类:是指当创建了这个类的实例后,就不允许修改它的属性值。在JDK的基本类库中,所有基本类型的包装类,如Integer和Long类,都是不可变类,java.lang.String也是不可变类。如何创建一个不可变类?1. 所有成员都是private2. 不提供对成员的改变方法,例如:setXXXX3. 确保所有的方法不会被重载。手段有两种:使用final Class(强不原创 2013-12-11 16:10:34 · 2910 阅读 · 0 评论 -
java 深拷贝 浅拷贝
Java中常用的拷贝操作有三个,operator=、拷贝构造函数和clone()方法。由于Java不支持运算符重载,我们无法在自定义类型中定义operator=,所以使用operator=获取的对象都是浅拷贝,若要实现深拷贝那只能借助于拷贝构造函数和clone方法。这里我们先看一个基本的原则关系图,掌握了这些基本原则,我们就可以比较好的掌握深拷贝和浅拷贝的概念了。下面是一个原创 2013-12-11 10:10:57 · 815 阅读 · 0 评论 -
java hashcode和equal总结
hashCode和equal两个方法都是Object基类定义实现的方法。hashCode即哈希码,就是获取对象对应的hash值的函数;equal即相等,就是判断两个对象是否相等的函数。为什么Object对象会有这两个方法呢,equal方法好理解,用来比较两个对象是否相等,但是hashCode有什么用呢?先看下面一段代码,Person类没有重新这两个方法,继承了Object类的方法,我们来看看O原创 2013-12-09 20:53:00 · 7125 阅读 · 1 评论 -
java 面试宝典
一. Java基础部分......................................................................................................21、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?.....22、Java有没有goto?....................转载 2013-04-21 15:58:59 · 1534 阅读 · 0 评论 -
java 内部类
java内部类,可以分3类,1是成员内部类,2是方法内部类,3是静态内部类。每一类都有自己的特点,总结如下:第1类,和普通的类差不多,但不能定义静态成员变量和方法,编译后会带上外部类的类名。第2类,和方法平级,可以访问方法的参数和局部变量,但必须定义为final类型,这个主要是由于作用域的区别,因为方法退出之后,参数和局部变量就不存在了,但是内部类对象不会立马删除,所以这些参数和局部变原创 2013-08-29 20:06:03 · 550 阅读 · 0 评论 -
java 反射 invoke使用
学习了java反射,利用其功能写了一个小实例,将一个类中的属性值,赋值给具有相同属性值的另一个类的某个实例,并且得到该实例。package com.basic.reflection;import java.lang.reflect.Method;public class TestInvoke { public static void main(String argv[]) {原创 2013-07-24 14:35:16 · 2233 阅读 · 0 评论 -
java 反射
1、什么是反射JAVA反射机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称原创 2013-07-23 17:33:23 · 643 阅读 · 0 评论 -
Java IoC
1、什么是IoCIoC是一种设计模式,一种设计思想,它的实现一般依赖于JAVA 反射和动态代理技术。具体解释为控制反转,它意味着将你设计好的类交给系统去控制,而不是在你的类内部控制,这称为控制反转。2、IoC的好处比如类A依赖于接口类型为B的某个具体类,一般我们需要在类A中去new一个具体的类对象。但是利用IoC的思想,我们不需要在类A中去直接new一个具体的类对象了,可以原创 2013-07-23 10:50:58 · 949 阅读 · 0 评论 -
java 计算时间差
java计算时间差的标准用法,记录下来方便以后查找SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");java.util.Date begin = dfs.parse("2004-01-02 11:30:24");java.util.Date end = dfs.parse("2004-03-26 13:31原创 2013-12-16 19:51:43 · 1486 阅读 · 0 评论 -
java 产生随机字符串
产生随机字符串的一种简单有效的方法,见如下java代码package com.bjhit.eranges.common.util;public class BjhitRandomStr { public static String generateRandomStr(int num) { if (num > 0) { char[] tmp = new char[num];原创 2014-02-17 15:01:40 · 944 阅读 · 0 评论 -
java 反射 模拟spring自动注入
基于反射和注解机制,简单模拟Spring解析Autowired注解的过程。1、自定义Autowired注解,代码如下package com.basic.reflect;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotat原创 2015-05-22 15:30:57 · 4670 阅读 · 0 评论 -
java jdk动态代理原理
使用示例package com.basic.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class TestJdkProxy { public static void main(Str原创 2015-05-21 13:10:39 · 455 阅读 · 0 评论 -
java getResourceAsStream
加载类路径或者classpath路径下面的文件,使用绝对路径是不推荐的方式,那如何使用相对路径的方式加载呢,下面就介绍一下getResourceAsStream函数的使用,看下面的代码:public class TestResourceAsStream { public static void main(String[] args) { InputStream stream1 = nul原创 2015-01-13 12:52:27 · 555 阅读 · 0 评论 -
自定义rpc服务
之前看到dubbo开发成员写的一篇博客,一个简单的自定义的rpc框架原创 2014-09-23 09:44:32 · 853 阅读 · 0 评论 -
java 抽象类和接口
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很转载 2014-05-19 13:51:42 · 512 阅读 · 0 评论 -
java jdbc访问数据库
自从使用了hibernate框架之后,java最原始的jdbc访问数据库的方式都忘记了,今天搬出来再晒晒。下面的代码为获取连接的关键代码:public class JdbcUtil { private static String username; private static String password; private static String url; priv原创 2014-03-21 11:06:14 · 669 阅读 · 0 评论 -
java 动态代理
1、什么是动态代理所谓Dynamic Proxy是这样一种class,它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些interface。但是它不会替你完成任何实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作。2、动态代理的作用动态代理可以截获类调用,添加一些额外的功能。动态代理可以实原创 2013-06-18 20:24:43 · 812 阅读 · 1 评论