Java学习札记
(1)对于ArrayList、Vector、LinkedList等List集合而言,当使用Iterator遍历他们时,如果正在遍历倒数第二个几何元素,使用List集合的remove()方法删除集合的任意一个元素并不会引发ConcurrentModificationException异常, 当正在遍历其他元素时,就会引发该异常。
对于TreeSet、HashSet等Set集合而言,当使用Iterator遍历他们时,如果正在遍历最后一个几何元素,使用Set集合的remove()方法删除集合的任意一个元素并不会引发ConcurrentModificationException异常, 当正在遍历其他元素时,就会引发该异常。
(2)当需要使用字符串,还有Byte,Short,Integer,Float,Double,Boolean,Character等包装类的实例时,程序不应该采用new的方式来创建对象,而应该直接采用直接量来创建它们。如使用String str=”Hello”;而不是String str=new String(“Hello”);
(3)对于String类而言,它代表字符串序列不可改变的字符串,因此,如果程序需要一个字符序列会发生改变的字符串,那应该考虑StringBuilder或StringBuffer(通常更优先考虑前者)。
(4)对String类型的变量,”==”比较两个字符串是否引用同一个实例对象,”equals”则比较两个字符串中对应每个字符是否相等。
(5)如果在编译Java程序时提出形如“非法字符:\xxxxx”的错误提示,那么可断该程序中包含全角字符,逐个删除即可。
(6)尽量保留循环体的花括号,否则容易出错。do,while,for不允许循环体语句为单独的局部变量赋值操作(在无花括号情况下会出错)。
(6)进行异常捕获时,一定要记住先捕获小的异常,再捕获大的异常。
(7) 无论如何不要在finally块中递归调用可能引起异常的方法,因为这将导致该方法的异常不能正常被抛出,甚至StackOverFlow错误也不能终止程序。
(8)str.getBytes().length - str.length();获取字符串中汉字的数目(无其他特殊字符)
(9)静态内部类可以有静态成员,而非静态内部类则不能有静态成员。静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量。非静态内部类的非静态成员可以访问外部类的非静态变量。
(10)局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量 (final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。
(11)任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。
(12)当一个变量被声明为泛型时,只能被实例变量和方法调用,不能被静态变量和方法调用。原因很简单,参数化的泛型是一些实例。静态成员是被类的实例和参数化的类所共享的。所以静态成员不应该有类型参数和它相关联。
(13)Java程序设计的基本原则
a.面向接口编程
b.优先使用对象组合而非类继承
c.分层 最典型的三层架构:表现层->逻辑层->数据层
表现层:展示数据、人机交互、收集参数调用逻辑层
逻辑层:进行数据与逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层
数据层:实现数据持久化、实现对象和持久化数据的双向映射
一定是表现层调用逻辑层,逻辑层调用数据层、不可以反过来。
层间交互也应该通过接口进行调用,以确保各层实现独立变化。
(14)类设计的基本经验
a.类要单一
b.加强内聚,松散耦合
c.好的封装性
d.类的粒度要合理(类一般不超过5000行,方法不超过100行)
e.实现类不能依赖它的使用类
f.应考虑灵活性,也就是可配置(可以通过修改配置文件来选择系统实现的功能)、可维护(设计指标,系统可以很方便地修改已有的功能)
g.要考虑性能,考虑可伸缩性
h.要考虑今后可能的变化,也就是可扩展性
i.要考虑合理的复用
j.要合理地考虑接口和抽象类的使用 优先使用接口,既要约束子类的行为又要为子类提供公共的功能时优先使用抽象类
k.尽量减少类与协作类的交互次数和交互信息的量
l.父类不应该子类的信息,子类必须知道父类的信息
m.访问对象必须通过接口,不能绕过接口直接去实现
相关推荐
在"0-学习札记快速整理软件-小组成员及分工1"的项目中,我们可以看到一个典型的软件开发团队结构,该团队由多个成员组成,每个人都有明确的任务和职责。下面将详细讨论这个项目中涉及的IT知识点。 首先,源代码框架...
### JVM学习札记 #### 一、JVM运行机制 ##### 1、JVM的启动流程 JVM的启动过程主要包括以下步骤: 1. **加载配置文件**:JVM启动时,首先会根据当前路径寻找配置文件`JVM.CFG`,这个文件包含了JVM的一些基础设置...
在"学习PMD软件中的札记"中,我们重点探讨了如何利用PMD来提升代码质量,并关注了`UseSingleton`规则。 `UseSingleton`是PMD中的一个规则,其目标是检测那些可以被设计为单例(Singleton)但当前并未如此实现的类。...
JUnit是Java编程语言中最常用的单元测试框架之一,用于编写和...学习并熟练掌握JUnit对于任何Java开发者来说都是至关重要的,它可以帮助我们建立健壮的代码,提高软件质量,并且在团队协作中提供了一种可靠的验证方式。
标题:“401java-reading-notes”是一个由代码研究员训练营(CODE-401)提供的Java学习资料,特别是针对Java编程语言的基础和深入理解进行的阅读笔记。这些笔记旨在帮助学员系统地掌握Java的知识体系,包括但不限于...
【JSP&Servlet学习札记】是一份详细记录了JavaServer Pages(JSP)和Servlet核心技术的学习笔记。这些技术是Web开发中的重要组成部分,尤其在企业级应用开发中广泛使用。下面将对JSP和Servlet的主要概念、核心功能...
这份手册的写作风格非常接近技术札记,不同于正式的书籍或手册。作者强调了笔记的实用性和个人特色,它更适合那些已经具备一定编程背景、特别是有Java经验的开发者,想要快速入门Clojure的人。 Clojure Handbook的...
【描述】中的"札记"表明这是一系列深入的学习笔记,分为四个部分:“代码102-软件开发简介”、“代码201 -软件开发的基础”、“代码301-中间软件开发”和“代码401-高级软件开发”。这四个部分代表了一个逐步深入的...
札记 技术要点: RPC: 登录及权限操作redis + session处理 搜索文章基于elasticsearch (内存不够了,暂停使用☻) 评论和关注等消息基于activemq: 数据结果处理: 开发: master采用的是rpc的微服务架构。 正常...
札记的形式使得内容更加聚焦于关键点和理解难点,帮助读者更好地消化和吸收编程知识。 在深入阅读和理解代码的过程中,有几个重要的知识点是不容忽视的: 1. **编程基础**:这是所有程序员的起点,包括基本语法、...
通过研究这个开源项目,开发者可以学习到完整的Web应用开发流程,包括前端界面设计、后端逻辑处理、数据库操作、API集成以及项目部署等方面的知识,对提升个人技能和理解实际项目开发有着重要的作用。同时,参与开源...