精装Java
文章平均质量分 93
带你看那大型科幻巨制片《精装Java》可好?
huwao
盖学贵善思,君但志之而不思之,终必无所成,何以谓之善学也?
展开
-
今天是 Java 诞生日,Java 24 岁了!
今天是 Java 诞生日,Java 今年 24 岁了,比站长还年轻。。还有得搞,别慌!作为一名Java语言的学习者,对Java的起源和发展有个大概的了解应是必要的。给大家讲个有趣的小故事,JAVA名字的来源,有两种版本,其中一种可信度虽然不高,但仍有人声称是开发人员名字的组合:JamesGosling(詹姆斯·高斯林)ArthurVanHoff(阿瑟·凡·霍夫)AndyBechtol...转载 2019-05-23 15:41:02 · 836 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解...转载 2018-08-20 17:35:05 · 493 阅读 · 2 评论 -
BIO,NIO与AIO的区别
Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天...转载 2018-08-31 21:54:28 · 480 阅读 · 0 评论 -
JVM装载原理与优化
前言:JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境。创建JVM装载环境和配置 装载JVM.dll 初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 调用JNIEnv实例装载并处理class类。在我们运行和调试Java程序的时候,经常会提到一个JVM的概念。JVM是Java程序运行的环境,但是他同时...转载 2018-05-02 20:27:42 · 194 阅读 · 0 评论 -
深入理解JAVA线程池
深入理解JAVA线程池前言多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory。即便没有这样的情况,大量的线程回收也会给GC带来很大的压力。为了避免重复的创建线程,线程池的出现可以让线程进行复用。通俗点讲,当有工作来,就会向线程池拿一个线程,当工...原创 2018-06-26 10:54:03 · 2318 阅读 · 0 评论 -
Freemarker页面静态化技术
首先是freemarker的模板类获取: ①:Configuration cfg = new Configuration(Configuration.VERSION_2_3_28); ②:springboot中可以用注解自动注入(本文使用的这种方式) import freemarker.template.Configuration;//别导入错误的依赖,configuration的类很...原创 2019-01-03 21:38:50 · 663 阅读 · 0 评论 -
Freemarker封装的3种加载模板目录的API
Freemarker提供了3种加载模板目录的方法。 它使用Configuration类加载模板。本文解释用的路径(全局变量):String realPath = “C:\\xxx\\src\\main\\webApp\\WEB-INF\\templates”具体的根据实际获取的项目路径为准,这里是本人写的一个伪路径三种方法分别是:public void setClassForTe...原创 2019-01-03 21:19:03 · 1241 阅读 · 0 评论 -
2019年比较流行的Java技术排名
关于2019年流行的Java技术不敢妄下结论,但是我们可以根据2018年github与dbRank上的排名来进行一个小分析,来总结一下当下热度最高的Java技术。我们来看排名:先来看一下热度比较高的数据库技术:这里只有前20名,数据库方面Oracle这个专业的数据库依旧占据榜首,其次就是我们大多数人都熟悉的MySQL开源数据库。mongoDB这个NoSQL数据库和Redis这个...原创 2019-01-05 10:59:51 · 28884 阅读 · 3 评论 -
关于内存溢出与内存泄漏的讨论
今天因为写了一个CountDownLatch的测试,导致本菜被无情的抛出了Stack Overflow的异常并且在数秒后IDE罢工。在测试结束后总结了一下并在网络上查看了一下资料,并在这里分析一篇不错的博文(对内存结构不了解的小白来说可是 ‘福利’哦):stack overflow:每当java程序启动一个新的线程时,java虚拟机会为他分配一个栈,java栈以帧为单位保持线程运行状态;...转载 2019-01-05 09:16:01 · 442 阅读 · 0 评论 -
Eclipse简单快速安装(以及中文汉化与安装插件)
上一篇分享了安装配置J2E及Java环境配置,本篇就来分享一下如何安装配置我们Java常用工具Eclipse,还有插件的安装。1,官网下载eclipse: http://www.eclipse.org/downloads/eclipse-packages/ 选择 “Eclipse IDE for Java Developers”,确定是64bit还是 32的;或者http://www....原创 2018-04-19 10:04:04 · 10211 阅读 · 0 评论 -
Java技术简单实现spring的AOP
这里首先需要复习一下什么是AOP?(不知道或忘记的话是看不懂代码的。)AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关...原创 2018-11-27 19:52:11 · 369 阅读 · 0 评论 -
Java代理模式(静态代理,动态代理)
即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:对其他对象提供一种代理以控制对这个对象的访问。Java的代理模式是Java中比较常用的设计模式,分为2中代理:静态代理与动态代理(JDK动态代理和cglib动态代理)优点:职责清晰 真实角色只需关注业务逻辑的实现,非业务逻辑部分,后期通过代理类完成即可。 高扩展性 不管真实角色如何变化,由于接口是固定的,代...原创 2018-11-27 18:24:22 · 313 阅读 · 0 评论 -
java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to *
JavaJDK动态代理报错。javaJDK动态代理是Java原生代理模式。 注意:JDK动态代理是代理的接口,因此强制转换应该转换为接口,而不是实现类,若强制转换实现类就会抛出ClassCastException,好比ArrayList与LinkedList实现统一接口List,两者也不能相互转换,但都可以向上转型。正确的转型方案: //创建处理器对象 ...原创 2018-11-27 18:24:54 · 3286 阅读 · 0 评论 -
Eclipse中java代码注释变成乱码的问题
今天在查看曾经写过的代码时发生了一件很是让人头疼的事:我写的所有注释全部都变成了了乱码,曾经刚入门时也是经常遇到类似的问题,解决起来很快,每天可能都会在工作空间里看到,但是随着时间的推移,写代码的规范也越来越标准,这类问题很少遇到,于是它就随着时间淡化了,今天我可是挠破了头皮在解决掉这个麻烦,下面看分析:Eclipse JAVA文件注释乱码将别人的项目或JAVA文件导入到自己的Eclipse中时,...原创 2018-05-18 11:03:30 · 14133 阅读 · 4 评论 -
程序员必备的Linux基础知识
学习Linux之前,我们先来简单的认识一下操作系统。一 从认识操作系统开始1.1 操作系统简介我通过以下四点介绍什么操作系统:操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石; 操作系统本质上是运行在计算机上的软件程序 ; 为用户提供一个与系统交互的操作界面 ; 操作系统分内核与外壳(我们可以把外壳理解成围绕...原创 2018-11-06 13:27:22 · 446 阅读 · 0 评论 -
Java冒泡排序和快速排序与二分查找总结
首先我们了解下什么是冒泡排序:介绍冒泡排序属于一种简单的排序,也是经典的一种排序思想。原理:比较两个相邻的元素,将值大或小的元素交换至右端(相邻位置作交换)。思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重...原创 2018-11-05 16:57:45 · 2881 阅读 · 0 评论 -
Java中的56个关键字总结
java官方文档有说明: An identifier cannot have the same spelling (Unicode character sequence) as a keyword , boolean literal , or the null literal, or a compile-time error occurs. While true and false might ...原创 2018-11-02 21:49:55 · 955 阅读 · 0 评论 -
Java 使用 UUID 生成唯一不重复的订单编号的方法
做生成订单编号的功能。网友指点了一下可以简单的使用 uuid 来做,但是 uuid 产生的是一个不重复的字符串。用来当做订单编号,显然不太合适。但是我们可以换个底版,来让它变成一组数字。原理其实很简单,就是借助 java 中 String 类的 hashcode() 方法即可。整个代码实现如下所示: 1 2 3 4 5 6 7...原创 2018-08-24 19:58:51 · 18518 阅读 · 7 评论 -
Java的数据结构总结
Java 基本数据类型总结在Java的代码重构中,我们不得不承认若是不了解jvm的内存原理或是数据类型,我们根本读不懂那些乱七八糟的数据参数。变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间;内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。Java 的两...原创 2018-11-01 20:59:06 · 2854 阅读 · 0 评论 -
类加载机制
类的加载机制主要关注点:什么是类的加载 类的生命周期 类加载器 双亲委派模型什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Jav...转载 2018-04-12 22:47:53 · 342 阅读 · 0 评论 -
Java概论
一、先说什么是java?java是一种面向对象语言,真正的面向对象,任何函数和变量都以类(class)封装起来;至于什么是对象什么是类,类就是一个对象的模板,对象就是类的一个实例,一个真正存在的;关于这两个概念的解释任何一本面向对象语言的教材里面都有;知道了什么是java,那自然就会对java能干什么感兴趣吧。在说java能做什么之前,先说java作为一个面向对象...原创 2018-04-12 21:49:48 · 536 阅读 · 1 评论 -
JVM执行过程与结构分析
首先这里澄清两个概念:JVM实例和JVM执行引擎实例,JVM实例对应了一个独立运行的Java程序,而JVM执行引擎实例则对应了属于用户运行程序的线程;也就是JVM实例是进程级别,而执行引擎是线程级别的。JVM是什么?—>JVM的生命周期JVM实例的诞生:当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[]a...原创 2018-04-26 20:55:57 · 478 阅读 · 1 评论 -
Java程序结构设计
程序的结构设计 程序的结构包含有下面三种 ⑴ 顺序结构 ⑵ 选择结构 ⑶ 循环结构(1)顺序结构顺序结构程序就是按书写顺序执行的语句构成的程序段。就是傻瓜式的从上到下依次执行代码语句。如图:(2)选择结构根据输入数据和中间结果的不同情况需要选择不同的语句组执行。Java语言中的选择结构提供了...原创 2018-06-20 20:52:24 · 1468 阅读 · 0 评论 -
Java集合(全家桶)
一,Collection集合概述: (1)集合是存储其他对象的特殊对象。可以将集合当做一个容器。(2)集合的相关接口和类位于java.util包中。(3)集合中的接口和类是一个整体、一个体系。集合优点:数据类型不统一,长度不固定。二,集合接口:集合框架定义了一些接口,它们决定了集合类的本质特性。具体的集合类只是提供了标准接口的不同实现。注意:1、Colle...原创 2018-04-18 23:58:18 · 1966 阅读 · 0 评论 -
Map集合
上一篇文章:Collection集合及其子接口上一篇文章分享到特殊的Map集合与映射遍历,本篇文章就继续分享本人的学习:映射映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。映射围绕两个基本操作:get()和put()。为了将值放入到映射中,使用put(),指定键和值。为了获取值,调用get(),传递键作为变...原创 2018-04-19 00:03:35 · 802 阅读 · 0 评论 -
(Java动态调度)重载与重构
在说两者的区别之前首先回顾一下多态的概念: 重载与重载都是多态在不同的实际运用的不同体现。关于什么是多态,这里简单声明一句:Java的三大特性之一就是多态,同一个方法名称,执行不同的操作。不清楚的自行在网上找相关的教材,本人的上传资源中也有Java基础的相关教材。重载 overload1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同...原创 2018-04-28 00:55:09 · 561 阅读 · 0 评论 -
Java枚举学习
废话不说,先创建一个enums的枚举‘类’看栗子eg:package enums;/* * enum:凡是使用enum修饰的都为枚举 属性的集合 进行一一成列出来 * 枚举中的变量全部都是常量 * 为什么要定义枚举? * 因为定义属性需要确定类型,定义枚举不需要定义类型 默认为常量 * * 首先定义枚举一定要先赋值 然后在定义变量 ,否者报错 * 在枚举中可以直...原创 2018-06-09 11:36:49 · 312 阅读 · 0 评论 -
Java泛型的深入理解
泛型:是一种类型参数化的机制,是针对利用继承来实现通用的程序设计的各种问题。 泛型的出身:在没有泛型的时候,也就是在Java1.5之前,我们通常使用集合元素是需要强制转换后才能使用,并且我们是无法阻止非预期的数据类型加入集合的,这样的话在编译器它不会报错,只有在运行期才能报错。这并不是我们所期望的,下面我们看下代码。package csdn;import java.ut...原创 2018-06-06 20:58:15 · 264 阅读 · 2 评论 -
Http缓存问题分析
http缓存http缓存主要分为了两类 强缓存(本地缓存)和协商缓存浏览器在请求某一资源时,会先获取改资源缓存的header信息,判断是否命中强缓存(expires的信息和cache-control)若命中直接从缓存中获取该资源信息,包括缓存header信息,本次请求根本就不会与服务器进行通信。此为强缓存(本地缓存)如果没有命中强缓存,浏览器会发送请求到服务器,请求会携带第一次请求返回...原创 2018-06-10 22:03:30 · 435 阅读 · 2 评论 -
IO流(小试牛刀)
IO流下面是关于IO流常用的类或接口:Java 流的所有类和接口的结构图: 流的作用与概念流是一组有顺序的、有起点和终点的字节集合,它是对数据传输的总称或抽象。流的本质就是数据传输,根据数据传输的特质将流抽象为各种类,方便更加直观的便捷的对数据进行处理与操作。IO流的分类 根据不同的数据类型分类:字符流与字节流。 根据不同的传输方向分类:输入流与输...原创 2018-06-23 11:54:49 · 309 阅读 · 0 评论 -
(项目实战)Java注解
注解为什么学习注解?学习注解有什么好处?学完能做什么?答:1. 能够读懂别人写的代码,特别是框架相关的代码; 2. 让编程更加简洁,代码更加清晰; 3. 让别人高看一眼。spring、mybatis使用了大量的注解,会用注解不是目的,会使用自定义注解才是亮点。java注解在java1.5版本引入。 一、概念 Java提供了一种原程序中的元素关...转载 2018-06-19 19:03:11 · 336 阅读 · 0 评论 -
Java的Pattern类与Macher类
在java.util.regex.Pattern与java.util.regex.Macher包下。Java的正则表达式是在Java1.5之后添加入,拓展与丰富了Java的类库,更加方便了特殊的对文档对象处理。public final class Pattern extends Object implements Serializable{}//正则表达式的编译表示形式。 ...原创 2018-06-26 10:39:54 · 805 阅读 · 1 评论 -
Java网络编程(TCP与UDP)
本篇文章主要分享一下网络编程学习的基本内容:一,基于TCP协议的网络编程先来看一下什么是TCP协议? Java提供的网络功能有三大类: URL, Socket, Datagram. URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据. Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道. Data...原创 2018-07-04 16:13:12 · 388 阅读 · 0 评论 -
Java内部类总结
简介:内部类:在类或方法内部定义的类称为内部类。内部类是一个非常有用的特性但又不容易理解的特性。为什么要使用内部类?在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 在我们程序设计中有时候会存在一些使用接口很难解决的问题,...原创 2018-11-10 11:12:17 · 479 阅读 · 0 评论 -
Java单例模式(各种实用的单例模式)
相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用的最多的设计模式,可能有很多人会写几种设计模式,那么你是否知道什么是设计模式?为什么会有单例设计模式即它的作用是什么?单例模式有哪些写法?对于这样的问题,可能有部分童鞋并不能很好的回答,没关系今天就和大家一起来详细的学习下单例设计模式,相信通过学习本篇你将对单例设计模式有个详细的理解。如有谬误欢迎批评指正,如有疑问欢迎留...原创 2018-06-23 09:31:25 · 253 阅读 · 0 评论 -
IO流(进阶提高)
本篇文章继上一篇IO流(小试牛刀)继续更新JavaIO流的知识。常见IO流的结构图解:回顾一下IO的基本接口知识:————————————————————我是不起眼的分割线————————————————————————IO的序列化与反序列化Java序列化是指把Java对象转换为字节序列的过程;Java反序列化是指把字节序列恢复为Java对象的过...原创 2018-06-24 19:43:57 · 804 阅读 · 2 评论 -
Java的System类
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。 1、成员变量System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输...转载 2018-11-10 09:52:38 · 219 阅读 · 0 评论 -
(JDK1.8New)Java8版本总结
Java 8 新特性Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。新特性总结Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允...原创 2018-11-06 11:34:42 · 3723 阅读 · 0 评论 -
Java进阶之如何优雅的关闭项目资源?
使用java编写大型系统时,往往需要在程序被kill时将内存中的一些临时数据和状态处理掉,这里称之为优雅关闭。关于Java中的资源关闭,是一个常见的问题,也是最容易被初级程序员忽略的一个问题,这个问题的严重性,吃过亏的人都知道,不需多说。之所以会出现这个问题,主要还是在Java 7之前,语言没有很好地提供资源管理的语法。第一种方式比较优雅的方式(使用):public static v...原创 2018-08-20 11:56:49 · 1776 阅读 · 0 评论 -
Java中的可变参数
前言:到J2SE 1.4为止,一直无法在Java程序里定义实参个数可变的方法——因为Java要求实参(Arguments)和形参(Parameters)的数量和类型都必须逐一匹配,而形参的数目是在定义方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的版本,但是这仍然不能达到让实参数量任意变化的目的。然而,有些方法的语义要求它们必须能接受个数可变的实参—...原创 2018-09-05 16:23:40 · 193 阅读 · 0 评论