- 博客(38)
- 收藏
- 关注
原创 高效Java技巧重写equals方法时应当重写hashCode方法
hashCode需满足的条件当equals方法中涉及的参数没有改变时,hashCode应保持不变如果根据equals方法,两个对象是相等的,那么这两个对象的hashCode应该一样两个对象如果不相等,hashCode不强制要求不一样,但是如果能保证不一样,对哈希的效率会比较有帮助最重要的是第二点,相等的对象必须有相同的hashCode,由于默认的hashCode方法针对每一个对象返回一个固定的随机值(有的实现是根据对象地址返回值,相当于每一个对象对应一个固定的随机值),所以当我们使用equals
2021-09-06 17:18:03 226
原创 高效Java技巧之不滥用枚举的下标
所有的枚举类型都有一个ordinal方法,将返回枚举值在枚举类中的位置。// 滥用下标,将下标与枚举值的属性特征联系在一起,应当避免这样做 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return ordinal() + 1; }
2021-09-06 17:17:00 314
原创 高效Java技巧之尽可能使用枚举代替常量
有些类型的数据是可枚举的,比如一年的春夏秋冬四季、一年的十二个月、一周的七天,以及应用中其它可枚举的数据。有些代码中习惯使用常量来表示这些可枚举的数据,分为以下两种:int常量String常量 public static final int APPLE_FUJI =0; public static final int APPLE_PIPPIN =1; public static final int APPLE_GRANNY_SMITH = 2; public static f
2021-09-05 10:47:14 758
原创 Effective Java第二版笔记之使用私有构造器或枚举实现单例
什么是单例单例是指只会初始化一次,因而最多只会有一个实例的类。单例一般用来表示本质上只有一个的组件。比如操作系统中的窗体管理器和文件系统等。单例类具备哪些要求在使用单例时,需要考虑以下几点:访问权限控制,应当使用私有属性或方法生成实例反射攻击(防止通过反射调用私有属性或方法,生成新的实例)反序列化问题(防止多次反序列化生成多个不同的实例)线程安全(防止不同线程生成多个不同的实例)是否使用延迟加载,只在需要的时候才生成实例如果不考虑延迟加载的问题,枚举是实现单例的最佳选择。下面以一个完
2021-09-05 10:45:51 107
原创 Effective Java第二版笔记之考虑使用静态工厂方法代替构造器
创建对象最直接的想法就是通过new调用构造器,其实大多数情况下应当通过自己写一个静态公有方法,返回类的实例,比如下面这个方法: public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;}和直接使用构造器相比,使用静态工厂方法具有以下优点:静态工厂方法可以根据用途自己定义名称(不必与类相同),可读性更强静态工厂方法可能不用在每次调用时都创建新对象静态工厂方法可以返回声明
2021-09-05 10:44:43 83
原创 Spring MVC之使用Freemarker
Freemarker是使用比较广泛的模板,本文介绍如何使用Spring集成Freemarker,并提供完整实例进行演示。代码结构如下:代码结构定义Freemarker视图解析器和其它web应用一样,我们可以在WebMvcConfigurerAdapter定义ViewResolver(视图解析器),这里通过子类WebConfig来实现:@Configuration@EnableWebMvc@ComponentScan("tantanit.web")public class WebConfig
2021-09-05 10:40:52 743 1
原创 Spring MVC之使用Apache Tiles
有时候,一些页面会共用同样的布局,比如相同的头部菜单或者底部内容,可以将重复的内容抽取出来,写在单独的文件里,而每个页面在适当的地方引入这些文件。但是即使这样,也还是显得繁琐,而且一旦布局变化(比如头部的菜单移动到侧边栏),每个文件也都要改。而使用Apache Tiles,可以将方便地重复使用布局模板,由于布局间可以继承,对布局变化的处理也更加方便。定义Tiles视图解析器下面代码是继承自WebMvcConfigurerAdapter的WebConfig类,在其中定义了TilesConfigurer和T
2021-09-05 10:39:36 132
原创 Spring in Acton 4读书笔记之使用Thymeleaf
JSP的缺陷尽管JSP历史悠久、应用广泛,但它有以下缺陷:尽管看起来像,但既不是HTML,也不是XMLJSP标签库使文档格式不友好如果JSP标签没有在服务端正确编译后发给浏览器,浏览器由于不理解JSP标签,渲染的结果是一个灾难JSP标准和servlet耦合,所以JSP只能用于基于servlet的web应用视图。像email或者不基于servlet的web应用就无法使用JSP由于JSP有以上缺陷,许多模板试图取代JSP,而其中Thymeleaf是一个令人兴奋的选择。Thymeleaf自然,不依
2021-09-05 10:37:27 92
原创 Spring in Acton 4读书笔记之视图解析
什么是视图解析浏览器只识别静态的html文件。MVC中,controller并不直接生成html文件,而只负责为model填充数据,然后将model转给视图(view)。并且controller只知道视图的逻辑名称,并不负责视图的内容。这样,就将转发请求和解析视图这两件事在Spring MVC中进行了解耦。controller和view之间的耦合只在于对model中数据的定义。由于controller只提供了视图的逻辑名称,Spring要知道怎样渲染视图,就需要视图解析器的帮助。视图解析器定义了视图模板
2021-09-05 10:30:30 71 1
原创 Spring in Acton 4读书笔记之Spring MVC高级配置
上一篇文章中讲解了Spring MVC的基础配置,本文对应Spring in Action(Spring实战)第四版第七章中(7.1.1 Customizing DispatcherServlet configuration)和(7.1.2 Adding additional servlets and filters)的内容,将讲解如何自定义Spring MVC的配置。如同在上一篇文章所介绍的,任何继承了AbstractAnnotationConfigDispatcherServletInitialize
2021-09-05 10:27:36 83
原创 Spring MVC的基础配置
配置DispatcherServletDispatcherServlet是Spring MVC的核心,它负责接收request,并且决定request将转给哪个组件。历史上,包括DispatcherServlet的servlet是web.xml文件配置,而web.xml文件包含在war里。现在仍然可以用这种方式进行配置,但更好用的方式是使用java文件来配置servlet容器中的DispatcherServlet。任何继承了AbstractAnnotationConfigDispatcherServle
2021-09-05 10:26:17 192
原创 Spring in Action 4读书笔记之Spring MVC中请求的处理流程
我计划完成 50 到 100 篇有关 Spring 的文章,这是第十四篇。本文对应Spring in Action(Spring实战)第四版第五章的5.1.1(5.1.1 Following the life of a request),将讲述Spring MVC中请求的流程。每当用户在浏览器点击链接或者提交表单的时候,就会生成一个request。request就像一个邮差,负责将信息从一个地方地方传递到另一个地方。request很忙,它从离开浏览器开始,一直到跟着response返回到浏览器结束,会经
2021-09-05 10:21:49 91 1
原创 Spring in Acton 4读书笔记之使用AOP为类动态添加方法
我计划完成50到100篇有关Spring的文章,这是第十三篇。本文对应Spring in Action(Spring实战)第四版第四章中(4.3.4 Annotating introductions)的内容,将讲解如何使用标签为类动态添加方法。一些像Ruby和Groovy这样的语言,有开放类(open classes)的概念,可以在不改变类和对象的定义的情况下,增加新的方法。不幸的是,Java没有那么动态,一旦一个类编译好之后,很难再为这个类增加功能了。但是仔细想想,使用AOP的时候,难道不是在动态增加
2021-09-04 23:35:40 292 1
原创 Spring in Acton 4读书笔记之使用AOP监听函数的参数
在上一篇文章Spring in Action 4 读书笔记之使用标签创建 AOP中讲解了如何使用标签定义aspect,本文继续进行这部分内容。如前所述,Spring的AOP都是作用在方法级别,有时候,需要监听函数的参数,本文讲解如何根据不同的参数值,执行不同的行为。比如下面的代码,记录不同参数执行的次数。定义aspectpackage soundsystem;import java.util.HashMap;import java.util.Map;import org.aspectj.lang.
2021-09-04 23:34:30 153
原创 Spring in Action 4读书笔记之使用标签创建AOP
在之前的读书笔记Spring in Acton 4读书笔记之AOP原理及Spring对AOP的支持中,讲到Spring对AOP的支持包含四方面:Spring基于代理的经典的AOP使用XML配置将纯POJO转化为aspect使用Spring的@Aspect标签,创建aspectSpring不创建aspect,只注入(引用)AspectJ框架的aspectSpring in Action(Spring实战)的第四章第三节(4.3 Creating annotated aspects)讲述了其中第三
2021-09-04 23:32:15 77
原创 java三段式中包装类报空指针异常的bug
最近在开发中遇到一个莫名其妙的bug,一个给Double类型赋值的三段式报了空指针异常,从程序字面上完全看不出有什么问题。项目代码,不方便直接贴,我写了下面这段例子进行说明:直接使用null赋值给三段式public static Double test() { Double b = null; Double result = b == null ? n...
2020-02-15 15:03:44 645
原创 使用jQuery向上遍历
使用parent(),parents()和closest()表示向上遍历,其中parent()返回直接父节点,最多一个,parents()返回所有的祖先节点,结果可以有多个,函数可以加过滤条件。closest指包括自己和所有祖先节点中,满足条件的最近的节点,结果最多一个,该函数一般会加参数,不加参数时结果为自己。<div id="parent2"><div id="pare...
2020-02-15 15:01:59 159
原创 jQuery判断和处理页面元素的可见性
jQuery使用"hidden"和"visible"过滤器来判断页面元素是否可见,判断方式和css有些不同。jQuery是根据页面元素是否占用了空间来判断,而不是仅根据页面自身的属性。如果父元素是隐藏的,那么子元素也被认为是隐藏的,因为在页面中子元素是看不到,并且不占用空间的。<div id="parentDiv" style="display: none;"><div i...
2020-02-15 15:00:47 308
原创 jQuery对象集按DOM元素的顺序排序
jQuery对象集是按DOM元素的顺序排序的,请看以下例子。<div id="testOrder"><h1>h1</h1><h2>h2</h2><h3>h3</h3></div>alert($('h3, h2, h1').get(0).nodeName);虽然选择器的顺序是按照h3,h...
2020-02-15 14:58:42 602
原创 浅谈变量对jQuery对象集的引用
<div id="testOrder"><h1>h1</h1><h2>h2</h2><h3>h3</h3></div>var hs=$("#testOrder").children();document.getElementsByTagName('h1')[0].innerHTML="ne...
2020-02-15 14:57:06 133
原创 jQuery对象链详解
jQuery函数通过返回jQuery对象集,可以继续使用jQuery函数,这样就形成了一个链条。需要注意的是,有些方法会改变对象集,此时想要返回到上一个对象集,要用end()方法。<table> <tr> <td>As You Like It</td> <td>Comedy</td> <...
2020-02-15 14:55:57 123
原创 将jQuery对象转为普通DOM元素
jQuery对象集是按DOM元素的顺序排序的,请看以下例子。<div id="testOrder"><h1>h1</h1><h2>h2</h2><h3>h3</h3></div>alert($('h3, h2, h1').get(0).nodeName);虽然选择器的顺序是按照h3,h...
2020-02-15 14:53:01 512 1
原创 Javascript的this与jQuery的$(this)的比较
javascript的this关键字代表当前DOM元素,(this)表示对this的引用,也就是对当前DOM元素的引用,其实是一回事。将(this)表示对this的引用,也就是对当前DOM元素的引用,其实是一回事。将(this)表示对this的引用,也就是对当前DOM元素的引用,其实是一回事。将(this)转为DOM元素后就是this。也就是说$(this)[0]===this。将jQuery对象...
2020-02-15 14:50:14 181
原创 jQuery的text()方法与html()方法比较
jQuery中对文本内容有text()、html()以及val()方法。对input和textarea元素,使用val()方法获取和设置文本内容。对其它元素,可以使用text方法获取文本,html获取节点内的html内容。以下主要比较text和html方法。使用text()方法获取文本将符合条件的所有元素以及它们的子元素的文本内容用空格或换行符拼接起来。这里有四个点:会对所有符合条件的j...
2020-02-15 14:48:16 688
原创 使用jQuery在DOM或window加载后执行动作
页面上的javascript执行,除了用户主动交互的事件外,都是在DOM加载完成或window完全加载后执行的(甚至连定时事件也是在此时开始计时)。以下分别分析jQuery针对这两种情况的处理。使用ready方法定义在DOM被加载后执行的动作在DOM被加载后执行,不必等要页面元素都渲染完。三种语法// Standard.jQuery(document).ready(function (...
2020-02-15 14:46:23 722
原创 如何将select控件设置为只读
select控件是否有readonly属性select控件自身没有readonly属性,只有disable属性。能否使用disable属性设置select控件为只读select设置为disable属性后,确实不可改,起到只读的作用,但设置为disable后,name属性也失效了,传递到后台时,对应的属性值变为null了。有一种解决办法是在提交到后台之前将disable属性去掉,但在页面上...
2020-02-15 14:44:27 5891
原创 《Spring in Acton》第四版读书笔记之如何装配Bean
Spring中装配的主要方式XML显式配置Java显式配置使用Java隐式扫描bean并自动装配三种方式各有好处,作者认为选哪种只是口味问题,但强烈建议使用第三种(使用Java隐式扫描bean并自动装配),并且建议即使要用显式配置,也尽量使用Java配置,因为Java更好用(powerful),具有类型安全检查,并且更好重构。只有在XML有命名空间可以很方便使用,而JavaConfig...
2020-02-15 14:37:45 93
原创 java8之如何使用函数引用
在上一篇文章中以实例讲解如何定义和使用lambda表达式,以及与其它语言相比,lambda表达式在Java中的特殊规范。并且提到,lambda表达式可以进一步简化为函数引用。这篇文章将介绍如何使用函数引用。函数引用的类型函数引用分为以下四种:静态函数,比如Integer类的parseInt函数,可以写作Integer::parseInt对象级别函数的引用,比如String类的length...
2020-02-15 14:35:28 1461
原创 java8之lambda实例解析
在上一篇文章中介绍了lambda表达式的语法,引入了lambda表达式的使用场景,以及使用lambda 表达式的好处。我们将在这篇文章中,以实例讲解如何定义和使用lambda表达式,以及与其它语言相比,lambda表达式在Java中的特殊规范。使用匿名内部类的例子首先明确一点,在Java8出现之前,lambda表达式能够做到的,使用内部类也能做到,lambda表达式只是简化了编程。下面的例子...
2020-02-15 14:32:32 306
原创 Java8详解之lambda表达式
首发于谈谈ITJava8中引入了lambda表达式,从行为参数化的角度,在使用时,将行为作为参数,去除包围在外层的不必要的类声明,使代码更加简洁。lambda表达式的语法lambda表达式由参数,->,以及函数体三部分组成。其实函数体可以是表达式,也可以是语句。语句应该包含在{}里,而表达式不能。lambda表达式举例(List<String> list) -> ...
2020-02-14 20:15:57 167
原创 Spring in Action 4读书笔记之使用标签创建AOP
原文链接地址:http://tantanit.com/springinaction4-du-shu-bi-ji-zhi-shi-yong-biao-qian-chuang-jian-aop/在之前的读书笔记Spring in Acton 4读书笔记之AOP原理及Spring对AOP的支持中,讲到Spring对AOP的支持包含四方面:Spring基于代理的经典的AOP使用XML配置将纯POJO转...
2016-11-08 06:06:53 188
原创 《Spring in Action》第四版第一章《将Spring付诸实践》读书笔记(二)
原文链接地址:http://tantanit.com/springinaction-di-si-ban-di-yi-zhang-jiang-spring-fu-zhu-shi-jian-du-shu-bi-ji-er/ Spring in Action(Spring实战)的这一章是对Spring进行概述,讲述了Spring的项目宗旨,基本原理和关键策略。并且对Spring框架进行了概览,比较Spr
2016-10-23 21:24:50 917
原创 《Spring in Action》第四版第一章《将 Spring 付诸实践》读书笔记(一)
Spring的宗旨和关键策略原文链接地址:http://tantanit.com/springinaction-di-si-ban-di-yi-zhang-jiang-spring-fu-zhu-shi-jian-du-shu-bi-ji-yi/ Spring in Action(Spring实战)的这一章是对Spring进行概述,讲述了Spring的项目宗旨,基本原理和关键策略。并且对Sprin
2016-10-23 21:19:07 1277
原创 WordPress 后台只有菜单,没有内容的解决办法
有时候在WordPress系统迁移后,或者在动了apache或php后,发现后台菜单都在,但是点击时,右侧窗体却不加载,内容为空白。而插件菜单都可以点击并且正常。惨状就像下面这张图这样:或许,你还能发现以下的报错信息:Fatal error: Access to undeclared static property: WP_Screen::$thisin blog/wp-admin/include
2016-08-23 08:51:43 1894
原创 Javascript中!!(两个感叹号,双感叹号)的含义
原文地址 http://tantanit.com/javascript-zhong-liang-ge-gan-tan-hao-shuang-gan-tan-hao-de-zuo-yong/使用javascript时,有时会在变量前面加上两个感叹号,这样做表示什么含义呢?Javascript中,!表示运算符“非”,如果变量不是布尔类型,会将变量自动转化为布尔类型,再取非,那么用两个!!就可以将变量转化
2016-08-23 08:49:44 29575 5
原创 Eclipse报PermGen space内存不足的解决办法
Eclipse报PermGen space内存不足的解决办法本文转载自http://tantanit.com/eclipse-bao-permgen-space-nei-cun-bu-zu-de-jie-jue-ban-fa/ 使用Eclipse开发Java Web应用时,经常会发现内存不足,报出内存溢出。此时,按照上图步骤编辑相应jre属性,并填写以下参数,并确保保存成功即可。-Xms640m
2016-06-14 11:31:00 371
原创 sqlplus下注释导致语句重复执行
原文地址:http://tantanit.com/sqlplus-xia-zhu-shi-dao-zhi-yu-ju-chong-fu-zhi-xing/在sqlplus下,一些平时经常用到的sql注释可能导致语句重复执行,从而引发错误。sql的标准单行注释是两个英文减号–后面加上注释的内容,貌似sql没有标准多行注释。多行注释中,用得比较多的是C风格的注释/*这些是注释*
2013-08-13 17:58:31 1197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人