java基础学习
文章平均质量分 94
BryantLmm
努力写好每一行代码
展开
-
SimpleDateFormat线程安全问题
前言最近在查资料的时候,偶然看到了SimpleDateFormat不是线程安全的类的相关资料,说实话,一开始看的时候还是惊讶了一把的,从来没想过这个类居然不是线程安全的。今天就来看看这个类的线程安全问题。SimpleDateFormat线程安全分析先看一个很简单的日期处理工具类public class DateUtil { private static final SimpleD...原创 2018-12-24 15:46:35 · 316 阅读 · 0 评论 -
Java中的字符编码
转载:http://www.regexlab.com/zh/encoding.htm 首先,给出结论,在JVM中,在代码中,我们定义的char,String类型的都是unicode字符集。(在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。关于字符集和编码,我在之前有讨论过) 这里还是再说一下把。编码ASCII码那时候的转载 2017-09-29 20:25:38 · 321 阅读 · 0 评论 -
lombok的安装和使用
lombok这个工具呢,怎么说,还是有点逼格的,还是要学下怎么使用。安装lombok1.首先,去官网下载lombok.jar包,https://projectlombok.org/download.html 2.运行lombok.jar 运行jar包的命令 -jar 找到存放lombok.jar的路径 在cmd窗口中执行命令:java -jar F:\lombok\lombok.jar3原创 2017-09-28 00:39:17 · 359 阅读 · 0 评论 -
ClassNotFoundException和NoClassDeFoundError
今天又出现了NoClassDefFoundError这个错误,其实已经出现过很多次了,也知道了一般都是缺少相关Jar包之类的造成的,但是也没进行更深入的了解,今天我们就来稍微的探究一下这个错误到底怎么发生的,他和ClassNotFonudException这一常见异常又有什么区别呢。我们知道这两个Java类都属于异常,那么我们首先来看看他们是checked exception还是unchecked原创 2017-09-28 00:05:09 · 10695 阅读 · 3 评论 -
Java注解详解
一.什么是注解注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。它被广泛的运用在各种Java框架中,和反射、动态代理一起构成了框架中最重要的技术。因为转载 2017-09-10 19:11:52 · 253 阅读 · 0 评论 -
sonarqube代码审查问题汇总
最近,由我们架构组搭建的sonarqube代码审查平台正式的在公司全面推广使用了,使用了之后,发现sonarqube是真的很严格,也发现了自己写的代码中的很多的问题。现在就将这些问题汇总,本文会持续更新。1.Local Variables should not be declared and then immediately returned or thrown (squid:S1488) 直译原创 2017-09-25 21:11:49 · 4292 阅读 · 1 评论 -
Maven tomcat插件debug项目时 ,出现source not found的解决办法
最近换了Eclipse4.7,放弃了之前一直在用的MyEclipse,为什么没有开始用IDEA呢,因为公司目前用的是Eclipse4.7,为了版本统一还是一直用了Eclipse系列的,但是这次使用Eclipse4.7时,还是出现了一些问题的。 当我们创建了一个Maven的web项目后,我们试图用tomcat-maven插件进行debug工作,使用tomcat7:run。但是debug的时候发现,报原创 2017-09-24 23:18:08 · 755 阅读 · 0 评论 -
enum枚举
枚举是JDK5之后加入Java中的,泛型也是1.5之后加入的,但是与Java泛型的伪泛型不好的口碑相比,enum枚举的加入似乎是要好的多。一.enum为什么会出现在JDK5之前,如果想要表示一组特定的离散值,往往使用一些常量。比如:package com.wangcc.JDK8.learnenum;public class Entity { public static final int VI原创 2017-09-24 18:38:24 · 1330 阅读 · 0 评论 -
日志(一)从Maven依赖文件说起
对于开发者来说,日志是非常重要的,是我们定位问题的法宝。但是在之前的开发中一直都没有太多的关注,只是学会了使用,我们队知识不能只停留在会用的层面,那样的话,我们只会增加编码经验,但是没法获得技术的增加。 我们先看看我们在项目中使用的日志相关的jar包。 <!-- 日志文件管理包 --> <!-- log start --> <dependency>原创 2017-09-23 23:43:17 · 1474 阅读 · 0 评论 -
日志(二)从Log4j的配置文件说起
一.配置文件的组成我们都知道,使用Log4j,一定要有配置文件,一般的log4j.properties配置文件如下# 可设置级别:TRACE→DEBUG→INFO→WARNING→ERROR→FATAL→OFF # 高级别level会屏蔽低级别level。 # debug:显示debug、info、error # info:显示info、error #log转载 2017-09-24 00:21:22 · 320 阅读 · 0 评论 -
Eclipse4.7创建Maven项目报错解决方法
最近换了最新版的Eclipse,发现创建Maven项目时,pom文件报错,而且不能自动下载jar包。经过查找资料,终于找到了解决方法。 报错如下:Failure to transfer org.apache.maven:maven-plugin-api:jar:2.0.6 from https://repo.maven.apache.org/ maven2 was cached in the l原创 2017-09-13 21:39:19 · 2233 阅读 · 0 评论 -
关键字final
final是Java中的一个重要的关键字 第一次对这个final关键字有好奇是在一次调用回调方法时,使用匿名类作为参数时,匿名类中的方法参数列表中的参数由final修饰。 在Java中final可以用来修饰类,方法和字段上。 一.修饰类 我们看String类的源码可以发现,String就是一个由final修饰的类。 当一个类被final修饰时,表明这个类不能被继承。final类中的所有成员原创 2017-08-13 23:39:35 · 3035 阅读 · 0 评论 -
多线程学习(一)
线程的五种状态 1.新建状态 New Thread thread=new Thread();2.就绪状态 Runnable可执行状态 thread.start();处于就绪状态的线程,随时可能被CPU调度执行。3.运行状态Running 线程获取CPU权限进行执行注意:线程只能从就绪状态转化为运行状态4.阻塞状态 Blocked 因为某种原因线程放弃CPU执行权 暂时停止运行直到线程进转载 2017-06-26 22:40:25 · 260 阅读 · 0 评论 -
MAVEN配置以及使用
现在的项目基本都是用Maven构建的,可以简化开发过程。 Maven主要做的是两件事:统一开发规范与工具,统一管理jar包。 在公司是领导帮忙配置好的Maven,自己直接使用就好了,之前自己把笔记本配了一次,但是并没有记录下来,现在来重新配一次,记录下来。 一.Maven配置 1.下载Maven:http://maven.apache.org/release-notes-all.html原创 2017-08-13 02:53:30 · 976 阅读 · 0 评论 -
标签接口
我们知道当我们需要在我们的web项目中使用spring的时候,我们需要在web.xml里配置这样一句话。 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 配置一个监听器,这个监听器非常的重要原创 2017-08-12 23:08:42 · 635 阅读 · 0 评论 -
对象序列化
在上次提到单例设计模式的时候,我们说了下我们主张使用枚举作为单例模式的实现,它是天然的单例模式,而且防止序列化(不需要添加readRsolve方法就可以避免单例模式被破坏)。当时只是提了一句,并没有具体的将序列化的东西,最近在为公司做Redis集群,里面自然就提到了序列化的东西,然后就想着还是需要对序列化有一个深入的了解的。 转载:http://www.cnblogs.com/wxgblogs/p转载 2017-09-29 22:50:23 · 308 阅读 · 0 评论 -
Java泛型详解
title:Java泛型详解date:2017年10月27日01:16:39Java泛型是JDK1.5出现的,在泛型出现之前,编写Java通用程序只能通过继承和实现接口实现,有很大的局限性。由于Java是单继承的,在很多时候都有很多限制,而使用接口会好一些,但是仍然会有很多约束。因为一但指明了接口,它就要求你的代码必须使用特定的接口。而我们希望达到的目的是编写更通用的代码,要是代码应用于“某种不具体原创 2017-10-27 01:26:05 · 265 阅读 · 0 评论 -
Java中的四种引用
前言最近又重新看了下ThreadLocal,ThreadLocal源码中ThreadLocalMap内部类的Entry中的key是ThreadLocal类型,并且是弱引用。 static class Entry extends WeakReference&lt;ThreadLocal&lt;?&gt;&gt; { /** The value associated ...原创 2018-12-19 18:24:29 · 203 阅读 · 0 评论 -
finalize
前言在总结Java中的4种引用的时候,在查找资料的时候,看到了有关于Object#finalize()方法的一些介绍,提到我们不应该在程序中使用finalize()方法,该方法不安全,低效,不要去使用finalize()去完成资源释放工作,而是使用虚引用完成对象回收前的资源释放工作。但是并没有给出具体的原因,那今天就结合网上的资料和自己的理解来分析这个finalize()方法。为什么不要使用f...原创 2018-12-19 15:58:10 · 213 阅读 · 0 评论 -
Broken Pipe
Broken Pipe发生的原因当某个进程试图往一个已收到RST的SOCKET连接写数据,就会出现Broken Pipe。 (由于TCP协议层已经处于RST状态了,因此不会将数据发出,而是发一个SIGPIPE信号给应用层,SIGPIPE信号的缺省处理动作是终止程序。)那么确定什么时候TCP会发送RST报文段,就可以确定Broken Pipe发生的具体原因。之前已经分析了TCP RST...原创 2018-08-14 17:52:48 · 4320 阅读 · 0 评论 -
乐观锁-CAS
前言观锁资料:http://www.cnblogs.com/wang-meng/p/5506943.html悲观锁在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够转载 2018-02-26 01:12:16 · 540 阅读 · 0 评论 -
Socket学习
前言慢慢的完善下阅读了Tomcat源码后遗留下的问题,今天主要解决Socket。Socket相关知识预热在讲Socket之前,我们需要了解一些知识TCP/IP计算机网络五层结构我们大学的时候都学过计算机网络(惭愧,那门课的知识基本都还给老师了),当时课本就讲述了两种主流的计算机网络分层结构,其中就包括我们现在要说的TCP/IP五层结构,另一个就是OSI七层结构,我们今天先不说。物理层中继器、集线原创 2018-02-27 21:55:46 · 439 阅读 · 0 评论 -
JDK1.8中接口的新特性
前言昨天在牛客网做题,有一道题叫做在JDK8的环境下,接口能不能有具体的方法实现还是只能有抽象方法。当然原题是个选择题,问法也不是这样问的。如果是这样问的,大家肯定都会想着是不是JDK8有更改了,接口里不只是可以有抽象方法了,也可以有具体的实现了,是的,确实是这样。我们今天就来看看下JDK8中接口的新特性。JDK8中接口的新特性在JDK8环境中,接口中的方法不再是只能有抽象方法,他可以有静态方法和d原创 2018-01-24 22:54:05 · 6653 阅读 · 3 评论 -
Java自动装箱和拆箱
title:Java自动装箱和拆箱date:2017年10月27日15:04:35categories: Java基础前言相信大家在写代码的时候,都写过至少看到过这样的代码:Integer i=100;那你写的时候,有没有想过为什么可以直接这样写呢,Integer可是一个对象呀,可不是个基本类型,为什么可以直接写Integer i=100呢?应该是Integer i=new Integer(100)转载 2017-12-13 20:40:10 · 437 阅读 · 0 评论 -
数组Array
转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613前言数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间。在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性。本文就尝试分析这些特性。Java中数组是对象吗Java和C++都是面向对象的转载 2017-12-13 20:39:14 · 727 阅读 · 0 评论 -
String类
前言在我看来,任何一门程序语言,使用到最多的都是字符串。而在Java中,我们使用String类来表示字符串。在Java中,字符串类型不是基本类型,但他依然是一个非常重要的类型。今天我们将从几个方面来分析下这个我们在编程中使用最频繁的类String。为什么说String是不可变的什么是不可变我的理解是说你对一个字符串的任何修改操作都会生成一个新的对象,而不是在原有的对象内存中修改,这就是String转载 2017-12-13 20:38:27 · 269 阅读 · 0 评论 -
Java泛型
前言对于Java泛型,之前已经写过一篇文章来分析了,但是还有一些关键问题并没有讲清楚,今天就把这些问题说一下。泛型中\和package wangcc.generics;import org.apache.log4j.Logger;public class RealGenericMethod {private static Logger logger = Logger.getLogger(RealG转载 2017-12-13 20:37:14 · 402 阅读 · 0 评论 -
HashMap
title:HashMapdate:2017年11月15日21:35:15JDK7之前用JDK7的源码分析过一次HashMap,但是分析的并不完善,只分析了put方法和get方法,有一个很重要的方法 resize()方法并没有分析。扩容方法resize()方法是一个很重要的方法,当我们调用put方法的时候,如果Hash数组的实际大小已经大于加载因子*容量的时候,我们就需要进行扩容操作,防止Hash冲原创 2017-11-18 23:58:37 · 240 阅读 · 0 评论 -
Java移位符
title:Java移位符date:2017年11月12日21:58:00java中有三种移位运算符<< : 左移运算符,num << 1,相当于num乘以2 ,>> : 右移运算符,num >> 1,相当于num除以2,对于正数,高位补0,对于负数,高位补1>>> : 无符号右移,忽略符号位,空位都以0补齐在介绍移位运算符之前,我们有必要讲一些计算原创 2017-11-18 18:46:31 · 434 阅读 · 0 评论 -
Java内部类
title:Java内部类date:2017年11月11日18:57:15对内部类其实也接触了挺多了的,在学习回调方法的时候我们接触了匿名内部类,在创建线程的时候我们也习惯在new Thread的时候直接创建一个Runnable对象实例。 Thread t1=new Thread(new Runnable() { public void run() {原创 2017-11-11 23:26:34 · 209 阅读 · 0 评论 -
比较器
最近在看TreeMap的源码,发现了有一个构造方法里面有个参数Comparator,发现是一个接口,用于比较对象大小的比较器,在类外部使用,与Comparable接口相对应,Comparable接口在类内部使用,类直接实现该接口。 Java已经给我们提供了很多用Comparable接口或Comparator接口的实现来排序的容器,比如最常用的数组,以及TreeMap等。 我们以数组排序为例,来看原创 2017-08-12 22:45:24 · 560 阅读 · 0 评论 -
Java泛型详解
Java泛型是JDK1.5出现的,在泛型出现之前,编写Java通用程序只能通过继承和实现接口实现,有很大的局限性。由于Java是单继承的,在很多时候都有很多限制,而使用接口会好一些,但是仍然会有很多约束。因为一但指明了接口,它就要求你的代码必须使用特定的接口。而我们希望达到的目的是编写更通用的代码,要是代码应用于“某种不具体的类型”,而不是一个具体的接口或者类。这种“不具体的类型”,属于参数化类型,原创 2017-08-12 22:20:14 · 277 阅读 · 0 评论 -
类的加载
在我们刚开始学习Java的时候,我们被建议使用cmd命令行将写好的*.java文件运行起来 通过javac *.java将Java文件编译成二进制文件(.class文件) 通过java *将class文件放在JVM上运行,执行程序 javac 的过程也就是源代码编译的过程,这个过程由编译器完成。 当获得了二进制class文件后,java * 则完成了类的加载,链接,初始化最转载 2017-08-12 12:47:52 · 293 阅读 · 0 评论 -
java反射
今天我们来看一下java反射机制。 反射机制是在运行状态中,对于任意一个类,都能够中的这个类的所有属性和方法,对于任意一个对象,都能够调用他的任意一个方法和属性 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 在运行时生成任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法 生成动态原创 2017-03-05 20:40:19 · 257 阅读 · 0 评论 -
字符编码总结
一.字符集 什么是字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 二.编码 何为编码? 是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达转载 2017-03-18 16:35:32 · 536 阅读 · 0 评论 -
LinkedList源码分析
最近在面试中碰到了许多问题,发现自己的java基础还是需要好好巩固。 今天就让我们来看一下LinkedList. LinkedList List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆原创 2017-02-27 00:04:50 · 258 阅读 · 0 评论 -
编写自己的LinkedList
今天我们来实现一下自己的LinkedList。 首先设计底层数据结构双向链表 在MyLinkedList类中创建一个内部类 private class Node<E> { private E element; private Node<E> prev; private Node<E> next; public Node(Node原创 2017-03-04 16:53:04 · 336 阅读 · 0 评论 -
java内存区域
本文为深入了解java虚拟机的读书笔记 我们先来看一下运行时数据区域 一.我们来看一下java虚拟机栈,他是线程私有的,他的生命周期与线程是相同的, 虚拟机栈描述的是java方法执行的内存模型:每个方法在执行时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。 通常,我们在网上可以看到,我们经常把java内存区分为堆内存和栈内存。 这其实是非常粗糙的概念,在这个概原创 2017-03-02 21:19:40 · 229 阅读 · 0 评论 -
static关键字以及内存分析
此文为网上资源收集而写。 今天我们来看一下static关键字 static表示全局或静态的意思,用来修饰成员变量或者成员方法,也可以形成static代码块,但是在java语言中其实是没有所谓全局变量的概念的。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内转载 2017-03-01 00:12:09 · 545 阅读 · 0 评论 -
castor解析Xml
前言: 今天,我们来看一下一个解析xml的工具Castor,这个工具是公司的项目所用到的,用来解析xml报文。此前我所接触的解析xml的方式有Dom,Dom4j,Sax。而Castor工具应该是对Sax解析进行了封装(个人猜测,还未看源码,这个问题的正确性以后再确定)。在看公司的项目时,觉得自己对这些工具并不重视,想着晚上回来自己写个简单的Castor引用的简单demo,这个看似简单,但是在写的过程原创 2016-12-19 22:56:37 · 729 阅读 · 0 评论