`

Java 编程 笔记

    博客分类:
  • java
阅读更多
1. 方法的连续调用而没有判断,很容易抛出NullPointerException等异常

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. 服务发布后,运行时NoSuchFieldErrorNoSuchMethodError错误

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
}
分享到:
评论

相关推荐

    计算机核心java编程笔记

    计算机核心 Java 编程笔记 Java 语言是当前最流行的编程语言之一,它具有灵活、强大、跨平台等特点。Java 语言可以应用于桌面应用程序、Web 应用程序、移动应用程序等多种领域。为了更好地学习和掌握 Java 语言,本...

    java编程笔记.word

    自学笔记

    java语言程序设计 java编程笔记 由浅入深的笔记 共32份 全套资源.rar

    毕向东视频的笔记.docx 参数传递.docx 第二周所学总结.docx 反射机制.docx 泛型.docx 封装和继承以及多态部分.docx 接口和抽象类以及实现类.docx 枚举enum.docx 设计模式.docx 数组.docx 网络编程.docx 线程和内部类...

    Java核心编程笔记fourth

    "Java核心编程笔记fourth" Java核心编程笔记fourth 是一份详细的 Java 编程笔记,涵盖了 Java 基础知识、变量、数据类型、流程控制、修饰符、动作、保留字等方面的知识点。 一、标识符 在 Java 中,标识符是由...

    一部分网络编程笔记总结

    这些笔记主要涵盖了Java网络编程的基础概念、核心技术以及一些实践应用。下面将详细展开讲解相关知识点。 1. **网络基础知识**:网络编程首先需要理解TCP/IP协议族,包括IP地址、端口号、传输层(TCP/UDP)以及应用...

    java网络编程笔记

    #### 标题解析:Java网络编程笔记 在当今数字化时代,网络编程已成为软件开发中不可或缺的一部分,尤其在J2EE(Java 2 Platform, Enterprise Edition)框架下,其重要性更为凸显。J2EE为构建企业级应用提供了强大的...

    java编程思想笔记

    java编程思想笔记,建议与书本结合使用。。。。。。。。。。。

    java 笔记本

    Java编程笔记本程序是一种用于记录、组织和执行代码的软件应用,它可以帮助开发者高效地管理和学习各种编程知识。在这个“java 笔记本”压缩包中,我们可能找到了一个与Java编程相关的代码示例或者教程资源,文件名...

    java博客笔记源码

    这个压缩包包含了从第1章到第6章的Java编程笔记的源代码,旨在帮助读者深入理解Java语言的基本概念、语法和常用技术。在本文中,我们将详细探讨这些章节可能涵盖的关键知识点。 1. **Java简介** - Java的历史和...

    java超强笔记

    Java编程语言是软件开发领域的重要组成部分,尤其对于初学者来说,掌握Java的基础知识至关重要。"Java超强笔记"正是一份专为新手准备...通过系统地学习这份笔记,你将能够熟练掌握Java编程,并具备解决实际问题的能力。

    Java游戏编程读书笔记

    通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    java全套笔记 来自狂神说java笔录.zip

    【Java编程语言基础】 Java是一种广泛使用的面向对象的编程...这些笔记内容全面覆盖了Java的基础和进阶知识,适合从零开始学习Java的人群,通过系统学习,可以建立起扎实的Java编程基础,为实战项目开发打下坚实基础。

    Java学习笔记——良葛格

    Java,作为一种广泛使用的编程语言,尤其在企业级应用开发中占据着重要地位。"Java学习笔记——良葛格"是...通过学习这份笔记,读者可以逐步掌握Java编程的基本技能,并为进一步深入学习Java和相关技术打下坚实的基础。

    java编程思想读书笔记

    《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...

    狂神说Java系列笔记.rar

    【狂神说Java系列笔记.rar】是一份涵盖了2020年7月份的全面Java学习资源,其中包含了从基础到高级的多个主题。...通过系统学习,开发者可以逐步掌握从简单的Java编程到复杂微服务架构的设计和实现。

    李兴华java笔记

    《李兴华Java实战经典笔记》是一份深入探讨Java编程技术的宝贵资料,由知名IT教育专家李兴华编撰。这份笔记集合了他在教学和实践中积累的丰富经验,旨在帮助学习者掌握Java的核心概念、设计模式以及实战技巧。通过这...

    韩顺平编写的java学习笔记(全)

    #### Java编程方向 - **Java SE (J2SE)**:桌面应用开发的基础。 - **Java EE (J2EE)**:Web应用开发。 - **Java ME (J2ME)**:移动设备应用开发。 #### Java SE课程内容 1. **面向对象编程**:Java的核心概念之...

Global site tag (gtag.js) - Google Analytics