java
文章平均质量分 52
zhengholien
静如止水,厚积薄发...
展开
-
String类为什么被定义为final类型
1.安全性:final类型的类不能被继承,并且String类中的final方法可以防止其内部的方法被重写,乱改。 2.效率:final类型的类被JVM当作内联函数,提高了性能。原创 2016-03-01 22:02:22 · 1618 阅读 · 0 评论 -
lambda表达式的10个示例
原文链接 Java8 lambda表达式10个示例Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动。特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里。在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码。而定义行为最重要的那行代码,却混在中间不够突出。Lambd转载 2017-07-19 17:58:47 · 4190 阅读 · 1 评论 -
java多线程之可见性
可见性:一个线程对共享变量值的修改能够及时地被其他线程看到JMM(java memory model)描述了java程序中各种变量的访问规则,以及在JVM中将变量(线程共享变量)存储到内存和从内存中取出变量这样的底层细节。JMM是一种规范,这也是导致java多线程会出现可见性问题的原因,所以了解一下java内存模型还是很有必要的。所有变量都存储在主内存中(分配给进程的内存)原创 2017-09-05 09:54:02 · 1948 阅读 · 0 评论 -
遍历集合ConcurrentModificationException异常
在遍历集合时,如果进行了增删操作,有时会抛出 java.util.ConcurrentModificationException异常。这类异常也被称为 fail-fast,它是Java集合的一种错误检测机制。出现异常的原因:使用了iterator和foreach(底层也是使用了iterator的方式)进行遍历,并且遍历期间进行add或remove操作,那就有可能发生此异常。出现异常的关键就原创 2017-09-06 16:45:05 · 362 阅读 · 0 评论 -
java9新特性小探
模块化选择性封装和暴漏指定的包,即不编译成.class文件,这样我们可以根据一个项目需求自定义组件,比如减少rt.jar的大小,没用到的package将不会包含在我们的项目里。支持HTTP2.0Java配备一个全新的HTTP客户端来替代HttpURLConnection,并且同时还实现HTTP 2.0和websockets。改进javadoc以前对某个类不熟悉,还得先g原创 2017-09-14 12:34:49 · 983 阅读 · 0 评论 -
当try catch遇上return
如果我们执行一个方法,在方法内抛出异常,那么抛异常那条代码后面的代码就不会被执行了,也就意味着如果我们的方法不是void的话,就没办法返回值,有一个办法,就是在catch代码块和finally代码块返回,但是实际开发中我们不能依赖异常机制来进行语句控制,这里只是了解一下当return语句出现在catch块和finally块里会出现什么情况。测试1,让方法抛异常,并且catch块中有re原创 2017-09-14 22:54:04 · 794 阅读 · 0 评论 -
java各种锁机制的性能比较
下面基于jdk8,8G内存,i5处理器对java的synchronized、semaphore、reentrantLock、atomicXXX进行对比,结论和注释都比较全,其中注意使用countDownLatch来控制子线程都执行后(累加到addTime次),主线程再进行时间计算,并且注意把latch.countDown()方法放进子线程的run方法的最后,否则会出现子线程任务没执行完,而latc原创 2017-09-20 08:42:59 · 1984 阅读 · 1 评论 -
java的varargs机制
偶然看到有人把main方法的方法签名这样写:public static void main(String... args),成功引起我的注意哈哈,赶紧查了一下,原来“类型...“或者“类型 ...”这两种形式的参数代表个数可变的参数(>=0)。这种机制在jdk1.5出现,Varargs”是“variable number of arguments”的意思,它可以定义能和多个实参相匹配的形参。这种机原创 2017-09-20 10:06:52 · 700 阅读 · 0 评论 -
Java类加载机制详解
一、类加载器类加载器(ClassLoader),顾名思义,即加载类的东西。在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘、网络或其他来源加载到内存中,并对字节码进行解析生成对应的Class对象,这就是类加载器的功能。我们可以利用类加载器,实现类的动态加载。二、类的加载机制在Java中,采用双亲委派机制来实现类的加载。那什么是双亲委派机制?在J转载 2017-09-21 20:57:10 · 218 阅读 · 0 评论 -
jdk和cglib动态代理
什么是代理模式?当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象。按照代理对象的创建时期不同,可以分为两种:静态代理:事先写好代理类,在程序运行前就已经存在了;动态代理:在程序运行中创建代理对象(反射、类编译和类动态加载)。此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对...原创 2017-10-11 11:14:38 · 325 阅读 · 0 评论 -
java简单实现一致性哈希算法
什么是一致性哈希算法一种特殊的哈希算法,这种算法使得哈希表、集群的规模在伸缩时尽可能减少重映射(remap)。为什么需要它一致性哈希基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑(集群)中分布存储和路由。每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中。两种常见的一致性哈希算法余数hashhash_原创 2017-10-20 23:42:34 · 1294 阅读 · 0 评论 -
创建对象时JVM为我们做了什么
如果类没有被加载到内存中,则先进行类加载类中的静态代码块和静态属性初始化值(按代码顺序执行)创建对象时发生了什么?非静态代码块和非静态属性初始化值(按代码顺序执行),然后调用构造方法下面这个例子我们创建B的一个对象,B类之前没被加载,B类继承了A。A中有两个属性,一个静态的staticNum和一个非静态的num,分别用静态方法staticMethod和非静态方法method原创 2017-11-25 11:13:51 · 705 阅读 · 1 评论 -
Timer简单使用
什么是定时任务调度?基于给定的时间点、时间间隔、执行次数自动执行任务作用:定时记录日志,定时备份数据、定时推送信息等等Timer的定义:有且仅有一个后台线程对多个业务线程进行定时定频率的调度(jdk自带,位于java.util包)主要构件Timer和TimerTask Timer函数c原创 2017-07-31 16:35:40 · 608 阅读 · 0 评论 -
JavaMail简单实践
JavaMail是一种处理电子邮件的编程接口,它是Sun发布的用来处理email的API,通俗地讲,就是帮助我们用java代码实现邮件的发送和接收。javamail在web开发中的应用1.用户注册后,网站发送一封激活邮件验证2.用户过生日,系统发送生日祝福邮件3.将最新活动和优惠以邮件的形式告知会员...邮件开发中的基本术语1.电子邮箱电子邮箱(E-ma原创 2017-06-01 13:42:30 · 1906 阅读 · 0 评论 -
java注解浅析
注解的定义:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法注解的本质是接口,并且都继承自根接口Annotationjava注解分类:按照运行机制分源码注解(SOURCE):只存在于源码中,编译成.class文件就不存在了编译时注解(CLASS):存在于源码和.class文件中(Override)运行时注解(RUNTIME):运行阶段还起作用原创 2017-02-14 20:23:16 · 465 阅读 · 0 评论 -
默认构造方法不一定总是public
两个注意点:一,默认构造方法未必是public的,二,默认构造方法肯定有super();(Object类的是空构造方法)。实际情况是,默认构造方法的修饰符是和所在类的修饰符一致的。比如public class Test{}它的默认构造方法是public Test(){super(); //可以不写}而class Tes原创 2016-02-20 21:17:33 · 2766 阅读 · 0 评论 -
接口为什么一定要实现其所有方法
接口可以看作是一种机制。它的提出就是为了定制必须满足某些功能的类(类必须实现接口定义里的全部方法)否则,如果我们写程序的时候,每次从接口上调用一个方法的时候,还要先检测一下:if(i.IsImplemented(i.f))那就像前面某位朋友说的,要接口还有啥用啊?直接从Object上进行检测不就得了?总归所有的类都从Object继承来的。而且如果检测失败了怎么办?抛出异常?何必转载 2016-03-16 14:19:16 · 4864 阅读 · 0 评论 -
java就近原则浅析
先看下面的例子public class Test6就近原则 {public static void main(String[] args) {A a = new B();B b = new B();a.fun();b.fun();}}class A {private void print() { System.out.prin原创 2016-03-22 13:48:36 · 4784 阅读 · 3 评论 -
抽象类和接口的区别
1.接口是公开的,其内部的变量和方法不能是私有的,而抽象类可以有自己的私有变量和方法。2.实现某个接口一定要实现该接口全部的方法,而抽象类可以只重写需要的某个方法。3.接口可以弥补java不能多重继承的缺点,一个类只可以继承一个抽象类,但是可以实现多个接口。4.接口还有标识(没有包含任何方法,如Remote接口),数据共享(内部的属性全部是常量)的作用。一般在应用,最顶级的原创 2016-03-16 14:06:33 · 198 阅读 · 0 评论 -
重载和重写
下面代码段的输出结果是什么?public class MethodOverrideVsOverload { public boolean equals( MethodOverrideVsOverload other ) { System.out.println("MethodOverrideVsOverload equals method reached" ); retu转载 2016-04-07 18:40:40 · 221 阅读 · 0 评论 -
==与equals
下面的代码片段的输出是什么?A2.输出结果是:s1 and s2 are equals()可以用下面这个图来解释:因此,上面的问题考察了面试者对”==” 和 “equals( )”在Java对象上如何应用的理解是否正确。前者比较引用,后者则比较对象中真正的值。接着还可以有下面的问题:Q.下面代码片段的输出是什么?转载 2016-04-07 18:53:47 · 195 阅读 · 0 评论 -
String and StringBuffer
下面的代码片段会输出什么?1234String s = " Hello ";s += " World ";s.trim( );System.out.println(s);A1.正确输出是” Hello World “。由于字符串前后都转载 2016-04-07 23:17:46 · 342 阅读 · 0 评论 -
反射浅析
java里万物皆对象,(静态)成员变量、普通数据类型、方法、构造函数都是对象,甚至是void关键字也是对象,它们都是java.lang.Class类的实例对象,比如Class c1 = int.class;Class c2 = Double.class; Class c3 = void.class;有三中表示方式:1.Class c1 = 类名.class;2.通过类的对象原创 2016-03-26 22:31:43 · 289 阅读 · 0 评论 -
iteration and recursion
写一段代码来计算给定文本内字符“A”的个数迭代的方式代码如下:接下来,递归方式的代码如下:上面的例子中其实不必采用递归,循环的方式可以达到目的,但是在某些情况下采用递归方式则代码会更加简短易读。递归方法在循环树结构以及避免丑陋的嵌套循环的情况下是非常好用的。常规递归方法(亦称,头递归)在上面演示了,这种方式会增加调用栈的大小。每次转载 2016-04-09 15:37:34 · 380 阅读 · 0 评论 -
单例模式
单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。懒汉模式class Single {private Single(){} //私有构造方法private static synchronized final Single s;public static Single getInstance()原创 2016-04-22 09:47:57 · 240 阅读 · 0 评论 -
java传参方式
参数有两种方式,普通类型如int,String等为传值,其他的如JAVA对象,数组,集合等均为传址。传值方式只是把值传入参数,在方法里的任何动作与源无关,源的值不变;传址方式是把源对象的地址传入方法,在方法里的动作都是直接操作源对象,所以能改变其值。原创 2016-06-23 23:30:44 · 640 阅读 · 0 评论 -
java8接口默认方法和静态方法
java8中对接口进行了扩展,允许我们在接口中定义具体方法,一种是默认方法,即在方法返回值前加“default”关键字,另一种是加“static”的静态方法。扩展带来的好处1.java拥有了类似多继承的功能,虽然在对象关系中,继承关系和实现关系还是有有所区别,但是在作用上与C++的多继承类似;2.接口可以帮我们实现一些比较固定的方法,不必每次实现一个接口就得实现所有方法;3.向前兼原创 2017-11-26 21:20:22 · 878 阅读 · 0 评论