这里模仿JDK源码实现了一个自定义的Date类
package com.out.util;
import sun.util.calendar.BaseCalendar;
/**
* Date类的实质就是,一个重要的属性:长整型,用来表示距离1970.1.1 0点,这个距离的毫秒数(1秒=1000毫秒)
* 如:1970年1月1号1时0分0秒 就是:60*1000 如果是1969年12月31号13点 就是:-60*1000
* 1.为什么要实现Serializable接口?
* 2.为什么要实现Cloneable接口?自定义类默认继承Object类,已经有clone方法了,直接覆盖或者不需要实现,为什么还要实现Cloneable接口
* clone对象更快,要覆盖因为,直接clone,如果对象中属性是引用,那么就是浅复制,覆盖以实现深度复制
* 3.为什么要实现Comparable接口?
* 来实现日期的比较功能
* @author huangqun08312
*/
public class Date implements java.io.Serializable, Cloneable,Comparable<Date>{
/**
* 这个serialVersionUID什么作用,为什么是这样的数?
*/
private static final long serialVersionUID = 6660056718619883291L;
/**
* transient关键字什么作用?
* transient关键字只能修饰变量,被transient关键字修饰的变量不能被序列化
* 一个静态变量不管是否被transient修饰都不能被序列化
*/
private transient long fastTime;
private transient BaseCalendar.Date cdate;
public Date() {
this.fastTime = System.currentTimeMillis();
}
public Date(long date) {
this.fastTime = date;
}
public long getTime() {
return this.fastTime;
}
public void setTime(long time) {
this.fastTime = time;
}
public boolean before(Date when) {
return getMillisOf(this) < getMillisOf(when);
}
public boolean after(Date when) {
return getMillisOf(this) > getMillisOf(when);
}
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date)obj).getTime();
}
/**
* final可以修饰方法么?
* final修饰的方法,不可以被子类覆盖,子类不可以复写
* final修饰的类,不可以被继承,也就是final修饰的类是叶子类
* @param date
* @return
*/
static final long getMillisOf(Date date) {
return date.fastTime;
}
public int compareTo(Date other) {
long thisTime = getMillisOf(this);
long otherTime = getMillisOf(other);
return thisTime > otherTime ? 1 : (thisTime == otherTime?0:-1) ;
}
public int hashCode() {
long ht = this.getTime();
return (int) ht ^ (int) (ht >> 32);
}
/**
* 这个克隆方法,为什么还要再判断下cdate这个是否为null,再克隆一次?
* 增加效率,如果为null,没必要在复制了
* Date这个克隆不可以直接把其属性和方法同时克隆么?
* 如果是基本类型,直接会复制一份,如果属性是引用类型,那么如果不实现clone方法,那样的复制是浅复制
*/
public Object clone() {
Date d = null;
try {
d = (Date) super.clone();
if (cdate != null) {
d.cdate = (sun.util.calendar.BaseCalendar.Date) cdate.clone();
}
} catch (CloneNotSupportedException e) { } //从来不会被执行到
return d;
}
}
分享到:
相关推荐
对于源码软件标签,这意味着JDK不仅包含二进制版本,也可能包含源代码。开发者可以查看和学习源代码,这对于理解Java的工作原理,或者进行定制化修改和扩展非常有用。Oracle通常会提供源代码以遵循GNU General ...
总之,JDK8的源码是一个宝贵的资源,它为我们提供了学习和探索Java核心技术的通道。通过研究“jdk1.8.0_221-src”的源码,开发者可以深入了解Java的运行机制,提升自己的编程水平,更好地应对复杂的软件开发挑战。
4. **日期和时间API**:通过java.time包提供了新的日期和时间API,替代了原有的Calendar和Date类,提供更强大的功能和更友好的API。 5. **新集合工厂方法**:在集合接口中添加了新的工厂方法,如List.of()、Set.of...
《深入解析JDK8源码:探索...通过深入学习这些源码,我们可以更好地理解Java的运行机制,提升代码质量和性能,为日常开发带来极大的便利。对于每一个Java开发者来说,掌握JDK8的新特性和源码细节都是必不可少的技能。
总的来说,"jdk-8u221-windows-x64.exe"提供了Java 8的稳定版本,包含源码解析,有助于开发者深入理解Java 8的内部工作原理,对于学习、研究和实践都有极大的帮助。无论是初学者还是经验丰富的开发者,都能从中受益...
三、OpenJDK 8源码学习路径 深入学习OpenJDK 8源码,可以从以下几个方面入手: 1. JVM架构:理解JVM的内存模型、类加载机制、垃圾收集、线程调度等基础概念。 2. 字节码与编译器:研究JVM如何执行字节码,以及...
通过阅读源码,开发者可以深入理解Java平台的工作原理,学习最佳实践,以及解决遇到的问题。源码分析有助于提升编程技能,特别是在调试和优化代码时。 **企业级开发的应用** JDK8u221适用于个人技术开发和企业级...
JDK-并行深入学习 开始从原始二进制研究Concurrent包,以及其他并发相关的包,对于途中遇到的不明白的东西,也会作相应了解。 该项目的缘由是看CopyOnWriteArrayList二进制时,对Unsafe类一无所知,才有了好钻钻一番...
Java开发工具包(Java Development Kit,简称JDK)是学习和开发Java应用程序的基础。这个"jdk-18-windows-x64-bin.zip"文件是Oracle公司提供的JDK的一个版本,特别针对Windows 64位操作系统。Java 1.8,也被称为Java...
源码中的关键类如`JSONArray`、`JSONObject`、`JSONSerializer`和`JSON怡化器`等提供了丰富的API,是学习JSON处理的好材料。 此外,了解`json-lib`的源码也有助于开发者在遇到问题时快速定位原因,比如解析错误、...
**正文** 《深入理解JDK 1.8 u271 Linux 64位版本》 JDK(Java Development Kit)是Oracle公司发布的用于...通过深入学习和实践,我们可以充分利用JDK 1.8的新特性,提升开发效率,编写出更加优雅、高效的Java代码。
通过深入研究openjdk8u-jdk8u92-b14的源码,开发者不仅可以掌握Java 1.8的关键特性,还能学习到虚拟机优化、编译器技术、垃圾收集策略等核心知识,这对于提升编程技能、解决实际问题具有极大的帮助。同时,源码阅读...
3. **深入源码学习的好处** - **理解底层机制**: 通过阅读源码,开发者可以了解Java运行时环境如何处理内存、线程、垃圾收集等问题。 - **优化代码**: 学习源码有助于提升编程技巧,找出更高效或更优雅的实现方式...
- Date和Time API的改进:JDK 8提供了全新的日期和时间API(`java.time`包),替代了原来的`java.util.Date`和`java.util.Calendar`,提供了更加友好和强大的日期时间处理能力。 通过阅读和分析这些源码,开发者...
新的`java.time`包替换了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的日期和时间处理类,如`LocalDate`、`LocalTime`和`LocalDateTime`。 6. **Optional类** `Optional`类用于表示可能...
总之,"JDK8完整源码包"是一个宝贵的学习资源,它涵盖了Java开发的核心技术和优化策略。通过深入研究,开发者不仅能提升自己的编程技巧,还能更好地理解Java平台的内部运作机制,从而在实际项目中做出更明智的设计...
这个文件包含了JavaFX的源代码,自JDK 8u261起,JavaFX已被移出JDK的核心,但在8u241中仍包含其源码。 5. **LICENSE、COPYRIGHT、README.html、release**: 这些文件提供了JDK的许可信息、版权声明以及版本详细信息...
这两个版本的源码可以帮助开发者深入理解JDK的实现细节,比如垃圾收集算法、类加载机制、并发模型以及各种标准库类的实现。通过阅读源码,你可以学习到如何优化代码,如何设计高效的数据结构和算法,以及如何遵循...
源码分析是深入理解Java平台工作原理的关键,对于开发者来说,能够查看和学习JDK的源代码是提升技能的重要途径。在这个压缩包中,包含了一些主要的Java核心库的源代码,如`com`, `org`, `launcher`, `java`, 和 `...
- **JDK源码**:安装JDK时,可以选择包含源码,这对于学习和理解Java的内部工作原理非常有帮助。 5. **兼容性和依赖**: - **操作系统支持**:JDK 1.8.0_181支持多种操作系统,包括Windows、Linux、macOS等。 - ...