![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
雨临Lewis
个人博客地址:https://lewky.cn
展开
-
java笔记-replace(), replaceAll(), replaceFirst()
java有三个替换String的函数:replace(), replaceAll(), replaceFirst(),其区别如下:replace()是直接替换对应的字符串,而replaceAll(), replaceFirst()这两个函数则是使用正则表达式来替换字符串。Stirng str = "aaabb";System.out.println(s.replace("a", "#")); //原创 2018-02-23 11:54:16 · 862 阅读 · 0 评论 -
验证邮件地址的Java正则表达式
最近写了个Java正则表达式来验证RFC 5322规范的邮件地址,这个邮件地址比较复杂,对于这样一个地址:userName@domainName,它满足以下条件:对于userName 1、允许使用以下所有字符作为用户名: [A-Z], [a-z], [0-9], [.], [-], [_], [@], [!], [#], [$], [%], [&], [‘], [*]...原创 2018-04-03 10:14:59 · 5381 阅读 · 0 评论 -
Java笔记-序列化的注意点
1、使用serialVersionUID在Eclipse中,如果一个类实现了Serializable接口,且没有给这个类设置一个serialVersionUID,就会有一个警告标志: The serializable class BaseEntity does not declare a static final serialVersionUID field of type long...原创 2018-06-28 01:13:53 · 771 阅读 · 0 评论 -
foreach循环报NPE空指针异常
前言最近debug时忽然发现,如果一个集合赋值为null,那么对该集合进行foreach循环(也叫增强for循环)时,会报NPE(即空指针异常NullPointerException)。代码如下:final List<String> list = null;// final List<String> list = new ArrayList<>();f...原创 2018-10-14 20:46:52 · 4999 阅读 · 0 评论 -
Java - Class版本号和UnsupportedClassVersionError
问题分析Java是向下兼容的,每一个jdk版本都有对应的class版本号(major + minor version numbers);如果用低版本的jvm去加载高版本jdk编译的类,就会报错:java.lang.UnsupportedClassVersionError源码中关于这个UnsupportedClassVersionError的注释如下:/*** Thrown when the...原创 2018-11-12 22:09:11 · 1129 阅读 · 0 评论 -
如何正确地打印异常堆栈信息
前言最近老大让我修改项目里所有和log有关的代码,之前我也用过log4j、slf4j或者Logback等日志框架/接口,一直以为打印异常信息就是简单地一句log.info()或者log.error()而已,没想到原来一直都使用错了,以至于有些错误信息没能在log文件中打印出堆栈信息,最终难以定位bug,排查困难。如何正确地打印异常的堆栈信息?一般在catch到异常的时候,不要使用e.prin...原创 2018-11-11 11:08:12 · 21779 阅读 · 2 评论 -
Java - 安装jdk并设置环境变量
前言双十一买了台新的笔记本,需要重新安装下Java,这里记录下安装的过程,毕竟万事开头难,就算是老手也不一定能一次就把Java安装成功。安装jdk作为一名Java开发,当然是要安装jdk了,如果只是需要Java的运行环境,那么安装jre就足够了。另外说下,jdk里以及包含了jre了。首先去官网下载Java,由于Sun被Oracle收购了,现在去官网下载Java需要先注册一个Oracle账号...原创 2018-11-15 23:34:16 · 1441 阅读 · 0 评论 -
在接口的实现类里使用@Override注解报错
问题分析@Override注解用来检测子类对父类或接口的方法的重写是否正确,但有一次我在Eclipse里对接口的实现类里使用@Override注解却报错,不过在父类的子类里使用该注解却是正常的。百度了下才知道原来这是jdk1.5时的一个bug,在1.6时已经被修复;那么问题来了,我使用的jdk是1.8,为什么会报这个错误?明明之前也在接口的实现类里用过该注解,却没问题。由于Eclipse经常抽...原创 2018-11-20 21:56:03 · 2776 阅读 · 1 评论 -
Java - 怎么通过环境变量来切换jdk版本
问题与分析我在本地安装了1.7和1.8两个版本的jdk,此时我的JAVA_HOME环境变量配置的是jdk1.8,在cmd窗口输入java -version发现报错如下:C:\Users\Lewis>java -versionError: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'h...原创 2018-11-16 22:09:25 · 1961 阅读 · 2 评论 -
如何获取更多关于序列化异常的堆栈信息
问题与解决方法有时候我们的系统会报java.io.NotSerializableException,根据堆栈信息又无法得出有用的信息,无法找到具体是因为哪些类或者变量造成的,可以使用一个java参数-Dsun.io.serialization.extendedDebugInfo=true来得到更加具体的序列化信息。从jdk6开始就可以使用该参数,可以在启动java程序时启用该参数,也可以在项目...原创 2018-12-03 23:46:44 · 985 阅读 · 0 评论 -
Java反编译工具JD-GUI以及Eclipse的反编译插件
什么是反编译高级语言源程序经过编译变成可执行文件,反编译就是逆过程。但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,作为自己开发软件时的...原创 2018-12-10 00:26:19 · 4367 阅读 · 6 评论 -
Access restriction: The type 'JPEGCodec' is not API
问题今天导入项目时Eclipse报错如下:Access restriction: The type 'JPEGCodec' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar')第一次遇到这种错误,百度了下,原来是因为Eclipse默认把访问受限的API...转载 2019-01-18 23:16:14 · 1779 阅读 · 0 评论 -
Java笔记-环境变量正确但是Java版本不对的问题
最近安装了1.8的jdk,在修改了环境变量之后,在cmd里输入java -version和javac -version都显示正常,但是过了几天之后,jdk的版本又莫名其妙变回了1.7版本。网上查了各自方法,基本都是在说环境变量的问题,但是我的环境变量是正确的,最后偶然发现,使用cmd进入C:\ProgramData\Oracle\Java\javapath目录,接着运行java -versio原创 2018-01-09 10:14:25 · 1826 阅读 · 0 评论 -
Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法
在使用sun.misc.BASE64Encoder时报错如下:Access restriction: The type BASE64Encoder is not accessible due to restriction on required library C:\jdk1.7.0_79\jre\lib\rt.jar原因与替代方案查了下资料,这是因为BASE64Encoder/BASE64Dec原创 2018-01-04 00:36:20 · 18525 阅读 · 0 评论 -
Java程序的执行过程
Java的一门编译解释型语言(先编译后解释)。Java的源文件( .java File)被Java Complier(javac)编译成Java字节码文件/类文件( .class File),再由JVM(Java Virtual Machine/Java虚拟机)的Class Loader(类加载器)加载到运行数据区域(Runtime Data Areas),然后执行引擎(Execution E原创 2017-08-10 10:39:06 · 1145 阅读 · 0 评论 -
如何将String转换成Date类型
在web开发中,页面表单传到后台的数据一般都是String类型,如果传回的是一个时间,需要在后台将其转换成Date类型该怎么做?一般来说,表单的数据比较多,我们会借助第三方工具BeanUtils来完成数据的自动封装,而BeanUtils提供了一个时间转换器,可以将String数据转换成Date类型,然后通过copyPropertiy()完成日期的封装。 // 由于时间是date类型,所原创 2017-08-06 22:28:01 · 31524 阅读 · 3 评论 -
几个主流的Java连接池
原文地址:http://developer.51cto.com/art/201006/207768.htm51CTO曾经为我们简单的介绍过Java连接池。要了解Java连接池我们先要了解数据库连接池(connection pool)的原理,Java连接池正是数据库连接池在Java上的应用。——我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为转载 2017-08-25 10:57:32 · 232 阅读 · 0 评论 -
JAVA多线程和并发基础面试题
多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面试问题1. 进程和线程之间有什么不同?一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的转载 2017-09-20 23:56:40 · 695 阅读 · 0 评论 -
【Java线程】锁机制:synchronized、Lock、Condition
1、synchronized把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。1.1 原子性原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突。1.2 可见性可见转载 2017-09-21 00:21:49 · 209 阅读 · 0 评论 -
java与C++的区别
Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同: (1)Java比C++程序可靠性更高。有人曾估计每50行C++程序中至少有一个BUG。姑且不去讨论这个数字是否夸张,但是任何一个C++程序员都不得不承认C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。Java语言通过改变语言的特性大大提高了程序的可靠性。 (2)Java语言不需要程序对内存转载 2017-09-21 10:30:35 · 256 阅读 · 0 评论 -
Java中哪些异常必须声明并捕获,否则产生编译错误
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。也就是说,非RuntimeException异常类或者其子类的的异常都要声明捕捉。只有RuntimeException 或者是其子类的异常是不需要进行声明捕捉的。 Throwable转载 2017-10-05 10:49:47 · 10413 阅读 · 0 评论 -
静态代码块、构造代码块和代码块
静态代码块static{ //do something}静态代码块如上所示,和静态变量和静态方法一样,在类被类加载器首次加载时被执行,之后就不会被再次执行了(除非类加载器卸载该类后重新加载这个类)。当有多个静态代码块时按顺序执行。构造代码块public class Test{ { //do something }}和静态代码块类似,但是没有static原创 2017-10-30 23:43:18 · 506 阅读 · 0 评论 -
JavaMail-发送一封简单邮件(附带附件)
最近使用到JavaMail,写了个简单的工具类,记录一下。import java.util.Date;import java.util.Properties;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.原创 2017-11-22 23:31:05 · 1321 阅读 · 0 评论 -
使用POI和dom4j来解析Excel生成Xml
工作中有时候我们需要使用Apache的POI来读写Excel文件,而dom4j则用来解析或者生成Xml文件,由于涉及到IO流,所以又使用了commons-io提供的IOUtils来关闭流。需要的Jar包 POI和dom4j需要的jar包一个应用POI和dom4j的简单例子import java.io.File;import java.io.FileInputStream;import ja原创 2017-11-23 22:20:39 · 3154 阅读 · 0 评论 -
StringUtils.split()和string.split()的区别
场景出于业务考虑,将多个字符串拼接起来时,使用的分隔符是;,;。如果要将这样一个拼接来的字符串分割成原本的多个字符串时,就需要使用到jdk自带的split()方法。不过因为公司的编程规范,改为使用了Apache工具类的StringUtils.split()。之后就发现,当被拼接的字符串里含有;或,时,就会出现分割不正确的问题。具体例子下面的代码,使用了上述的两种split方法,猜猜结果是...原创 2019-04-09 23:53:45 · 2263 阅读 · 3 评论