- 浏览: 66951 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
x334085347:
顶一a 下
二进制、八进制、十进制、十六进制之间转换 -
zhsh666:
As a rule of thumb, any time yo ...
java equals == hashcode -
zhsh666:
关于java的hashCode方法 ( ...
java equals == hashcode -
dyf4256dyf:
...
Java构造函数
一、接口
1.在java语言中,接口是一组对类的需求描述(规则协议),实现该接口的类必须遵循这一协议。
an interface is not a class but a set of requirements for classes that want to conform to the interface
2.在接口中可以定义常量。但是接口中不能有实例域,也不能在方法中实现方法。
3.一个类实现一个接口,必须实现其中的所有方法。
4.在接口定义中,接口中的方法声明自动为public,实现此接口的类中的对应的方法必须声明为public的,不然编译器将认为该方法是包访问级别的。
5.Interfaces and Abstract Classes(接口和抽象类)比较
在abstract class方式中,抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,接口中只能够有静态的 不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊 形式的abstract class。
(1).一个类可以实现多个接口,但是只能继承一个(抽象)类
(2).实现一个接口,必须实现所有的方法;相比,继承一个抽象类,不必实现所有的抽象方法,子类可以实现父类的个别抽象方法,不过这样的子类也是抽像类。
二、Object Cloning(对象克隆)
1.Copying and cloning
COPYING
Employee original = new Employee("John Public", 50000); Employee copy = original; copy.raiseSalary(10); // oops--also changed original
CLONING
Employee copy = original.clone();
copy.raiseSalary(10); // OK--original unchanged
2.The default cloning operation is "shallow"—it doesn't clone objects that are referenced inside other objects.
Does it matter if the copy is shallow? It depends. If the subobject that is shared between the original and the shallow clone is immutable, then the sharing is safe. This certainly happens if the subobject belongs to an immutable class, such as String. Alternatively, the subobject may simply remain constant throughout the lifetime of the object, with no mutators touching it and no methods yielding a reference to it.
如果对象是不改变的,那么这种共享是安全的,如String.
Quite frequently, however, subobjects are mutable, and you must redefine the clone method to make a deep copy that clones the subobjects as well. In our example, the hireDay field is a Date, which is mutable.如果对象是要改变的,那么就要自定义clone方法了。
For every class, you need to decide whether
-
-
The default clone method is good enough;
-
clone should not be attempted.
-
The third option is actually the default. To choose either the first or the second option, a class must
-
-
Redefine the clone method with the public access modifier.
A subclass can call a protected clone method only to clone its own objects. You must redefine clone to be public to allow objects to be cloned by any method.
子类只能调用受保护的clone方法克隆它自己。必须重新定义clone方法,才能够在任何方法中克隆对象。
Even if the default (shallow copy) implementation of clone is adequate, you still need to implement the Cloneable interface, redefine clone to be public, and call super.clone().
都要实现Cloneable接口。
1. import java.util.*; 2. 3. public class CloneTest 4. { 5. public static void main(String[] args) 6. { 7. try 8. { 9. Employee original = new Employee("John Q. Public", 50000); 10. original.setHireDay(2000, 1, 1); 11. Employee copy = original.clone(); 12. copy.raiseSalary(10); 13. copy.setHireDay(2002, 12, 31); 14. System.out.println("original=" + original); 15. System.out.println("copy=" + copy); 16. } 17. catch (CloneNotSupportedException e) 18. { 19. e.printStackTrace(); 20. } 21. } 22. } 23. 24. class Employee implements Cloneable 25. { 26. public Employee(String n, double s) 27. { 28. name = n; 29. salary = s; 30. } 31. 32. public Employee clone() throws CloneNotSupportedException 33. { 34. // call Object.clone() 35. Employee cloned = (Employee)super.clone(); 36. 37. // clone mutable fields 38. cloned.hireDay = (Date)hireDay.clone();// deep clone 39. 40. return cloned; 41. } 42. 43. /** 44. Set the hire day to a given date 45. @param year the year of the hire day 46. @param month the month of the hire day 47. @param day the day of the hire day 48. */ 49. public void setHireDay(int year, int month, int day) 50. { 51. hireDay = new GregorianCalendar(year, month - 1, day).getTime(); 52. } 53. 54. public void raiseSalary(double byPercent) 55. { 56. double raise = salary * byPercent / 100; 57. salary += raise; 58. } 59. 60. public String toString() 61. { 62. return "Employee[name=" + name 63. + ",salary=" + salary 64. + ",hireDay=" + hireDay 65. + "]"; 66. } 67. 68. private String name; 69. private double salary; 70. private Date hireDay; 71. }
发表评论
-
java equals == hashcode
2010-08-26 23:09 14631.首先看看Object 中 equals()方法的实现 ... -
Java构造函数
2010-08-19 23:07 1518Java构造函数 -
(转)java并发编程学习一线程同步
2010-08-14 15:14 941线程同步 原文出处:htt ... -
全面理解Java中的String数据类型(转)
2010-08-11 22:43 7541. 首先String不属于8种基本数据类型,String是一 ... -
Java-String类型的参数传递问题(转)
2010-08-11 22:17 829原文出处http://freej.blog.51cto.com ... -
java final关键字的使用(转)
2010-06-20 12:07 765final变量定义: 变量一经 ... -
常用java类
2010-01-21 21:56 7071.java.lang.reflect Class A ... -
测试程序执行时间的方法
2010-01-18 16:46 9671.System.currentTimeMillis() 程 ... -
比较有用的log4j.properties
2009-11-24 16:51 734log4j.rootLogger=DEBUG,CONSOLE, ... -
总结Java标准类库中类型相互转化的方法
2009-11-24 16:37 840原文出处:http://hxraid.iteye.com/bl ... -
关于文件路径方面的小麻烦
2009-11-24 16:25 787原文出处:http://hxraid.iteye.com/bl ... -
一种java 克隆实现(二进制)
2009-11-24 10:58 994package com.ben.clone; impor ... -
java语言基础易错点
2009-11-23 17:21 01.实现一个接口,必须实现所有的方法;相比,继承一个抽象类,不 ... -
java 中的Logging
2009-11-12 22:04 858java.util.logging 1.Logging ... -
Java 异常处理机制
2009-11-12 17:15 7801.异常的分类 The Error ... -
log4j比较全面的配置文件
2009-10-23 14:58 788标准级别:DEBUG<INFO<WARN<E ... -
写程序的经验处理
2009-10-19 09:15 689在编写程序时,经常会有一些经验写法,这种写法的目的就是在考虑代 ... -
Does Java need Checked Exceptions?
2009-09-25 09:36 704Although C++ introduced the exc ...
相关推荐
总的来说,这一章涵盖了Java中面向对象编程的关键概念,包括抽象类的使用、接口的定义与实现、日期处理、事件处理、泛型、装箱与拆箱、大数运算以及自定义数据类型的设计。这些知识点都是编写复杂、灵活且可扩展的...
在Java编程语言中,对象克隆是一种创建一个与原对象具有相同数据的新对象的过程。对象克隆主要用于复制或备份对象,以便在不干扰原始对象的情况下对其进行修改或操作。本篇文章将详细探讨Java中的对象克隆及其实现...
在Java编程语言中,对象克隆是一种创建与现有对象具有相同数据的新对象的过程。这个过程在需要复制对象的所有属性而不创建新类型实例时非常有用。本文将深入探讨Java中的对象克隆,包括其原理、实现方式以及注意事项...
在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并拥有一个完全独立的新实例,而不是仅仅引用原始对象。克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。...
在Java编程语言中,克隆是一种创建对象副本的技术,它允许我们复制一个对象的状态而不影响原始对象。克隆主要用于创建对象的备份、实现复制功能或者在多线程环境中避免共享状态。Java提供了两种主要的克隆方式:浅...
此外,书中还涉及了对象克隆(clone)的概念,这是Java中实现对象深度复制的技术。 Java SE语法是程序员必须掌握的基础,包括Java语言中的关键字和特殊符号的使用,例如“&”和“&&”的区别、goto语句的不存在、...
Factual是一家提供全球数据服务的公司,其Java驱动程序允许开发者通过Java语言与Factual的数据平台进行交互。这个驱动程序可能包含API接口、示例代码、文档和必要的库,以便开发者能够轻松地查询和操作Factual的数据...
在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并得到一个与原对象相同但独立的新对象。克隆分为两种主要类型:深克隆和浅克隆。理解这两种克隆的区别是Java面向对象编程中的重要概念。 ...
在Java编程语言中,克隆是创建一个对象副本的过程,这个副本与原对象有相同的属性值,但作为不同的对象存在。克隆分为两种主要类型:浅克隆(Shallow Clone)和深克隆(Deep Clone)。这篇博客文章将探讨这两种克隆...
在Java编程语言中,"深度克隆"是一个重要的概念,主要涉及到对象复制。深度克隆,也称为完全克隆,是指创建一个与原对象相同的新对象,不仅复制原对象的所有属性,还复制了原对象中引用的对象。这通常用于创建一个...
Java编程语言中的java.lang包是一个核心包,它提供了Java语言运行时的基础类库,包含了Java程序运行的基本数据类型、异常处理类以及一些用于系统级别的工具类和接口。java.lang包中的类和接口不需要程序员显示地导入...
在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...
在Java编程语言中,克隆和序列化是两个重要的概念,它们在数据处理和对象管理中扮演着关键角色。下面将分别对这两个概念进行详细解释,并结合实例和源代码进行阐述。 **一、克隆** 1. **克隆定义**:克隆是指创建...
- **定义**: 定义一个创建对象的接口,但是让实现这个接口的类决定要实例化哪一个类。工厂方法让类的实例化推迟到子类。 - **应用场景**: 当系统中需要根据不同的输入产生不同的对象实例时。 - **优缺点**: 优点...
"clone"方法就是用于复制对象的一种方式,尤其在Java等支持此功能的语言中。本文将深入探讨"深度克隆"这一概念,以及它与普通克隆的区别,并讨论其在实际应用中的优缺点。 深度克隆,也称为完全克隆,是一种创建新...
Java面向对象编程是Java语言的核心特性,也是软件开发中的重要概念。这个实验项目"Java面对对象实验(项目文件)2013521"旨在深入理解和掌握面向对象编程的基本概念,为后续学习JavaEE、JavaME等高级技术打下坚实的...
"javalang"可能是指一个与Java语言相关的项目或者库,它可能是为了帮助理解和处理Java代码而设计的。而“RealJavaJava 8解析器”则可能是一个专门用于解析Java 8语法的工具或组件,用于分析、解释或者转换Java 8源...