`
李灵晖-raylee
  • 浏览: 135689 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

java基础入门-数据访问器(set方法)与返回可变对象

 
阅读更多

今天写一个大家平常都比较忽略的一个问题

set方法与返回可变对象

我们平常在编程的时候,大部分的时候都是使用get、set方法来访问或者设置属性域

但是在set的方法当中会出现一些比较特殊的例子,就像下面的代码,

birthday手型,在set方法里面返回的是一个可变对象date,然后我们再通过这个date去改变属性域里面的值

这种错误时经常出现在代码里面,正确的做法是在birthday的set方法里面加入clone方法,这样就保证了属性域的不可操作性



package com.ray.object;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 数据访问器(set方法)与可变对象
 * 
 * @author ray
 * @since 2015-04-22
 * @version 1.0
 * 
 */
public class Person {

	private Date birthday = new Date();

	// 注意:这里返回的是可变对象
	public Date getBirthday() {
		return birthday;
	}

	public static void main(String[] args) throws Exception {
		Person bill = new Person();
		System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
				.format(bill.getBirthday()));
		Date birthday = bill.getBirthday();
		Thread.sleep(2000);
		birthday.setTime(System.currentTimeMillis());
		System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
				.format(bill.getBirthday()));
	}
}

输出:

2015-04-27 09:23:29
2015-04-27 09:23:31


正确的代码:

package com.ray.object;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 数据访问器(set方法)与可变对象
 * 
 * @author ray
 * @since 2015-04-22
 * @version 1.0
 * 
 */
public class Person {

	private Date birthday = new Date();

	// 注意:这里返回的是可变对象
	public Date getBirthday() {
		return (Date) birthday.clone();
	}

	public static void main(String[] args) throws Exception {
		Person bill = new Person();
		System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
				.format(bill.getBirthday()));
		Date birthday = bill.getBirthday();
		Thread.sleep(2000);
		birthday.setTime(System.currentTimeMillis());
		System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
				.format(bill.getBirthday()));
	}
}

输出:

2015-04-27 09:25:36
2015-04-27 09:25:36


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    《Java语言程序设计(Java7) 入门与提高篇》源代码

    《Java语言程序设计(Java7)入门与提高篇》是一本专为初学者和有一定基础的程序员设计的书籍,旨在帮助读者深入理解Java编程语言,并通过实际操作提升编程技能。这本书涵盖的内容广泛,从基础语法到高级特性,全...

    学Java流程--Java语言基础

    Java语言基础是学习Java编程的入门阶段,涵盖了变量、数据类型、运算符、控制结构、类和对象等基本概念。以下是一些关于Java语言基础的关键知识点: 1. **变量和数据类型**:Java提供了基本数据类型(如int、char、...

    JAVA基础PPT

    - **String类**:Java中的字符串是不可变的,提供了丰富的操作方法。 - **StringBuilder与StringBuffer**:在需要频繁修改字符串时,这两个类更为高效。 **5. 异常处理** - **异常处理机制**:Java使用try-catch-...

    Java入门学习笔记

    ### Java入门学习笔记 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java的设计使得它易于学习且避免了许多传统编程语言中存在的复杂性。 - **面向对象:** Java是一种纯面向对象的语言,支持...

    Java编程实训 Java开发基础入门教程1-02 Java编程基础(共61页).ppt

    - **常量**:在Java中,常量是不可变的值,分为整型、浮点型、字符型、布尔型以及字符串常量。命名规则遵循一定的规范,如类名首字母大写,常量全大写并用下划线分隔。 2. **注释**: - **单行注释**:以`//`开始...

    java基础问答 txt

    - `String` 类在 Java 中表示不可变的字符序列。 - 为了提高效率节省内存空间,在频繁修改字符串时应该使用 `StringBuilder` 或 `StringBuffer`。 #### 11. int 与 Integer 类型 - `int` 是 Java 的基本数据类型之...

    java-collections-framework1016

    - **不可变集合**:通过`Collections.unmodifiableList()`等方法可以创建不可变集合,确保集合内容不会被意外修改。 - **泛型类型安全性**:自Java 5起,通过泛型机制增强了类型安全性,但需要注意避免在运行时发生...

    Java基础入门教程 第6章 集合框架(共28页).ppt

    在《Java基础入门教程 第6章 集合框架》中,我们将深入探讨这个重要的话题。 首先,让我们从集合框架的基本组件开始。集合框架包含三个主要部分:接口、算法和实现。接口如`Collection`、`List`、`Set`和`Map`定义...

    java基础课件学习

    13. **字符串处理**:String类是不可变的,提供了丰富的操作字符串的方法,如concatenation(连接)、substring(子串)、indexOf(查找)等。 14. **枚举类型**:Java 5引入了枚举类型,用于定义一组固定的常量,...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...

    JAVA基础课程讲义

    字符串类String、StringBuilder和StringBuffer是处理文本数据的关键,特别是String是不可变的。时间处理涉及Date、DateFormat、SimpleDateFormat和Calendar类。File类用于文件操作,枚举用于定义常量集合。 第七章 ...

    2020老杜最新Java零基础进阶视频教程-常用类课件

    本教程"2020老杜最新Java零基础进阶视频教程-常用类课件"主要针对有一定编程基础的学员,讲解了Java的基础知识,包括面向对象的概念、异常处理、数组、常用类、集合框架、输入输出流(I/O流)、多线程以及反射机制。...

    java授课计划

    ### Java授课计划知识点详解 #### 一、绪论与Java语言概述 - **知识点1:Java的...通过以上知识点的学习,学生能够系统地掌握Java编程语言的基础知识和面向对象编程的核心概念,并能够熟练地使用Java进行软件开发。

    AIC的Java课程1-6章

     能够定义类,创建类的对象(实例化类)和通过对象引用访问数据成员和方法成员;形成定义类和使用类的两种不同的思维方式。  理解构造函数的作用(分配对象空间),理解和定义重载的构造函数。  明白...

    220个JAVA初学者实例

    4. **字符串处理**:String类是不可变的,学习其常用方法,如substring、indexOf、replace、trim等。 5. **异常处理**:理解异常的概念,学会使用try-catch-finally结构进行异常处理,并掌握Checked和Unchecked异常...

    Java基础入门教程 含习题 第07章 集合类(共60页).pptx

    本教程主要涵盖了Java基础入门的第7章——集合类,内容包括常用集合类、迭代器的使用、foreach循环、泛型以及Collections和Arrays工具。 首先,我们来看集合概述。集合是Java中的一个重要概念,它可以存储任意数量...

    java教案 入门必备

    5. **字符串处理**:Java中的String类是不可变的,了解其常用方法如concat、substring、indexOf、replace等。 6. **集合框架**:学习List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap...

    Java 从入门到精通

    5. **字符串**:Java中的String是不可变对象,理解其特点和常用方法。 **三、面向对象编程** 1. **类与对象**:理解类的定义、对象的创建和初始化,以及封装的概念。 2. **继承与多态**:掌握单一继承和多态性,...

    java课件,关于java的一些入门知识

    - String类在Java中是不可变的,提供了许多用于操作字符串的方法,如concat、substring、indexOf、replace等。 6. **数组和集合**: - 数组是存储同类型数据的序列,Java提供了单列集合(如ArrayList、LinkedList...

Global site tag (gtag.js) - Google Analytics