
Java
文章平均质量分 79
Java技术栈
Java每天一篇干货,微信公众号:Java技术栈
展开
-
卧槽!Java 中的 xx ≠ null 是什么新语法?
奇怪的不等于(≠)最近,栈长用 IntelliJ IDEA 看源码时发现:咦~这是什么鬼?Java 不等于的写法不是一直都是 != 么?什么时候可以写 ≠ 了??不科学啊~以为我是老花眼了,认真看了几遍,觉得应该是 IDEA 的特效吧,然后去点那个符号,发现也还原不了原样。。。然后互联网网冲浪了一翻,终于被我找到了这个开关:Preferences > Editor > Reader Mode > Font ligatures Reader Mode: 用于只读模式原创 2021-06-22 14:46:38 · 437 阅读 · 1 评论 -
疯了!同事又问我为什么不能用 isXXX
最近在做Code Review,写下了这篇文章:代码写成这样,老夫无可奈何!,说多了都是泪啊。。最近又有人同事跑过来质疑我: 为什么变量名取名不能用 isXXX 这种方式,这样有什么问题?!醉了,讲了好多次都记不住,我让他自己去看阿里巴巴的《Java开发手册》,或者自行百度,说实话,有点工作经验人都知道,这都是基础的东西。本没什么好写的,鉴于有好多小白程序员,今天栈长就把为什么不能用 isX...原创 2019-12-12 10:20:22 · 1160 阅读 · 0 评论 -
歪国人整理的 2019 年 Java 开发路线图,值得参考!
许多Java开发人员都希望通过某种Java成长路线图,来解答有关:该学习哪些技术,使用哪些工具以及框架之类的问题。在此,我将向大家展示一张根据自己多年经验总结出的路线图。该路线图在保持简单可行的基础上,介绍了各种具有业界标准、且方便多数人遵循的工具和程序库。该路线图如下所示,希望能够对您起到指导和借鉴的作用。如图不清晰,可以关注微信公众号Java技术栈,在后台回复关键字"19ja...转载 2019-11-06 14:33:38 · 1178 阅读 · 1 评论 -
JAVA调用CMD命令
String commandText = "cmd /c start D:/index.html";// String commandText = "cmd /c start osk";//这里可以是命令 try { Runtime.getRuntime().exec(commandText); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }原创 2010-06-03 17:16:00 · 957 阅读 · 0 评论 -
hibernate自动导出数据库表
<br />publicstaticvoid main(String[] args) throws Exception{ //配置环境,分析xml映射文件<br /> Configuration conf=new Configuration().addClass(User.class);<br /><br />//生成并输出sql到文件(当前目录)和数据库<br /> SchemaExport dbExport=new SchemaExport(conf);<br />原创 2010-06-11 15:39:00 · 1074 阅读 · 3 评论 -
Java相对路径/绝对路径总结
<br />1.基本概念的理解<br />绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:<br />C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。<br />相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在<br />Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,".转载 2010-06-21 09:20:00 · 1030 阅读 · 0 评论 -
java类模拟客户端调用servlet (httpClient)
<br />import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;<br />import org.apache.commons.httpclient.HttpClient;<br />import org.apache.commons.httpclient.HttpException;<br />import org.apache.commons.httpclient.HttpStatus;<br />import org.a原创 2010-06-24 11:44:00 · 4182 阅读 · 0 评论 -
金融系统中正确的金额计算及存储方式
昨天微信群里在讨论金额计算及存储的话题,今天特来结贴一下。经典的精度丢失问题Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面的示例。public static void main(String[] args) { test1(); test2();}private static void test1() { doub原创 2018-01-11 13:12:36 · 1785 阅读 · 0 评论 -
神奇,教你用随机数打印hello world
下面是一段随机数程序。public static void main(String[] args) { System.out.println(randomString(-229985452) + " " + randomString(-147909649));}public static String randomString(int seed) { Random r原创 2018-01-11 13:14:27 · 782 阅读 · 1 评论 -
Java对象引用四个级别(强、软、弱、虚)
最近,高级Java技术栈微信群中,有一些猿友在讨论JVM中对象的周期问题,有谈到引用的级别,现在为大家做个总结吧,虽然大多数公司并没有意识或者用到这些引用,但了解这些基本概念对熟悉整个垃圾回收机制和面试是非常有帮助的。为了使程序能更加灵活地控制对象的生命周期,从JDK1.2版本开始,JDK把对象的引用级别分为了以下四种。这4种级别由高到低依次为:强引用(StrongReferenc原创 2018-01-12 17:24:36 · 1221 阅读 · 1 评论 -
Java7任务并行执行神器:Fork&Join框架
Fork/Join是什么?Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分解成小任务,然后小任务又可以继续分解,然后每个小任务分别计算出结果再合并起来,最后将汇总的结果作为大任务结果。其思想和MapReduce的思想非常类似。对于任务的分割,要求各个子任务之间相互独立,能够并行独立地执行任务,互相之间不影响。Fork/Join的运行流程图如下:我们可以通过原创 2018-01-12 17:25:03 · 5294 阅读 · 4 评论 -
jdk紧急漏洞,XMLDecoder反序列化攻击
昨天在公司发现了一个jdk中的XMLDecoder反序列化的漏洞,看起来很危险!下面通过两个示例来看看这个漏洞的危害!示例1:利用XmlDecoder删除本地文件首先来看这个xmldecoder.xml文件内容:java version="1.8.0_151" class="java.beans.XMLDecoder"> object class="java.lang原创 2018-01-12 17:26:05 · 3506 阅读 · 0 评论 -
Java中的宏变量,宏替换详解。
群友在微信群讨论的一个话题,有点意思,特拿出来分享一下。首先来看下面这段程序,和群友分享的大致一样。public static void main(String[] args) { String hw = "hello world"; String hello = "hello"; final String finalWorld2 = "hello";原创 2018-01-12 17:26:41 · 8386 阅读 · 0 评论 -
JDK8之新特性扩展篇
之前分篇章讲了一些JKD8中添加的新特性,还有一些新特性这里也一并讲下。BASE64base64编码解码已经被加入到了jdk8中了。import java.nio.charset.StandardCharsets;import java.util.Base64;public class Base64Test { public static void main(St原创 2018-01-22 09:12:48 · 525 阅读 · 0 评论 -
JDK8新特性之方法引用
什么是方法引用方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用。如:List list = Arrays.asList("a","b","c");list.forEach(str -> System.out.print(str));list.forEach(System.out::print);上面两种写法是等价的。方法引用原创 2018-01-22 09:12:56 · 2814 阅读 · 0 评论 -
Java多线程sleep和wait的区别,总结得非常好。
我们都知道sleep是让线程休眠,到时间后会继续执行,wait是等待,需要唤醒再继续执行,那么这两种方法在多线程中的表现形态,它们各有什么区别呢?可以总结为以下几点。使用上从使用角度看,sleep是Thread线程类的方法,而wait是Object顶级类的方法。sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用。CPU及资源锁释放sleep,wa原创 2018-01-14 10:14:21 · 580 阅读 · 0 评论 -
JDK8新特性之函数式接口
什么是函数式接口先来看看传统的创建线程是怎么写的Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("t1"); }});t1.start();再来看看使用了函数式接口是怎么写的Thread t2 = ne原创 2018-01-15 09:20:01 · 463 阅读 · 0 评论 -
JDK8新特性之Lambda表达式
什么是Lambda表达式Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。Lambda语法一行执行语句的写法:(parameters) -> expression如果有多行执行语句,可以加上{}(parameters) -> { statements; }如:原创 2018-01-15 09:20:20 · 567 阅读 · 0 评论 -
Java多线程sleep和wait的区别,总结得非常好。
我们都知道sleep是让线程休眠,到时间后会继续执行,wait是等待,需要唤醒再继续执行,那么这两种方法在多线程中的表现形态,它们各有什么区别呢?可以总结为以下几点。使用上从使用角度看,sleep是Thread线程类的方法,而wait是Object顶级类的方法。sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用。CPU及资源锁释放sleep,wa原创 2018-01-15 09:20:50 · 1755 阅读 · 1 评论 -
hashCode和identityHashCode的区别你知道吗?
hashCode关于hashCode参考之前的文章,点击参考之前文章。identityHashCodeidentityHashCode是System里面提供的本地方法,java.lang.System#identityHashCode。/** * Returns the same hash code for the given object as * would be原创 2018-01-23 14:02:42 · 1004 阅读 · 0 评论 -
递归算法介绍及Java应用实战
什么是递归算法递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数)。递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。递归其实就是在栈内存中不断的加载同一个函数什么时候用递归呢?当一个功能被重复使用,而每一次使原创 2018-01-06 16:52:12 · 663 阅读 · 0 评论 -
常见的3种Class级别的错误
ClassNotFoundException很明显,这个错误是找不到类异常,即在当前classpath路径下找不到这个类。ClassNotFoundException继承了Exception,是必须捕获的异常,所以这个异常一般发生在显示加载类的时候,如下面两种方式显示来加载类并要捕获异常。public static void main(String[] args) { tr原创 2018-01-07 08:11:18 · 3322 阅读 · 0 评论 -
关于Java序列化你应该知道的一切
什么是序列化我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的。怎么序列化一个对象?要序列化一个对象,这个对象所在类就必须实现Java序列原创 2018-01-07 08:12:27 · 910 阅读 · 0 评论 -
什么是Kotlin?Java的替代语言?
什么是KotlinKotlin是一个基于JVM的新的编程语言,2010年由IntelliJ IDEA所在的JetBrains公司开发,自2012年以来一直开源。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。Kotlin是面向对象和功能编程功能的JVM和Android的通用、开源、静态的实用的编程语言。它专注于交互性、安全性及清晰度原创 2018-01-07 08:13:05 · 2604 阅读 · 0 评论 -
JDK8新特性之Stream流
是什么是Stream流java.util.stream.StreamStream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西。流可以简单的说是处理数据集合的东西,可以申明式流式API来处理集合,而不是写一个逻辑实现。流分类流分为顺序流及并行流,顺序流即每个指令按顺序执行,并行流即集合里面的操作并行执行。List numbers = Arrays.as原创 2018-01-16 11:06:32 · 2351 阅读 · 1 评论 -
Java管理Cookie增删改查操作。
Cookie属性了解这几个属性之后,就知道如何进行Cookie的操作了。nameCookie的名称。valueCookie的值。maxAgeCookie的失效时间,有以下几种值,默认为-1 值 说明 负数 浏览器关闭后cookie就失效 0 马上清除cookie 正数 设置过期时间,单位:秒原创 2018-01-08 09:38:55 · 450 阅读 · 0 评论 -
注意:字符串substring方法在jkd6,7,8中的差异。
标题中的substring方法指的是字符串的substring(int beginIndex, int endIndex)方法,这个方法在jdk6,7是有差异的。substring有什么用?substring返回的是字符串索引位置beginIndex开始,endIndex-1结束的字符串。来看这个例子:String x = "abcdef";x = x.substring原创 2018-01-31 18:39:19 · 1538 阅读 · 0 评论 -
JVM运行时区域详解。
我们知道的JVM内存区域有:堆和栈,这是一种泛的分法,也是按运行时区域的一种分法,堆是所有线程共享的一块区域,而栈是线程隔离的,每个线程互不共享。线程不共享区域每个线程的数据区域包括程序计数器、虚拟机栈和本地方法栈,它们都是在新线程创建时才创建的。程序计数器(Program Counter Rerister)程序计数器区域一块内存较小的区域,它用于存储线程的每个执行指令,每原创 2018-01-08 09:42:06 · 411 阅读 · 0 评论 -
JDK8新特性之接口默认方法与静态方法
接口默认方法与静态方法有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题。接口静态方法类似于默认方法,但是我们不能在实现类中覆盖它们,可以避免默认方法在实现类中被覆盖实现。之前讲过的JDK8的list.foreache方法,看下源码,其实也是java.lang.Iterab原创 2018-01-17 09:20:21 · 484 阅读 · 0 评论 -
Java父类强制转换子类原则
最近,微信群友在讨论子类父类的转换问题,其实不难,给大家用实例来说明一下就很明了了。我们知道Java中子类转换成父类是没有任何问题的,那父类可以转换成子类吗?来看下面这段程序:public class TestObjectConvert { public static void main(String[] args) { test1();原创 2018-01-25 09:35:56 · 7098 阅读 · 1 评论 -
一张图搞清楚Java异常机制
下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。ThrowableThrowable是Java异常的顶级类,所有的异常都继承于这个类。Error,Exception是异常类的两个大分类。ErrorError是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。Excepti原创 2018-01-09 10:11:43 · 2513 阅读 · 0 评论 -
JDK8新特性之重复注解
什么是重复注解下面是JDK8中的重复注解(java.lang.annotation.Repeatable)定义的源码。@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.ANNOTATION_TYPE)public @interface Repeatable { Class value();原创 2018-01-18 09:15:41 · 1075 阅读 · 0 评论 -
Java高级进阶:自定义ClassLoader
假如我们的类不在classpath下,而我们又想读取一个自定义的目录下的class,如果做呢?读取自定义目录的类示例读取c:/test/com/test.jdk/Key.class这个类。package com.test.jdk;public class Key { private String key = "111111";}自定义ClassLoader原创 2018-01-18 09:15:56 · 902 阅读 · 0 评论 -
字符串拼接+和concat的区别
+和concat都可以用来拼接字符串,但在使用上有什么区别呢,先来看看这个例子。public static void main(String[] args) { // example1 String str1 = "s1"; System.out.println(str1 + 100);//s1100 System.out.println(100 + str原创 2018-01-18 09:16:47 · 7399 阅读 · 0 评论 -
通用唯一标识码UUID的介绍及使用。
什么是UUID?UUID全称:Universally Unique Identifier,即通用唯一识别码。UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为16^32 = 2^128,约等于3.4 x 10^38。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4原创 2018-01-10 09:12:56 · 6153 阅读 · 0 评论 -
Java类初始化顺序,大神3个示例带你躺坑。。
最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量、成员变量、静态代码块、非静态代码块、构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导。示例1:测试单类的初始化顺序public class ClassInitOrderTest { public static String staticField = "static原创 2018-01-19 14:18:51 · 3765 阅读 · 3 评论 -
JDK8新特性之Optional
Optional是什么java.util.OptionalJdk8提供Optional,一个可以包含null值的容器对象,可以用来代替xx != null的判断。Optional常用方法ofpublic static Optional of(T value) { return new Optionalvalue);}为value创建一个Optiona原创 2018-01-19 14:19:26 · 3528 阅读 · 1 评论 -
Java Jar包压缩、解压使用指南
什么是jar包JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。如何打/解包使用jdk/bin/jar.exe工具,配置完环境变量后直接使得jar命令即可。jar命令格式jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名…{ctxu},这四个参数必须选选其...原创 2018-03-08 17:29:17 · 44885 阅读 · 1 评论 -
干货:Java技术栈18年02月精彩好文汇总
一晃眼,一个月过去了,新年也过完了。一晃眼,又老了一岁了,感觉新的一年压力更大了。我们也该为这一个月的技术做做汇总了,错过的同学正好可以统一回顾看看,已经看过的同学也可以再温习一下。。Java技术栈02月汇总活动:新春第一次送书,价值78元 X 3本春节跳槽最新Java面试题及答案整理年后跳槽,5个诀窍帮你找到满意的工作分享一套高级Java笔试题(实拍高清图)史上最全Redis面试题及答案Java...原创 2018-02-28 22:23:53 · 501 阅读 · 0 评论 -
8张图带你轻松温习Java知识
年初四好,一图胜千言,下面图解均来自Program Creek 网站,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。 1字符串不变性下面这张图展示了这段代码做了什么 [code ]String s = "abcd";s = s.concat("ef");[/code]2equals()方法、hashCode()方法的区别HashCode被设计用来提高性能。equa...原创 2018-02-28 22:25:12 · 545 阅读 · 0 评论