Java
文章平均质量分 91
RonTech
执着、认真;喜欢技术,但更热爱技术+行业;热爱生活,但更喜欢与人交往;喜欢学习,但更注重与人分享。
展开
-
@Conditional注解详解
本文我们要陈述的是如何根据不同的条件来判定到底注入那个Bean,即@Conditional注解的用法。原创 2019-05-16 21:32:47 · 4945 阅读 · 0 评论 -
Java高级系列——File类
在做应用开发的过程中,文件是我们经常需要接触到的东西。在Java中,File是一个相对重要的类,在很多文件处理上我们都会用到该类以及相关的API。但是,从名字上来看,我们可能会认为,File所代表的应该是一个文件,实则不然,在Java中,File代表一个具体的文件名称,也代表一个具体目录的名称。如果要对File所代表的文件进行操作,我们需要借助Java中的输入和输出流的操作,这里我们不谈输入流和输...原创 2018-04-07 16:48:36 · 430 阅读 · 0 评论 -
Java高级系列——通用编程指南
一、介绍本文我们将会继续讨论Java中一些优秀且强大的编程风格中的一些通用规则。我们将要讨论的这些规则中的一些我们在前面的文章中已经提及,然而为了提高Java开发者的相关技巧,有很多新的实战建议本文我们将会讨论。二、变量作用域(Variable scopes)在如何设计类和接口一文我们已经讨论过在设计类和接口时如何使用可见性规则和可访问性规则来限制他们的作用域。但是我们没有讨论过局部变原创 2018-01-19 16:14:52 · 1172 阅读 · 0 评论 -
Java高级系列——如何高效的编写方法(methods)
一、介绍本文我们将会花一些时间从不同的方面去讨论一下Java中方法的设计和实现方式。在本系列前面的文章中我们已经看到,在Java中编写一个方法非常的简单,但是在编写方法时掌握一些关键的要素可以让方法可读性更强而且更加高效。二、方法签名(Method signatures)我们已经知道,Java是面向对象语言。因此,Java中的每个方法属于类的实例(static方法属于类本身),每个方法原创 2018-01-17 13:44:23 · 4766 阅读 · 1 评论 -
Java高级系列——何时使用、如何使用异常(Exceptions)
一、介绍在Java中,异常是一个非常重要的工具,在程序流中异常可以发出一些反常的(异常的)情况并阻止程序进行更深入的执行。自然地,异常情况可能是致命的(程序不能执行任何操作并且会终止),也可能是可恢复的(程序可以继续执行,但是有些功能可能不可用)。本文我们将会阐述一些使用异常的经典场景,讨论Checked Exceptions和Unchecked Exceptions,并且接触一些不太常见原创 2018-01-23 10:56:14 · 7108 阅读 · 0 评论 -
Java高级系列——注解(Annotations)
本系列文章的这一部分我们将会介绍Java 5版本引入的除泛型和枚举之外的另外一个强大特性:注解,可以将注解看成一种特殊的接口。注解是一种特殊种类的元数据,它能够关联Java语言中不同元素和结构。有意思的是,在Java生态系统中大多数使用样板XML描述符的地方,注解在消除这些XML描述符上做出了很大的贡献。注解引入了新的,类型安全以及非常强健的配置和个性化技术。原创 2018-01-13 17:13:44 · 13467 阅读 · 0 评论 -
Java垃圾回收(4)
G1垃圾收集器是hotspot虚拟机中实现的最新的垃圾收集器。从Java 7的第4个更新版本开始就提供了此回收器的支持。Oracle GC小组也公开表示,他们希望在G1中完全实现低停顿GC。问题:回翻译 2017-12-28 15:53:23 · 305 阅读 · 0 评论 -
Java高级系列——枚举(Enums)
一、介绍本系列文章的这一部分我们将会介绍Java 5版本之后引入的除泛型之外的另外一个强大特性:枚举。可以将枚举看成一种特殊的类,并且可以将注解看成一种特殊的接口。枚举的思想很简单,也很方便:它代表了一组固定的常量值。实际上,枚举经常用来设计一些状态常量。比如,星期几就是枚举的一个最好例子,因为他们被限制在周一、周二、周三、周四、周五、 周六和周日。二、枚举作为特殊的类在枚举被引入原创 2018-01-12 15:56:51 · 21179 阅读 · 0 评论 -
Java高级系列——使用所有对象的通用方法
本文我们介绍equals,hashCode,toString和clone方法的使用,其他的方法我们将会在后续的多线程最佳实战的文章中细说。原创 2018-01-03 17:48:47 · 1950 阅读 · 0 评论 -
8张图带你轻松温习Java知识
1、字符串不变性String s = "abcd"; s = s.concat("ef"); 2、equals()方法、hashCode()方法的区别HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于:如果两个对象相等(equal),那么他们一定有相同的哈希值。如果两个对象的哈希值相同,但他们未必相等(equal)。 ...转载 2018-04-14 13:35:34 · 292 阅读 · 0 评论 -
Java高级系列——不得不说的对象序列化(serialize)
1、什么是Java对象序列化?Java的对象序列化是将那些实现了Serializable接口的对象转化成一个字节序列,并能够在以后将这些字节序列完全恢复成原来的对象。简单来说序列化就是将对象转化成字节流,反序列化就是将字节流转化成对象。对象必须在程序中显示的序列化(serialize)和反序列化(deserialize)。2、序列化的作用序列化的主要用途主要有两个,一个是对象持久化...原创 2018-04-09 16:18:12 · 10804 阅读 · 1 评论 -
Java高级系列——散列与散列码
使用散列的目的:想要使用一个对象查找另一个对象。散列的价值:散列的价值在于速度,散列使得查询得以快速进行。设计hashCode()时最重要的因素:无论何时,对同一个对象调用hashCode()都会产生同样的值。如果将一个对象用put()添加进HashMap时产生一个hashCode()值,而用get()取出时却产生了另外一个hashCode()值,那么就无法重新取得该对象了。想要使ha...原创 2018-04-04 13:35:31 · 2026 阅读 · 0 评论 -
GPG生成密钥对(Windows)及应用
PGP加密方案,密钥对生成及在java中的应用原创 2019-03-28 16:36:36 · 21304 阅读 · 0 评论 -
Openssl生成RSA证书,Java实现公钥证书加密,私钥证书解密
1、证书生成过程生成RSA私钥:genrsa -out private_key.pem 1024把RSA私钥转换成PKCS8格式pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM –nocrypt生成RSA公钥rsa -in private_key.pem -pubout -out rsa_public_key...原创 2019-01-02 16:18:56 · 2240 阅读 · 0 评论 -
通过实例说设计模式——简单工厂模式
本文我们通过实例的方式来简单描述一下简单工厂模式的由来及其作用,话说我们现在需要开发一个图形界面工具,然后将这个工具提供给一个客户去使用,系统初期我们只需要画一个圆(Circle)和一个三角形(Triangle)即可。那么我们的工具就按照如下的方式设计。public class Shape { public void draw(String type) { if(t...原创 2018-06-10 22:50:44 · 2037 阅读 · 0 评论 -
Java高级系列——异常(Exception)
在解释Java中的异常时,首先我们来看一张图 上图是我们Java中,异常类的一个继承关系图,从图中我们可以看到Java标准库内构建的这些通用的异常,他们都是以Throwable为顶层父类。Throwable又派生出Error类和Exception类。错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该...原创 2018-06-16 10:00:49 · 1442 阅读 · 0 评论 -
Java高级系列——强引用、软引用、弱引用、虚引用
强引用只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用非必须引用,内存溢出之前进行回收,可以通过以下...转载 2018-06-15 21:37:20 · 605 阅读 · 0 评论 -
Java多线程编程——线程创建方式
在Java中,创建线程有以下几种方式:通过实现 Runnable 接口;通过继承 Thread 类本身;通过 Callable 和 Future 创建线程。通过实现 Runnable 接口来创建线程创建线程最简单的方式就是直接实现Runnable接口,该接口定义了一个run()方法,在我们的实现类中通过对该方法的实现来定义我们自己的任务,这样使得我们在创建并启动线程之后能够执行...原创 2018-04-26 17:43:01 · 325 阅读 · 0 评论 -
Java多线程编程——为什么需要多线程编程
谈到为什么需要多线程编程,可能需要从并发这个概念的历史来说起。在很久以前,计算机并没有操作系统,同一个时刻他们只能执行一个单独的程序,而且这些程序直接访问所有的计算机资源。在计算机刚面世的那个年代,程序的这种处理方式其实并没有什么不对。但是随着计算机以及软件的快速发展,操作系统以及多核处理器的诞生,这使得同一时刻只处理一个任务让计算机的效率变得很低,并且不能充分发挥计算机的能力,达到充分利用计...原创 2018-04-26 17:37:38 · 1816 阅读 · 0 评论 -
JavaMail使用(检测邮箱是否能收件和发件)
使用过JavaMail我们都知道,通过JavaMail这个工具,我们可以在自己的系统中实现邮件收发功能。本文我们将给出如何检测我们所设置的邮箱是否能接收和发送邮件。首先、如果您想要实现邮件接受和发送功能,您需要在邮箱中开启POP3和SMTP协议。一般情况下,POP3协议用于邮件的接受,SMTP协议用于邮件的发送。我们以QQ邮箱为例,如果您需要在您的系统中使用一个QQ邮箱为您接受和发送邮件,首先...原创 2018-04-18 14:26:21 · 6710 阅读 · 0 评论 -
Java高级系列——如何创建和销毁对象
本系列文章我们我们将会覆盖一些高级的Java概念,我们假设你对Java语言已经有一些基础知识。本系列文章并不是一个完整的参考,而是一个将您的Java技能提升到下一个级别的详细指南。Java是面向对象的编程语言,所以新实例(objects)的创建可能是它最重要的概念之一。在新的类实例中构造器(Constructors)扮演了非常核心的角色,Java对于构造器(Constructors)的定义提供了很多方案。原创 2017-12-30 14:28:55 · 15588 阅读 · 1 评论 -
Java高级系列——如何设计类和接口
一、介绍无论你使用哪一种编程语言(在这里Java也不排除),遵循一种好的设计规则对于写出清晰、易于理解、可测试、长生命周期以及易于维护的代码来说非常关键。在本系列文章的这一部分我们将会讨论Java语言提供的基础构件和引进的一些设计规则来帮助大家在项目研发过程中做出最好的设计决策。确切的讲,我们将会讨论接口(interfaces)和接口默认方法(interfaces with default原创 2018-01-06 14:27:55 · 14677 阅读 · 1 评论 -
快速排序算法(Java实现)
1、基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2、算法步骤获得待排序数组选取合适的数字作为排序基准数字(一般情况下选取数组或者子数组的第一个数字)。将待排序数组中比基准数字小的放在基准数字的左边得到sub1,比基准数...原创 2017-10-25 14:09:37 · 965 阅读 · 0 评论 -
Java面试之Spring面试知识点
Spring是一个一站式构建企业级应用的一个轻量级解决方案框架。Spring是模块化的,允许用户根据自己需求使用特定模块。你可以使用IOC容器和一些web框架,也可以只使用Hibernate代码或者JDBC抽象层。Spring框架支持声明式事务管理,支持通过RMI或者Webservice远程访问你的业务逻辑,并且提供非常多的持久化方案持久化数据。原创 2017-11-01 17:39:35 · 620 阅读 · 0 评论 -
Java基础之冒泡排序算法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。原创 2017-10-24 18:39:23 · 432 阅读 · 0 评论 -
插入排序和希尔排序(Java实现)
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。希尔排序算法是插入排序的一种更高效的改进版本。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。希尔排序对增量序列的选择没有严格规定。原创 2017-11-09 15:21:11 · 1559 阅读 · 0 评论 -
一文读懂抽象类(Java)
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。原创 2017-11-07 09:41:23 · 387 阅读 · 0 评论 -
编程式实现Spring AOP 引入(Introduction)和切面(Advisor)
Spring Introduction(引入),Spring Advisor(切面)原创 2017-04-21 14:03:21 · 1619 阅读 · 0 评论 -
编程式实现Spring AOP
在我们使用Spring的过程中,经常会接触到AOP这个概念,但是在实际的项目使用过程中,大部分都是通过配置的方式来实现方法的增强,今天我们通过这篇文章来告诉大家,在Spring中如何通过编程的方式来实现方法的前置增强,后置增强和环绕增强。原创 2017-04-20 16:28:29 · 534 阅读 · 0 评论 -
java代理技术简介
代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。原创 2017-04-19 15:30:43 · 354 阅读 · 0 评论 -
Integer与Int比较
Integer与Int比较首先看一段比较有意思的代码:Integer a = 1000,b=1000; Integer c = 100,d=100; System.out.println(a==b); System.out.println(c==d); 如果这道题你能得出正确答案,并能了解其中的原理的话。说明你基础还可以。如果你的答案 是 true 和true的话,你的基础就有所原创 2017-10-17 12:18:26 · 533 阅读 · 0 评论 -
归并排序算法(Java实现)
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。原创 2017-10-26 18:17:37 · 391 阅读 · 0 评论 -
选择排序算法
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 常见的选择排序包括:简单选择排序,树形选择排序,堆排序。原创 2017-11-03 18:06:21 · 629 阅读 · 0 评论 -
Java高级系列——如何使用、何时使用泛型(Generics)?
一、介绍泛型的概念代表了对类型的抽象(C++开发人员熟知的模板)。它是一个非常强大的概念,它允许开发抽象算法和数据结构,并提供实体类型以供后续操作。在早期的Java版本中并未出现泛型,泛型是在Java 5发布之后被添加到Java中的。从那以后,可以说泛型彻底改变了Java程序的编写方式,提供了更强大的类型保证,使代码更安全。本文我们将会从接口、类、和方法的开始去讨论有关泛型的用法。泛型提供原创 2018-01-10 18:32:15 · 6100 阅读 · 0 评论 -
Java垃圾回收(2)
本文我们将会描述并行垃圾回收(Parallel GC)是如何工作的。具体来说,这是一个在Eden空间运行Parallel Scavenge收集器、在老年代(Tenured generation)空间运行并行标记(Parallel Mark)和Sweep收集器的组合。你可以通过传入参数’ -XX:+UseParallelOldGC’来获取这些特性,虽然在某翻译 2017-12-24 15:49:08 · 459 阅读 · 0 评论 -
Java垃圾回收(3)
CMS(Concurrent Mark Sweep)垃圾收集器Hotspot中的parallel垃圾收集器旨在尽量减少应用程序花费在垃圾收集上的时间,这被称为吞吐量(throughput)。对于所有的应用来说,这并不是很适当的折中方案,有些所谓的延迟需求(latency requirement)要求系统停顿翻译 2017-12-26 15:10:58 · 337 阅读 · 0 评论 -
Java垃圾回收(1)
本文是关于垃圾回收(GC)系列的第一篇文章。我希望通过这一系列的课程能够覆盖一些垃圾回收的原理和在hotspot虚拟机中的一些主要的垃圾回收器。本文仅仅只是描述什么是垃圾回收和不同垃圾收集器的共同元素。翻译 2017-12-23 14:40:44 · 464 阅读 · 0 评论 -
Java流(Stream)操作实例-筛选、映射、查找匹配
Java流(Stream)操作实例-筛选、映射、查找匹配原创 2017-11-24 15:26:57 · 76196 阅读 · 12 评论 -
Java流(Stream)简介
要讨论流,我们先来谈谈集合,这是最容易上手的方式了。 Java 8中的集合支持一个新的stream方法,它会返回一个流(接口定义在java.util.stream.Stream里)。那么, 流到底是什么呢?简短的定义就是“从支持数据处理操作的源生成的元素序列”。让我们一步步剖析这个定义。原创 2017-11-24 11:54:39 · 2752 阅读 · 1 评论 -
Java值、引用和对象
每种编程语言都有自己操作内存中元素的方式,有时候,程序员必须注意将要处理的数据是什么类型,是直接操纵元素,还是通过某种间接的表示来操纵对象。本文简单介绍Java中如何分配内存,值类型和对象的存储逻辑。原创 2017-12-01 10:10:21 · 954 阅读 · 2 评论