jdk的可变类和不可变类
primitive变量: boolean,byte, char, double ,float, integer, long, short
jdk的不可变类:jdk的java.lang包中 Boolean, Byte, Character, Double, Float, Integer, Long, Short, String.
StringBuffer 可变类
java.util.Date 可变类
1. 可变类和不可变类(Mutable and Immutable Objects)的初步定义:
可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容。
不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容。不可变类的实例一但创建,其内在成员变量的值就不能被修改。
2. 如何创建一个自己的不可变类:
.所有成员都是private
.不提供对成员的改变方法,例如:setXXXX
.确保所有的方法不会被重载。手段有两种:使用final Class(强不可变类),或者将所有类方法加上final(弱不可变类)。
.如果某一个类成员不是原始变量(primitive)或者不可变类,必须通过在成员初始化(in)或者get方法(out)时通过深度clone方法,来确保类的不可变。
3. 一个示例
import java.util.Date;
public final class BrokenPerson
{
private String firstName;
private String lastName;
private Date dob;
public BrokenPerson( String firstName, public BetterPerson( String firstName,
String lastName, Date dob) String lastName, Date dob)
{ {
this.firstName = firstName; this.firstName = firstName;
this.lastName = lastName; this.lastName = lastName;
this.dob = dob; //error this.dob = new Date( dob.getTime() ); //correct
} }
public String getFirstName()
{
return this.firstName;
}
public String getLastName()
{
return this.lastName;
}
public Date getDOB() public Date getDOB()
{ {
return this.dob; //error return new Date( this.dob.getTime() );//correct
} }
}
- 浏览: 506702 次
- 性别:
- 来自: 沈阳
-
文章分类
- 全部博客 (437)
- Windows设置 (2)
- oracle数据库 (39)
- bug--jsp (4)
- j2se (13)
- js (40)
- bug-tomcat不能启动程序 (1)
- Hibernate (29)
- eclipse (20)
- java (65)
- 设计模式 (6)
- bug (18)
- PL/SQL (11)
- 前台 (5)
- 杂谈 (25)
- UML (1)
- jdbc编程 (2)
- 技术调研 (1)
- 数据通信 (2)
- ios (1)
- servlet自学笔记 (10)
- tomcat (9)
- SQL学习笔记 (6)
- java工具 (1)
- 数据库设计 (4)
- javascript (10)
- jsp (11)
- struts (17)
- ajax (7)
- linix/Unix (6)
- 资源 (3)
- spring (14)
- 算法 (5)
- 计算机网络 (2)
- http (5)
- c++ (2)
- web应用 (3)
- jvm (5)
- java中的字符编码 (14)
- java代码库 (2)
- classloader (1)
- 读书笔记 (1)
- c (1)
- 开源软件 (1)
- svn (1)
- AOP (1)
- java序列化 (1)
- 多线程 (4)
- The legendary programmers (1)
- Apache http Server (1)
- html tag (3)
- struts1.X学习笔记 (5)
- buffalo (1)
- 自己收藏 (0)
- TOEFL(IBT) (1)
- 网络翻墙 (0)
- 编译原理 (1)
- 书籍推荐 (1)
- css (10)
- javaee环境搭建资料 (1)
- 开源工具 (1)
- 美国生活 (1)
- spring自学 (3)
- log4j (3)
- 算法与数据结构 (5)
- 病毒,插件处理大全 (1)
- flex (2)
- webservice (1)
- git (7)
- cs (1)
- html (4)
- javaee (6)
- 开车 (0)
- springmvc (3)
- 互联网架构 (2)
- intellij idea (18)
- maven (15)
- mongodb (2)
- nginx (1)
- react (3)
- java基础例子 (2)
- springboot (2)
- 培训 (5)
- mysql (3)
- 数据库 (3)
- 生活 (2)
- intellij (3)
- linux (2)
- os (3)
最新评论
-
潇洒天涯:
[color=blue][color=cyan] ...
oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 -
hekai1990:
受教了..
oracle中的varchar2
发表评论
-
【转】Spring的DAO异常-你可能忽视的异常
2018-10-11 05:04 546Spring的DAO框架没有抛出与特定技术相关的异常,例如 ... -
【转】java8 Optional
2018-10-05 02:39 475https://my.oschina.net/wangz ... -
java double checked locking broken
2018-09-15 01:56 492// Double-check idiom for lazy ... -
【转】JAVA泛型通配符(PECS)
2018-07-29 10:43 521在JAVA的泛型集合中,默认都可以添加null,除此以外, ... -
Differences between notify() and notifyAll()
2018-07-16 09:01 527Notification to number of th ... -
【转】深度解析Java多线程的内存模型
2018-07-16 09:00 491https://www.jianshu.com/p/a3f ... -
maven项目src源代码下的资源文件不自动复制到classes文件夹的解决方法
2018-07-01 23:34 1193POM文件 <build><resour ... -
java好用的开源库
2018-04-28 23:40 0guava--google第三方数据结构开源包 Vardu ... -
【转】java rmi
2018-01-03 18:57 406此处讲的是Java中的RMI ... -
【转】字符编码笔记:ASCII,Unicode 和 UTF-8
2017-12-12 19:09 455今天中午,我突然想搞清楚 Unicode 和 UTF-8 之 ... -
【转】Java web 学习路线
2017-06-14 15:55 707JSP -> Servlet -> Java ... -
有意思的ASCII程序注释
2017-06-14 10:39 738/** * * create ... -
【转】Java基础知识总结(绝对经典)
2017-06-13 14:13 526本人学习java时,做的java基础知识总结: 因内容较 ... -
java定时任务
2017-03-27 10:08 413import java.util.concurrent.Ex ... -
二分查找(java实现)
2017-03-21 11:02 489二分查找 算法思想:又叫折半查找,要求待查找的序列有序。每 ... -
java环境配置
2017-03-15 15:46 445增加系统变量: JAVA_HOME C:\Program ... -
Java中的Big(Little)-endian问题的一种解决方法
2017-03-08 15:47 1037http://blog.sina.com.cn/s/blo ... -
【转】Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
2016-12-13 15:07 711http://www.cnblogs.com/hoojo ... -
【转】JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
2016-12-13 14:50 1292http://www.cuomi.com/html/co ... -
【转】JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
2016-12-13 14:48 732http://blog.csdn.net/samjustin ...
相关推荐
Java可变参数是Java语言中一个非常实用的特性,它允许方法接受数量可变的参数。这个特性在Java 5中被引入,极大地提高了代码的灵活性和可读性。下面我们将详细探讨Java可变参数的概念、用法以及背后的实现原理。 ##...
Java数组传递及可变参数操作实例详解 Java 数组传递是指在方法之间传递数组对象的引用,而不是传递数组对象本身。这意味着,方法中对数组的修改将会影响原数组。在 Java 中,所有对象都是通过引用进行操作的,而...
Java String类为什么是不可变的_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
在这个名为"Java可变参数demo"的示例中,开发者通过分析Android蓝牙框架层的源码,对Java的可变参数有了更深入的理解,并编写了一个小的演示程序以备后用。下面我们将详细探讨Java可变参数的相关知识点。 1. 可变...
Java中的不可变类机制是一种设计模式,用于创建对象在创建后其状态无法改变的类。不可变类在多线程环境中特别有用,因为它们天生线程安全,无需额外的同步措施。不可变类的一些典型例子包括`Integer`、`Long`和`...
在Java编程中,不可变对象是指一旦创建后其状态不能被修改的对象。这种对象模式在多线程环境和频繁对象创建的场景下,提供了线程安全保证,减少了内存开销,并提高了代码的可维护性。本文将详细介绍如何在Java中创建...
在 Java 中实现不可变类是提高程序安全性和可维护性的重要手段,尤其是在函数式编程中。不可变类的核心特性是其对象一旦创建,其状态就不能再发生改变。这是因为不可变对象具有以下优点: 1. **线程安全**:由于...
XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件以及对象序列化等领域。...对于处理大量XML数据或者频繁进行XML到Java Bean转换的项目,这样的工具是不可或缺的。
在Java编程语言中,"可变(协变)返回类型"是一个重要的概念,它涉及到泛型和类型安全。本文将深入探讨这个主题,并结合提供的`Test.java`文件,来理解如何在实际编程中应用协变返回类型。 首先,我们要明白什么是...
此外,由于字符串的不可变性,从而可以让其 hashCode 也被缓存,在 Java 里面哈希类数据结构如 HashMap, HashTable,HashSet 其 key 用的最多的基本都是 String 类型,如此一来 key 的 hashCode 的也可以在第一次调用...
Java编程学习之java的不可变数据结构 在Java编程中,数据结构的不可变性是一个非常重要的概念。许多开发人员认为,只要使用final...但是,我们需要正确地理解不可变对象的概念,并正确地设计类以确保对象的不可变性。
来看个不可变类示例:ThreeStooges类是一个不可变类, 它的状态在创建后不能再修改,所有域都是final类型,并且它被正确创建(创建期间没有发生this引用的逸出)。该类有三个方法:isStooge、getStoogeNames,都是...
Java中的不可变类(immutable)是一种特殊的类,其对象一旦创建后,其状态就不能再发生变化。这类类在Java中有着重要的地位,特别是String类,它是Java中最常用的不可变类之一。不可变类的设计旨在提高安全性、效率...
Java 类和对象是编程语言的基础,而可变参数(Variable Argument)是 Java 为了解决方法接收不定数量参数的问题引入的一个特性。这个特性允许我们创建一个方法,它能接受一个可变数量的参数,而不是固定数量。这在...
- **String** 类在Java中是不可变的,这意味着一旦创建了String对象,就不能改变它的值。常用的方法包括 `concat()`、`substring()`、`indexOf()`、`replace()` 等。 - **StringBuffer/StringBuilder** 是可变的...
Java常用工具类是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,最著名的工具类库是`java.util`包,它包含了大量实用类,如集合、日期时间、数学计算、...
### 不可变集合的重要性及其应用 #### 一、引言 在Java开发中,使用不可变集合已经成为一种广泛...通过Guava提供的不可变集合工具类,开发者可以轻松地创建和管理不可变集合,从而构建出更加健壮和高效的软件系统。
Java 集合框架的设计者 Bloch Joshua 在他著名的 《Java 高效编程》一书中对 Java 线程安全的等级做出了相对精确的定义:非可变、线程安全、条件线程安全、线程兼容和线程不友好。 本文将结合上述 Bloch 关于线程...
- **final**:`final`关键字用于声明不可变的变量或方法。一旦变量被声明为`final`,其值就不能更改。对于方法,如果声明为`final`,则不能被子类重写。 通过理解和应用这些基本概念,开发者可以在Java中创建强大的...
然而,不可变性也带来了挑战,比如在需要频繁修改字符串内容时,需要使用StringBuilder或StringBuffer类,它们提供了可变的方法来拼接字符串,以避免频繁创建新对象。 例如: ```java StringBuilder sb = new ...