Java-基础
莫特@
微风拂静叶 缘起何方
展开
-
spring中json转换配置
springboot 针对jackson是自动化配置的,如果需要修改,有两种方式:方式一:通过application.yml配置属性说明:spring.jackson.date-format指定日期格式,比如yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名spring.jackson.deserialization是否开启Jackson的反序列化spring...原创 2019-12-27 11:35:04 · 617 阅读 · 0 评论 -
Java子类与父类强制类型转化
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。原创 2017-06-25 22:07:29 · 7180 阅读 · 2 评论 -
数组复制的方式以及效率
参考《链接》简介在Java中数组的复制有多种方式,常见的有:System.arraycopy、clone、Arrays.copyOf、for循环等,虽然这些都能实现数组的复制,但是效率相差较大。效率:System.arraycopy > clone > Arrays.copyOf > for循环理由:A:for循环,效率最低,随便写个程序验证一下,效率慢的不原创 2017-06-25 16:20:34 · 543 阅读 · 0 评论 -
多线程状态下使用同步机制的本质原因
简述在Java的学习中必然会遇到多线程和同步问题,对于初学者一般只会理解到相关api的使用,但是很少能够真正知道为什么要对多线程环境下的对象进行同步,接下来我就谈谈自己的一些理解。JVM堆与JVM栈宏观室是分离的,而微观上则又相互联系,这种分配方式使得JVM堆中的内容可以被多个JVM栈共享(也可以理解为多个线程访问同一个或者多个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有效的原创 2017-06-24 14:06:29 · 4342 阅读 · 0 评论 -
Java中gc与finalize
gc()只能回收Java堆上的内存,而不能回收栈中的内存,一般情况下Java中new的对象都是在栈中分配内存,因此gc回收栈内存没有问题,但是如果以某些特殊方法在栈中分配内存那么gc是无法释放这些内存的,这种情况下一般是是通过finalize释放的,Java的gc回收之前会调用对象的finalize方法,但是要注意一点,即使是程序员显式调用gc也不一定会触发垃圾回收,垃圾回收一般只会在内存不够用的原创 2016-12-01 11:45:37 · 422 阅读 · 0 评论 -
Java源文件到字节码等情况的编码转换
java编码转换过程我们总是用一个java类文件和用户进行最直接的交互(输入、输出),这些交互内容包含的文字可能会包含中文。无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总是这样的:1、程序员在操作系统上通过编辑器编写程序代码并且以.java的格式保存操作系统中,这些文件我们称之为源文件。2、通过JDK中的javac.exe编译这些源文件形成.clas转载 2017-06-28 21:28:13 · 2407 阅读 · 0 评论 -
代码块详解
目录(?)[-] 一 普通代码块 二 静态代码块 三 同步代码块 四 构造代码块 五 静态代码块构造代码块构造函数执行顺序 在编程过程中我们可能会遇到如下这种形式的程序:[java] view plain copy转载 2017-06-28 17:25:13 · 446 阅读 · 0 评论 -
Java时间计算工具joda-time
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time的功能特别强大,不限于下述功能,具体根据业务需求来定。1、时间类得作成 Java代码 //方法一:取系统点间 DateTime dt1 = new Date转载 2017-04-16 14:27:09 · 761 阅读 · 0 评论 -
Java多线程
1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进转载 2017-04-29 01:59:57 · 326 阅读 · 0 评论 -
web缓存
一、缓存是什么?Cache①高速缓冲存储器,其中复制了频繁使用的数据以利于快速访问。②位于速度相差较大的两种硬件/软件之间,用于协调两者数据传输速度差异的结构二、缓存有哪几类?1、基于web应用的系统架构图2、在系统架构中,不同层级之间为了加快访问速度,缓存都可以存在。转载 2017-04-29 01:46:40 · 443 阅读 · 0 评论 -
Java命名规范
命名规范1、 项目名全部小写2、 包名全部小写3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。如:public class MyFirstClass{}4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。如:int index转载 2017-04-29 01:38:54 · 289 阅读 · 0 评论 -
java集合工具collections
package com.cxy.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.转载 2017-06-25 21:42:49 · 328 阅读 · 0 评论 -
Java集合总结
List:ArrayList:允许null,初始容量为10,底层使用数组实现,非线程安全,可扩容并且一次扩容1.5倍,可指定出事容量。优点:查找快(因为ArrayList底层使用数组实现,数组的特点就是可以随机取值)。缺点:增删慢(数组中的数据必须是连续的,如果被删除的数据在数组的中间,那么被删除的数据后边的元素必须依次向前移动,这很显然是浪费时间的;当添加数据的时候,如果当前数组原创 2017-06-25 22:04:18 · 264 阅读 · 0 评论 -
JVM钩子函数
虚拟机退出:JVM会在所有非后台线程关闭后才会退出,如在一个main线程里新产生一个线程,而该线程阻塞了,那么虚拟机不会退出。后台线程会在所有非后台线程退出后都停止任务。系统调用System.exit(0):在线程中调用会导致整个系统退出。在调用该代码之后定义代码均不会运行。JAVA的钩子函数是在jvm正常退出时会调用:例如在线程上调用System.exit(0)时会调用注册的钩子函数。钩子...转载 2019-07-21 12:46:32 · 411 阅读 · 0 评论 -
端口占用与释放
简介开发过程中,常见端口被占用,尤其tomcat启动多个应用时。有些时候,我们知道哪里占用,但有时候不知道。端口释放netstat -ano|findstr 1099备注: 查看哪个进程占用了1099端口,执行后如下然后关掉对应的进程taskkill /pid 12540 /f备注:/f表示强制。具体是否要关掉对应进程,可自己判断,不能太过随意...原创 2018-07-24 14:04:56 · 9019 阅读 · 0 评论 -
java对象深度拷贝
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import net.sf.json.JSONOb原创 2018-01-09 09:27:46 · 692 阅读 · 0 评论 -
java泛型-implements和extends
简介JavaSE当中之前的理解是:implements是实现接口,extends是继承类,但是在泛型中只能使用extends,不过只能使用extends并不意味着只能继承类,泛型使用extends后边既可以接父类又可以跟接口,最终实现的效果跟继承类或者实现接口是一样的。泛型实例 public <T extends List<?>> void test(T...原创 2017-12-12 20:48:01 · 7457 阅读 · 0 评论 -
Integer常量池
找时间研究一下原创 2017-10-26 16:37:19 · 331 阅读 · 0 评论 -
maven项目报错解决前提
问题在创建maven的web项目以后看似配置好了一切但是项目名字上总是有小红叉,并且maven项目无法刷新和初始化,试了很多方法都没有成功。最后发现是web.xml不完整。备注:不要觉得这是很低级的错误,自己不会范,这个问题其实体现了一个做开发遇到问题时解决问题的思维方式。结论尤其在创建一个新项目时,如果出现错误,一定要以全局的眼光去看待问题,从不同的角度查找和解决,不要纠结在一个原创 2017-10-22 16:49:08 · 242 阅读 · 0 评论 -
Java中try/catch执行时机
简介学习Java这么久以来,我一直以为在try中出现了异常,那么会通过catch捕获,并且后边的代码不再执行,但是今天发现catch之后后边(其实“后边”用的不恰当,后文会解释)的代码仍旧在执行。示例代码public class Threadtest { public static void main(String[] args) { Threadtest threadtest原创 2017-08-02 16:57:36 · 1794 阅读 · 1 评论 -
StringUtils详解
StringUtils中一共有130多个方法,并且都是static的,所以我们可以这样调用StringUtils.xxx()。下面分别对一些常用方法做简要介绍:1. public static boolean isEmpty(String str)判断某字符串是否为空,为空的标准是str == null 或 str.length() == 0下面是示例:StringUtil转载 2017-08-02 10:52:27 · 357 阅读 · 0 评论 -
Java代理模式(动态与静态)
为了保持行为的一致性,代理类和委托类通常会实现相同的接口,但是这个并不是强制性的。动态代理类的字节码在程序运行时由Java反射机制动态生成。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。 可以将InvocationHandler接口的子类想象成一个代理的最终操作类。Proxy类是专门完成代理的操作类,转载 2017-01-10 17:57:49 · 445 阅读 · 0 评论 -
Java多线程面试
50道Java线程面试题1什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运 算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持, 它也是一个很好的卖转载 2017-04-29 01:37:09 · 350 阅读 · 0 评论 -
Java小知识点
1.2 基本数据类型Q. 为什么 -0/3 结果是 0,而 -0.0/3.0 结果是 -0.0?(注意后边的结果0带负号)A. 在Java里,整数是用补码表示的。在补码中0只有一种表示方法。另一方面,浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0。Q. 我可以用 % 除以一个小数吗?A. 当然可以。比如,如果 a转载 2017-04-29 01:33:49 · 1064 阅读 · 0 评论 -
Java多态理解
Java多态性理解Java中多态性的实现什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic转载 2016-12-01 15:57:30 · 268 阅读 · 0 评论 -
正确理解Java的反射机制
Java的反射指的是Java程序本身可以获得自己当前对象或者类当前的状态,并且可以修改它。所谓的可以动态加载类,这个说法是针对类的加载机制,并不是Java反射的范围。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制原创 2016-12-01 15:23:31 · 510 阅读 · 0 评论 -
java动态代理详解(好文)
引言Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。通过阅读本文,读者将会对 Java 动态代理机制有更加深入的理解。本文首先从 Java 动态代理的运行机制转载 2016-12-01 14:41:37 · 1007 阅读 · 0 评论 -
JVM垃圾回收算法
常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不再被使用的,垃圾收集器将回收该对象使用的内存。引用计数算法实现简单,效率很高,微软的COM技术、ActionScript、Python等都使用了引用计数算法进行内存管理,但是引用计数算法对于对象之间相互转载 2016-12-01 12:37:21 · 213 阅读 · 0 评论 -
多线程并发内部实现机制
http://www.cnblogs.com/xiaopohou/archive/2011/09/06/2168614.html本文讨论:多线程和共享内存线程模型争用及并发访问如何能够打破不变量作为争用标准解决方案的锁定何时需要锁定如何使用锁定;理解开销锁定如何能够各行其道 十年前,只有核心系统程序员会担心在多个执行线程的情况下编写正确代码的复杂性。绝大多数程序员编转载 2016-11-02 17:18:10 · 4138 阅读 · 0 评论 -
深克隆与浅克隆
克隆:Java的clone()方法⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足:①对任何的对象x,都有x.clone() !=x//克隆对象与原对象不是同一个对象②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样③如果对象x的equals()方法定义恰当,那么x.转载 2016-11-17 16:41:27 · 276 阅读 · 0 评论 -
运行时,编译时,编译型,解释型,类加载器,动态加载类
什么是编译?将原程序翻译成计算机语言,就是二进制代码,在java中是将.java文件也就是源程序翻译成.class的字节码 什么是编译时?将原程序翻译成计算机语言的过程中,将.java翻译为.class文件的过程 什么是运行时?就是在启动这个程序的时候,在java中是,类加载器加载.class文件,并交给jvm处理 什么是编译型语言?将原程序一次性全部转换为二进制代码,然后执行程序转载 2016-11-16 14:37:15 · 1658 阅读 · 0 评论 -
Java的Runtime
正文 Java的Runtime类封装了Java应用的当前运行环境,包括虚拟机的资源分配情况和当前应用运行的状态等信息,比如当前应用的内存分配情况,程序运行状态,当前程序的线程的状态的等(这只是当前的一些猜想,有待以后随着知识的积累去进一步探索了理解)原创 2016-11-16 14:18:06 · 262 阅读 · 0 评论 -
为什么需要线程池
多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程池包括以下四个基本组成部分:转载 2016-11-16 13:50:41 · 555 阅读 · 0 评论 -
Enumeration和Iterator的取舍
Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码中已经被很少使用了。尽管如此,它还是使用在诸如Vector和Properties这些传统类所定义的方法中,除此之外,还用在一些API类,并且在应用程序中也广泛被使用。原创 2016-11-25 17:38:04 · 301 阅读 · 0 评论 -
字符集
UnicodeUnicode编码系统为表达任意语言的任意字符而设计。它使用4字节的数字来表达每个字母、符号,或者表意文字(ideograph)。每个数字代表唯一的至少在某种语言中使用的符号。(并不是所有的数字都用上了,但是总数已经超过了65535,所以2个字节的数字是不够用的。)被几种语言共用的字符通常使用相同的数字来编码,除非存在一个在理的语源学(etymological)理由使不这样做。不原创 2016-11-25 18:53:14 · 234 阅读 · 1 评论 -
Java动态代理生成方式
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 在Java的java.lang.reflect包下提供一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成jdk动态代理类或动态代理对象。转载 2016-12-01 14:40:17 · 614 阅读 · 0 评论 -
StringUtils详解
org.apache.commons.lang.StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。除了构造器,Str转载 2017-04-18 09:38:28 · 931 阅读 · 1 评论 -
文件乱码本质原因(当前猜测)
简述在编写网页的时候经常会出现已经定义好编码的HTML文件访问以后仍然是乱码。之所以出现这个问题是因为对于编码本身的理解有问题。<meta charset="UTF-8">或者<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">这两者是一样的,前者是后者的代替详述理解可能有误,...原创 2017-03-24 17:59:08 · 3015 阅读 · 0 评论 -
Java---字节流与字符流
1.分类A:字符流,字节流()首先考虑一个问题,为什么会出现字符流和字节流,但为什么没有比特流呢?字节流:对于计算机的IO而言,最小物理级别的单位是位(bit),最小的计量单位和最小的信息单位是字节,也就是说操作与存储设备交互的最小单位是字节,因此没有必要设计小于字节的api。字符流:计算机中大多数文件都是字节数不固定,比如一个图片可能是100字节,也可能是101字节,这种文件就只...原创 2017-01-28 16:25:31 · 287 阅读 · 0 评论 -
Java内存泄漏与内存溢出
简介:首先这两个不是同一个概念,内存溢出不一定是因为内存泄漏造成的,内存泄漏也不一定就会造成内存溢出。内存溢出是指当前jvm分配的内存不满足Java应用实际的需求,这样在运行过程中就会造成内存溢出,内存溢出的本质是内存不够用;内存泄漏指的是本来不需要的内存始终不能被回收,最后导致越来越多的内存被占用,这里要注意一点:操作系统在内存的分配上有一个虚拟内存的概念,虚拟内存就是作为开发人员不...原创 2017-01-10 17:58:59 · 332 阅读 · 0 评论