java dateformat类_JAVA--常量池,Date类,SimpleDateFormat类与Calendar类
String常量池:
JVM在使用字符串类型时,为了提高内存使用效率,当使用字面量(常量)给变量赋值时,在方法区内提供了用于存储字面量对象的一个常量池.
原理:
当使用字面量赋值时,先去方法区内的常量池中查询是否有相同字面量的对象.如果有则返回常量池中对象的地址,若没有则在常量池中创建此字面量的对象再返回.
可以看看下面的实例:
public class Tests {
public static void main(String[] args) {
//使用构造器创建两个helloworld字符串对象
String s1 = new String("helloworld");
String s2 = new String("helloworld");
//查看s1与s2是不是同一个对象
System.out.println("s1与s2:"+(s1==s2));
System.out.println("s1与s2内容对比:"+s1.equals(s2));
String s3 = "helloworld";
String s4 = "helloworld";
System.out.println("s2与s3:"+(s2==s3));//false;说明s2与s3不是同一个对象
System.out.println("s3与s4:"+(s3==s4));//true;是同一个对象
String s5 = "hello";
String s6 = "world";
/*编译器在编译期间会进行一些简单的运算
*
*将两个字面量"hello"与"world"拼接成了
* "helloworld"
* */
String s7 = "hello"+"world";
System.out.println("s4与s7:"+(s4==s7));
String s8 = s5+"world";
System.out.println("s4与s8:"+(s4==s8));
String s9 = s5+s6;
System.out.println("s4与s9:"+(s4==s9));
System.out.println("s8与s9:"+(s8==s9));
}
}
运行结果:
s1与s2:false
s1与s2内容对比:true
s2与s3:false
s3与s4:true
s4与s7:true
s4与s8:false
s4与s9:false
s8与s9:false
包装类的常量池:
首先看看包装类与基本数据类型的对应关系:
基本数据类型
包装类
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean
除int和char有所不同之外,其余的都是首字母变大写.
Boolean与Character直接继承自Object类,其余的则继承自Numbers类,而Numbers则继承自Object类.
当将基本数据类型进行自动装箱时,装箱后的对象的字面值,如果是在-128~127之间,会先检查常量池中是否有相同字面值的对象,如果有,则将常量池的对象的地址给引用变量,若没有则创建一个.
下面给出Integer包装类的各种情况
示例代码:
public class Tests {
public static void main(String[] args) {
/*首先定义一个基本数据类型的数据*/
int i=1;
/*包装类的常量池实验*/
Integer i1=1;
Integer i2=1;
Integer i3=new Integer(i);
Integer i4=new Integer(1);
System.out.println("i1与i2是不是同一个对象:"+(i1==i2));
System.out.println("i1与i2的equals方法:"+(i1.equals(i2)));
System.out.println("i2与i3是不是同一个对象:"+(i2==i3));
System.out.println("i2与i3的equals方法:"+(i2.equals(i3)));
System.out.println("i2与i4是不是同一个对象:"+(i2==i4));
System.out.println("i2与i4的equals方法:"+(i2.equals(i4)));
System.out.println("i3与i4是不是同一个对象:"+(i3==i4));
System.out.println("i3与i4的equals方法:"+(i3.equals(i4)));
/*小于-128大于127范围的情况,应该与i1与i2的情况进行对比:*/
Integer i5=128;
Integer i6=128;
System.out.println("i5与i6是不是同一个对象:"+(i5==i6));
System.out.println("i5与i6的equals方法:"+(i5.equals(i6)));
}
}
运行结果:
i1与i2是不是同一个对象:true
i1与i2的equals方法:true
i2与i3是不是同一个对象:false
i2与i3的equals方法:true
i2与i4是不是同一个对象:false
i2与i4的equals方法:true
i3与i4是不是同一个对象:false
i3与i4的equals方法:true
i5与i6是不是同一个对象:false
i5与i6的equals方法:true
总结:
八种包装类都是final修饰
一经创建,对象内容不可变
Character和Boolean的父类是Object其他六种的父类是Number类型,是抽象类.
Date
java.util.Date
封装了日期与时间的信息.之后里面的很多功能都弃用,渐渐的使用Calender类型来替代
构造器
Date():
创建一个封装当前系统时间的Date对象
Date(long time):
创建一个距离纪元time毫秒的Date对象
常用方法
long getTime();
返回距离纪元的毫秒数
void setTime(long time);
修改时间对象的毫秒数
示例代码:
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
/*创建一个Date对象*/
Date time = new Date();
System.out.println(time);
/*调用有参构造器,创建一个距离纪元 10亿毫秒的时间对象*/
Date time1 = new Date(1520000000000L);
System.out.println(time1);
System.out.println(time.getTime());
System.out.println(time1.getTime());
time.setTime(time.getTime()-3600000*24);
System.out.println(time.getTime());
System.out.println(time);
}
}
运行结果:
Sun Aug 19 10:44:05 CST 2018
Fri Mar 02 22:13:20 CST 2018
1534646645478
1520000000000
1534560245478
Sat Aug 18 10:44:05 CST 2018
SimpleDateFormat
作用
此类型可以对Date进行格式化,将字符串转成Date类型。
常用构造器
SimpleDateFormat(String format):
创建一个指定格式的SimpleDateFromat对象。
常用方法:
String format(Date date)
作用是将参数date按照构造器里的格式进行格式化成字符串
Date parse(String str)
作用是将指定字符串str转变成Date类型
常用格式:
yy/yyyy: 年
MM:月
dd:日
HH:时(24制)
hh:时(12制)
mm:分
ss:秒
a:上下午
E:星期
示例代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Tests {
public static void main(String[] args) {
/*转换成Date类型 Date parse(String str)*/
String birth="1996/08/28";
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy/MM/dd");
Date d= null;
/*需要用try...catch...进行处理.*/
try {
d = sdf1.parse(birth);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(d);
/*格式化方法 String format(Date d)*/
Date now = new Date();
SimpleDateFormat sdf =
new SimpleDateFormat("MM-dd-yyyy HH:mm:ss E a");
String info = sdf.format(now);
System.out.println("时间:"+info);
}
}
运行结果:
Wed Aug 28 00:00:00 CST 1996
时间:08-19-2018 11:22:11 星期日 上午
Calendar
1.是日历类型,此类型封装了有关日历的所有信息,主要用于计算时间分量(日期和时间的一部分有效值).
2.是一个抽象类,提供了一个方法叫getInstance(),来获取一个通用的子类型对象.一般都是GregorianCalendar(格里高利历法,阳 历),获取的时间是执行到此行代码的系统时间值.
3.时间分量常量
static int YEAR/MONTH/DATE;
关于MONTH:日历里的月份是0-11.
static int DAY_OF_WEEK/MONTH/YEAR;
关于DAY_OF_WEEK:默认一周第一天为周日,计数为1-7.
.........
常用方法
提供了get(int field),通过指定时间分量常量来获取相应的时间分量的值.
提供了set(int field,int value),进行设置时间分量值..提供了add(int field,int value),用于增加对当前日历信息通过时间分量计算value后的日历信息.若value为负值,则表示向前推算.
int getActualMaximum(int field):获取当前时间分量所在的最大值.如指定Calendar.MONTH,表示月的最大值(11).Calendar.DATE,表示当前日历对象所在月份的最大值(8月,31).
示例代码:
import java.util.Calendar;
public class Tests {
public static void main(String[] args) {
/*时间分量*/
/*首先获取当前时间*/
Calendar c=Calendar.getInstance();
/*输出当前时间*/
System.out.println(c.getTime());
/*分别输出时间分量的值*/
System.out.println("当前时间的YEAR的值:"+c.get(Calendar.YEAR));
System.out.println("当前时间的MONTH的值:"+c.get(Calendar.MONTH));
System.out.println("当前时间的星期的值:"+c.get(Calendar.DAY_OF_WEEK));
/*可以看到星期的计数从1开始,第一天是星期日*/
/*月的计数0开始,第一个月是一月.*/
System.out.println("当前时间的HOUR的值:"+c.get(Calendar.HOUR_OF_DAY));
/*设置时间分量*/
c.set(Calendar.YEAR,2019);
c.set(Calendar.MONTH,1);
c.set(Calendar.DAY_OF_MONTH,19);
System.out.println("设置后的时间为:"+c.getTime());
/*对传入的参数进行加减,传入正数为加,传入负数为减*/
c.add(Calendar.MONTH,2);
c.add(Calendar.DAY_OF_MONTH,-2);
System.out.println("加减后的时间为:"+c.getTime());
/*获取当前时间分量的最大值*/
/*注意当前时间为刚刚设置的四月*/
System.out.println("当前月的最大值为:"+c.getActualMaximum(Calendar.DAY_OF_MONTH));
}
}
运行结果:
Sun Aug 19 11:55:14 CST 2018
当前时间的YEAR的值:2018
当前时间的MONTH的值:7
当前时间的星期的值:1
当前时间的HOUR的值:11
设置后的时间为:Tue Feb 19 11:55:14 CST 2019
加减后的时间为:Wed Apr 17 11:55:14 CST 2019
当前月的最大值为:30
java dateformat类_JAVA--常量池,Date类,SimpleDateFormat类与Calendar类相关推荐
- java 日历工具_java中强大的时间处理工具:Calendar类(日历类)
java中的Calendar类为什么起个名字就叫做日历呢?因为这个类可以让我们像看日历一样得到这个时间的所有属性,你还在为不知道2014年5月7日是周几而苦恼吗?你还在为2005年8月14日是8月的第 ...
- java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式
String基础 1. String类又称作不可变字符序列. 2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类. 3. Java字符串就是Unicode ...
- java讲对象放在常量池的方法_java的常量池里面都放了些神马东西
展开全部 理解Java常量池 JVM运行时数据区的内e69da5e6ba9062616964757a686964616f31333264656233存模型由五部分组成: [1]方法区 [2]堆 [3] ...
- java 常量池是什么_Java常量池理解与总结
一.相关概念 什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池 在C ...
- Java中几种常量池的区分
转载自 Java中几种常量池的区分 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上 ...
- Java String类和常量池
String 部分源码 学习笔记 package cn.jason.oop; /*** 测试字符串类的基本语法* 不可变字符串* @author Jason**/ public class TestS ...
- 常量池在堆还是方法区_详解Java 虚拟机(第③篇)——String 类和常量池
一.String 对象的两种创建方式 String str1 = "abcd"; String str2 = new String("abcd"); Syste ...
- java常量池与地址_Java常量池
一.相关知识 1.何为常量 第一种常量:是一个值,我们将这个值本身称为常量.比如: 整型常量:1024 实型常量:1.024 字符常量:'g' 'c' 'w' 字符串常量:"gcw" ...
- java常量池的理解_Java常量池的大概理解
转载自:http://www.cnblogs.com/iyangyuan/p/4631696.html 理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转 ...
最新文章
- Nginx—核心配置location匹配规则说明
- docker中部署redis主从模式
- 删除链表的倒数第n个节点 python_19.leetcode题目讲解(Python):删除链表的倒数第N个节点...
- 围观窗体与组件02 - 零基础入门学习Delphi24
- mysql 自动停止_MySQL数据库之mysql自动停止的完美解决方法
- Python编程基础:第十六节 元组Tuple
- openfalcon 组件监控_open-falcon监控业务URL探测
- 在Ubuntu上创建并测试GRE tunnel
- python idle是什么_下载下来的IDLE是个什么鬼
- Java线程池ExecutorService中重要的方法
- 未捕获异常string was not recognized_给你代码:PHP7中的异常与错误处理
- Eclipse与SQL Server 2005 连接
- css插件载进去ps里面,CSS3Ps(ps图层插件)官方版
- 解决fidder一直报“The sever(XXX) presented a certificate that did not validate,....”
- 入选全球灯塔工厂 西部数据践行可持续发展承诺
- P3545 [POI2012]HUR-Warehouse Store
- 【操作系统】进程间的通信——管道
- 4.6有一个函数。 写程序,输入x的值,输出相应的y值
- Java项目:SSM汽车租车管理系统
- 华中师范大学计算机学院校友,院部动态丨计算机学院:酸甜苦辣咸——你最pick谁...