- 浏览: 1247521 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
1. 方法的连续调用而没有判断,很容易抛出NullPointerException等异常
session.getAttribute("giant")很可能是null值,再调用toString()会产生空指针异常。
解决方法:
对于强制转换的情况:
这里除了会出现NullPointerException值外,还有可能出现ClassCastException。
解决方法:
2. 通过try...catch块来控制程序流程是不可取的,对异常的跟踪通常会遍历整个栈。
3. for循环的判断表达式应该简单,而不是复杂或耗时的运算,如果遍历次数很多,会对性能造成影响:
可以优化成:
目前很多Java虚拟机都会优化该功能。我们可以使用Sun的server或hotspot模式以及其它jvm实现。
4. String的startsWith(String prefix),prefix是大小写敏感的。
5. 数据库表的主键字段通常是int或者bigint类型,但也有可能是其它类型。假设主键类型声明为varchar,值是由数字组成的,根据int或者bigint来查询是会出问题的:
表Employee
emp_id (varchar) emp_name (varchar)
13103422 Pinnacle
09084323 Commensurate
6. StringBuilder或StringBuffer拼接的字符串,获取所有的用toString()方法;获取部分的直接用substring()方法,这样只创建一个String实例:
下面获取部分的方式会创建两个String实例:
7. jar打包和解压
将当前目录下的指定文件夹(包括子文件夹和文件)和文件打包成指定jar文件
同上,区别是使用指定的清单文件,而不是创建清单文件
解压指定jar包到当前目录
显示指定jar包的文件列表
选项:
-c 创建新的jar包
-u 更新已存在的jar包
-t 显示jar包中的文件列表
-x 解压jar包
-v 显示压缩或解压的详细信息
-f 指定jar文件名称
-m 指定清单文件并包含到jar包中
-e 指定jar包的执行入口点
-0 只存储,不压缩
-M 不生成清单文件
-i 生成索引信息
-C 切换到指定的目录,将目录下的指定文件包含到jar包中
8. JDK1.5及以下不支持注解
编译环境为JDK1.5及以下时,在代码上加注解会报错:
9. 服务发布后,运行时NoSuchFieldError或NoSuchMethodError错误
jar版本冲突,另一个版本的类先被JVM加载,导致获取其属性或调用其方法时报错。
预防:编码注意包和类名的设置,清晰,简洁,尽量不重复。
解决:移除不同版本的jar,MAVEN工程通过pom.xml文件的[Exclude Maven Artifact...]菜单;将正确版本的jar包放在classpath其它版本的前面(风险大)。
10. 三层架构:表现层(MVC),中间层,数据访问层(DAO)
表现层
常用的框架是:SpringMVC,Struts1,2
中间层
粘合表现层和数据访问层,把各种对象放到容器中进行管理,以及业务处理。
中间层可以细分为业务层和服务层,业务层主要是通过调用各种服务来实现复杂的逻辑;服务层提供基本的服务调用,封装了数据操作,可以实现事务。
常用的框架是:Spring, EJB
数据访问层
和数据库打交道,获取以及持久化数据,通常一个方法只操作一次数据,不存在事务性问题。
常用的框架是:Hibernate, iBatis
11. 没有修饰符的构造函数,即为protected的:
12. 原始类型和包装类型
原始类型如:byte, boolean, char, short, int, long, float, double
对应的包装类型:Byte, Boolean, Character, Short, Integer, Long, Float, Double
原始类型有自己的默认值,如int的默认值为0
包装类型的默认值都是null。
JDK5.0起支持编译器自动装箱(从原始到包装)和拆箱(从包装到原始)。
包装类型为null时,和原始类型比较会报错:
String infant = session.getAttribute("giant").toString();
session.getAttribute("giant")很可能是null值,再调用toString()会产生空指针异常。
解决方法:
String infant = null; Object plantation = session.getAttribute("giant"); if (plantation != null) { infant = plantation.toString(); }
对于强制转换的情况:
String infant = ((Elephant)session.getAttribute("giant")).eat();
这里除了会出现NullPointerException值外,还有可能出现ClassCastException。
解决方法:
String infant = null; Object plantation = session.getAttribute("giant"); if (plantation != null && plantation instanceof Elephant) { infant = ((Elephant)plantation).eat(); }
2. 通过try...catch块来控制程序流程是不可取的,对异常的跟踪通常会遍历整个栈。
3. for循环的判断表达式应该简单,而不是复杂或耗时的运算,如果遍历次数很多,会对性能造成影响:
List<Bean> beans = new ArrayList<Bean>(); for (int i = 0; i < obj.getPressure().length; i++) { Bean bean = new Bean(); bean.setAccuracy(obj.getAccuracy()[i]); bean.setPressure(obj.getPressure()[i]); beans.add(bean); }
可以优化成:
for (int i = 0, len = obj.getPressure().length; i < len; i++) { Bean bean = new Bean(); bean.setAccuracy(obj.getAccuracy()[i]); bean.setPressure(obj.getPressure()[i]); beans.add(bean); }
目前很多Java虚拟机都会优化该功能。我们可以使用Sun的server或hotspot模式以及其它jvm实现。
4. String的startsWith(String prefix),prefix是大小写敏感的。
5. 数据库表的主键字段通常是int或者bigint类型,但也有可能是其它类型。假设主键类型声明为varchar,值是由数字组成的,根据int或者bigint来查询是会出问题的:
表Employee
emp_id (varchar) emp_name (varchar)
13103422 Pinnacle
09084323 Commensurate
String empId = "13103422"; Integer id = NumberUtils.toInt(empId); // id = 13103422 Employee emp1 = EmployeeService.getEmployeeById(id); // 可以拿到数据 String empId2 = "09084323"; Integer id2 = NumberUtils.toInt(empId2); // id = 9084323 Employee emp2 = EmployeeService.getEmployeeById(id2); // 拿不到数据
6. StringBuilder或StringBuffer拼接的字符串,获取所有的用toString()方法;获取部分的直接用substring()方法,这样只创建一个String实例:
StringBuffer sb = new StringBuffer(); for (int i = 0; i < 4; i++) { sb.append("candy").append(i).append("|"); } String retVal = sb.substring(0, sb.length() - 1);
下面获取部分的方式会创建两个String实例:
String str = sb.toString(); String retVal = str.substring(0, str.length() - 1);
7. jar打包和解压
将当前目录下的指定文件夹(包括子文件夹和文件)和文件打包成指定jar文件
jar cvf reconciliate.jar org lib about.html plugin.xml plugin.properties
同上,区别是使用指定的清单文件,而不是创建清单文件
jar cvfm reconciliate.jar META-INF/MANIFEST.MF *
解压指定jar包到当前目录
jar xvf reconciliate.jar
显示指定jar包的文件列表
jar tf .jar
选项:
-c 创建新的jar包
-u 更新已存在的jar包
-t 显示jar包中的文件列表
-x 解压jar包
-v 显示压缩或解压的详细信息
-f 指定jar文件名称
-m 指定清单文件并包含到jar包中
-e 指定jar包的执行入口点
-0 只存储,不压缩
-M 不生成清单文件
-i 生成索引信息
-C 切换到指定的目录,将目录下的指定文件包含到jar包中
8. JDK1.5及以下不支持注解
编译环境为JDK1.5及以下时,在代码上加注解会报错:
public interface Config { void set(String key, String value); } public class ConfigImpl implements Config { @Override public void set(String key, String value) { } }
9. 服务发布后,运行时NoSuchFieldError或NoSuchMethodError错误
jar版本冲突,另一个版本的类先被JVM加载,导致获取其属性或调用其方法时报错。
预防:编码注意包和类名的设置,清晰,简洁,尽量不重复。
解决:移除不同版本的jar,MAVEN工程通过pom.xml文件的[Exclude Maven Artifact...]菜单;将正确版本的jar包放在classpath其它版本的前面(风险大)。
10. 三层架构:表现层(MVC),中间层,数据访问层(DAO)
表现层
常用的框架是:SpringMVC,Struts1,2
中间层
粘合表现层和数据访问层,把各种对象放到容器中进行管理,以及业务处理。
中间层可以细分为业务层和服务层,业务层主要是通过调用各种服务来实现复杂的逻辑;服务层提供基本的服务调用,封装了数据操作,可以实现事务。
常用的框架是:Spring, EJB
数据访问层
和数据库打交道,获取以及持久化数据,通常一个方法只操作一次数据,不存在事务性问题。
常用的框架是:Hibernate, iBatis
11. 没有修饰符的构造函数,即为protected的:
public class Mankind { Mankind() {} // 和 protected Mankind() {} 效果相同 }
12. 原始类型和包装类型
原始类型如:byte, boolean, char, short, int, long, float, double
对应的包装类型:Byte, Boolean, Character, Short, Integer, Long, Float, Double
原始类型有自己的默认值,如int的默认值为0
包装类型的默认值都是null。
JDK5.0起支持编译器自动装箱(从原始到包装)和拆箱(从包装到原始)。
包装类型为null时,和原始类型比较会报错:
Integer val = null; if (val != 0) { // val为null, null是特殊的引用类型,无法拆箱和int比较,报空指针异常 } // 可以写成 if (val != null && val != 0) { } // 或者 if (Integer.valueOf(0).equals(val)) { // equals参数可以传null }
发表评论
-
Netty系列之二、Netty组件
2014-10-12 19:55 0Netty主要由以下几个组件构成: Bootstrap o ... -
Netty系列之二:传输方式
2014-09-17 22:35 0NIO (Non-blocking I/O) io.netty ... -
Java正则表达式实例
2014-08-25 22:50 1929题目: 有两个文件context.txt和words ... -
quartz系列之九:存储
2014-08-05 13:16 0这里以1.8.x为例: 任务 ... -
JVM 四种引用
2014-04-24 19:56 17591. 强引用 指通过普通 ... -
Proxy 源码分析
2014-04-21 10:47 0public class Proxy implements ... -
NIO UDP 编程
2014-04-17 23:18 4249和TCP的SocketChannel类似,UDP的Dat ... -
Matcher 源码分析
2014-04-15 14:45 0首先看下接口: public interface Matc ... -
BTrace 使用
2014-03-20 18:03 0简介 Btrace (Byte Trace)是Sun推出的一款 ... -
NIO Socket 编程
2014-04-11 22:48 1658Java NIO (Nonblocking IO)解决了常规I ... -
hessian系列之二:上传文件
2014-02-17 17:16 6215hessian较早版本通过 byte[] 进行文件传输;4.0 ... -
hessian系列之三:与Spring集成
2014-02-17 20:21 17878Spring封装了hessian客户端和服务端的通用代码,把实 ... -
hessian系列之一:Hello world
2014-01-06 20:51 2293Hessian是一个Web Service的轻量级二进制协议, ... -
XStream:自定义转换器
2013-12-30 22:47 0XStream是一款不错的oxm (Object-XML ma ... -
Http连接工具类
2013-12-28 16:13 0public class HttpConnUtil { ... -
Integer源码分析
2013-12-26 19:59 0private static String toU ... -
全排序
2013-12-23 21:02 0写一个函数, 如 foo(String str), 打印出 s ... -
logback系列之四:输出日志到不同文件
2013-12-03 16:25 68970logback系列之一:输出日志到控制台 logback系列之 ... -
Properties 源码分析
2013-11-26 10:32 01. Properties类扩展了Hashtable,用来保存 ... -
logback系列之三:输出日志到文件(滚动)
2013-11-16 23:37 64396logback系列之一:输出日志到控制台 logback系列之 ...
相关推荐
计算机核心 Java 编程笔记 Java 语言是当前最流行的编程语言之一,它具有灵活、强大、跨平台等特点。Java 语言可以应用于桌面应用程序、Web 应用程序、移动应用程序等多种领域。为了更好地学习和掌握 Java 语言,本...
### JAVA编程笔记知识点详解 #### 1. Java可以做什么? - **开发桌面应用程序**:Java 可以用于开发各类桌面应用程序,例如银行软件、商场结算系统等。这些应用程序通常需要良好的用户界面和强大的后台处理能力。 ...
自学笔记
毕向东视频的笔记.docx 参数传递.docx 第二周所学总结.docx 反射机制.docx 泛型.docx 封装和继承以及多态部分.docx 接口和抽象类以及实现类.docx 枚举enum.docx 设计模式.docx 数组.docx 网络编程.docx 线程和内部类...
"Java核心编程笔记fourth" Java核心编程笔记fourth 是一份详细的 Java 编程笔记,涵盖了 Java 基础知识、变量、数据类型、流程控制、修饰符、动作、保留字等方面的知识点。 一、标识符 在 Java 中,标识符是由...
这些笔记主要涵盖了Java网络编程的基础概念、核心技术以及一些实践应用。下面将详细展开讲解相关知识点。 1. **网络基础知识**:网络编程首先需要理解TCP/IP协议族,包括IP地址、端口号、传输层(TCP/UDP)以及应用...
#### 标题解析:Java网络编程笔记 在当今数字化时代,网络编程已成为软件开发中不可或缺的一部分,尤其在J2EE(Java 2 Platform, Enterprise Edition)框架下,其重要性更为凸显。J2EE为构建企业级应用提供了强大的...
java编程思想笔记,建议与书本结合使用。。。。。。。。。。。
Java编程笔记本程序是一种用于记录、组织和执行代码的软件应用,它可以帮助开发者高效地管理和学习各种编程知识。在这个“java 笔记本”压缩包中,我们可能找到了一个与Java编程相关的代码示例或者教程资源,文件名...
这个压缩包包含了从第1章到第6章的Java编程笔记的源代码,旨在帮助读者深入理解Java语言的基本概念、语法和常用技术。在本文中,我们将详细探讨这些章节可能涵盖的关键知识点。 1. **Java简介** - Java的历史和...
Java编程语言是软件开发领域的重要组成部分,尤其对于初学者来说,掌握Java的基础知识至关重要。"Java超强笔记"正是一份专为新手准备...通过系统地学习这份笔记,你将能够熟练掌握Java编程,并具备解决实际问题的能力。
通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...
【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...
Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...
【Java编程语言基础】 Java是一种广泛使用的面向对象的编程...这些笔记内容全面覆盖了Java的基础和进阶知识,适合从零开始学习Java的人群,通过系统学习,可以建立起扎实的Java编程基础,为实战项目开发打下坚实基础。
Java,作为一种广泛使用的编程语言,尤其在企业级应用开发中占据着重要地位。"Java学习笔记——良葛格"是...通过学习这份笔记,读者可以逐步掌握Java编程的基本技能,并为进一步深入学习Java和相关技术打下坚实的基础。
《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...
【狂神说Java系列笔记.rar】是一份涵盖了2020年7月份的全面Java学习资源,其中包含了从基础到高级的多个主题。...通过系统学习,开发者可以逐步掌握从简单的Java编程到复杂微服务架构的设计和实现。
《李兴华Java实战经典笔记》是一份深入探讨Java编程技术的宝贵资料,由知名IT教育专家李兴华编撰。这份笔记集合了他在教学和实践中积累的丰富经验,旨在帮助学习者掌握Java的核心概念、设计模式以及实战技巧。通过这...