让final融入你的程序习惯。
final常量:
final变量:
final参数:
final集合:Collections.unmodifiableSet(temp);
final实例变量:
final类:
final方法:
使用final完成条件编译:
Immutable对象应注意的问题:
是private 实例变量不代表别人不可改变它的:
1. private Mutable变量:得到Mutable变量引用便可改变其中的内容。
2.使使用用反射可以突破引用变量或方法的访问限制:Class java.lang.reflect.AccessibleObject。
因此真正的不可变对象应注意:
对传入的对象进行拷贝:setPoint(Point p){this.point = new Point(p)};
对返回的对象进行拷贝:getPoint(){return new Point(this.point);}
注意利用反射突破访问限制直接修改属性:使用final来避免。private final 。。。这样只要值定下来就真正不可改变了。
由于不可变对象的固有特性:对于大对象应慎重考虑是否应该不可变的:每次返回都需要进行大对象的拷贝,十分影响性能。String--》StringBuffer就是一个例子(改变对象时应该慎重考虑使用"+"运算符)。
以下是不可变集合的一种实现方法:JDK源码中有
public static Collection unmodifiableCollection(Collection c) {
return new UnmodifiableCollection(c);
}
static class UnmodifiableCollection implements Collection, Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 1820017752578914078L;
Collection c;
UnmodifiableCollection(Collection c) {
if (c==null)
throw new NullPointerException( );
this.c = c;
}
public int size( ) {return c.size( );}
public boolean isEmpty( ) {return c.isEmpty( );}
public boolean contains(Object o) {return c.contains(o);}
public Object[] toArray( ) {return c.toArray( );}
public Object[] toArray(Object[] a) {return c.toArray(a);}
public String toString( ) {return c.toString( );}
public Iterator iterator( ) {
return new Iterator( ) {
Iterator i = c.iterator( );
public boolean hasNext( ) {return i.hasNext( );}
public Object next( ) {return i.next( );}
public void remove( ) {
throw new UnsupportedOperationException( );
}
};
}
public boolean add(Object o){
throw new UnsupportedOperationException( );
}
public boolean remove(Object o) {
throw new UnsupportedOperationException( );
}
public boolean containsAll(Collection coll) {
return c.containsAll(coll);
}
public boolean addAll(Collection coll) {
throw new UnsupportedOperationException( );
}
public boolean removeAll(Collection coll) {
throw new UnsupportedOperationException( );
}
public boolean retainAll(Collection coll) {
throw new UnsupportedOperationException( );
}
public void clear( ) {
throw new UnsupportedOperationException( );
}
}
public static Set unmodifiableSet(Set s) {
return new UnmodifiableSet(s);
}
分享到:
相关推荐
在进行Java编程时,许多开发者往往会忽略一些琐碎但至关重要的细节,这些细节可能在项目的开发和维护中造成不可预见的问题。为了解决这些问题,可以参考《Java Pazzlers》(Java解惑)这本书,其中对许多常见的编程...
### Java编程中的中文问题及其解决方法 #### 一、中文问题的来源 计算机技术发展初期,操作系统主要支持单字节编码格式,这主要是为了适应英文等拉丁字母的处理需求。然而,随着全球化的推进和技术的进步,为了更...
在Java编程领域中,跨平台性是其核心优势之一,这得益于Java“一次编写,到处运行”的设计理念。然而,在实际开发过程中,要实现真正的跨平台应用并非易事,需要注意诸多细节。下面将详细介绍在开发跨平台Java程序时...
Java 编写跨平台应用程序时,需要注意多个方面以确保程序能够在不同的操作系统上正确运行。首先,选择使用标准的 Java Development Kit (JDK) 版本,例如 1.0、1.1、1.2 或更高版本,并且依赖于 Java 核心 API,避免...
Java程序调用MATLAB接口 Java 程序调用 MATLAB 接口是 Java 和 MATLAB ...Java 程序调用 MATLAB 接口需要注意版本问题、环境安装和 MATLAB 生成 JAR 包的步骤。只有按正确的步骤进行操作,才能成功调用 MATLAB 接口。
不过,基于标题“Java开发注意事项”及描述“Java开发注意事项,编程人员可以看看哦”,我们可以围绕Java编程的一些核心知识点和最佳实践进行详尽阐述。 ### Java开发注意事项 #### 一、命名规范 Java中的命名...
此外,异常处理是Java编程中不容忽视的部分,try-catch-finally语句块用于捕获和处理运行时可能出现的问题,保证程序的健壮性。 对于复杂问题,可以采用分治法或设计模式来解决。设计模式是一种解决常见问题的最佳...
Java编程的逻辑是软件开发领域中的核心概念,它关乎如何用Java语言来构造高效、可维护的程序。在这个最全的资源中,我们能够深入理解Java编程的基本原理和高级技巧,帮助开发者提升技能水平。 首先,Java编程的基础...
使用命令行方式开发Java...可执行文件javac.exe位于Java安装目录的bin子目录中,称为Java编译器 (Java Compiler——javac名称的由来),用于对指定的Java源代码进行编译。 打开一个DOS窗口,进入Welcome.java文件所在
以下是基于标题“华为JAVA编程规范、编程军规”以及描述中提及的文档,提炼出的一些核心知识点: 1. **命名规范**:Java编程中的命名规则非常重要,华为编程规范强调了类名、方法名、变量名应清晰易懂,遵循驼峰...
总之,Java编程中的乱码问题主要是由于Unicode编码与系统默认编码的转换不当导致的,理解和掌握编码原理以及Java程序的生命周期中的编码转换过程,是解决这类问题的关键。开发者应当注意在各个阶段保持编码的一致性...
在学习过程中,注意以下几个关键点,能够帮助你更好地掌握Java语言。 首先,安装Java Development Kit (JDK)是开始Java编程的第一步。确保正确安装后,配置环境变量是至关重要的。在Windows系统中,你需要设置`JAVA...
在计算机软件开发中,Java编程语言的应用是极为广泛与深远的。Java语言自问世以来就以其独特的特性和优势吸引了大量开发者的注意,这些特性包括但不限于其平台独立性、内存管理优化、面向对象的编程设计以及其强大的...
作为目前IT行业中使用非常普遍的编程语言之一,Java被应用在多种开发领域,包括企业级应用、移动应用、大数据处理和云计算平台等。本段内容中提到的“Java学习群”提供了一个学习交流的社区,对于初学者或希望进一步...
以上就是构建“Java编程超市购物程序设计”所需的关键知识点。在实际开发过程中,需要根据具体需求进行详细设计和编码,同时注意代码的可读性和可维护性,以实现一个高效、稳定的超市购物系统。
Java编程是信息技术领域中最基础且广泛使用的编程语言之一,尤其对于初学者来说,拥有一个适合的编辑器至关重要。"JAVA程序编辑器[java程序编写器]"是一个专为Java初学者设计的工具,它简化了代码编写、编译和调试的...
Java并发编程是软件开发中的一个关键领域,尤其是在大型企业级应用和分布式系统中。通过学习相关的书籍,开发者可以深入理解如何有效地设计和实现高效的多线程应用程序,避免并发问题,如竞态条件、死锁、活锁等。...
本文将详细介绍Java编程过程中应该遵循的一些核心原则与规范,包括但不限于命名约定、MVC模式以及其他重要的编程指南。 #### 二、命名约定 在Java编程中,合理的命名可以极大地提高代码的可读性和可维护性。下面...