`

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编程笔记

    ### JAVA编程笔记知识点详解 #### 1. Java可以做什么? - **开发桌面应用程序**: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读书笔记笔记笔记笔记笔记笔记

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

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

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言: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的核心概念、设计模式以及实战技巧。通过这...

Global site tag (gtag.js) - Google Analytics