当前位置 : 主页 > 编程语言 > java >

BigDecimal,Date,DateFormat,Calendar,集合

来源:互联网 收集:自由互联 发布时间:2023-09-06
一,BigDecimal 1,概述 -浮点数在做运算的时候,可以能损失精度,为了能够更加精确的计算浮点数,java提供了 BigDecimal 2,成员变量 static int ROUND_CEILING 圆形模式向正无穷大转弯。 stati

一,BigDecimal

1,概述

-浮点数在做运算的时候,可以能损失精度,为了能够更加精确的计算浮点数,java提供了 BigDecimal

2,成员变量

static int ROUND_CEILING

圆形模式向正无穷大转弯。

static int ROUND_DOWN

舍入模式向零舍入。

static int ROUND_FLOOR

舍入模式向负无穷大转弯。

static int ROUND_HALF_DOWN

四舍五入模式向“最近邻居”转弯,除非这两个邻居都是等距离的,在这种情况下,这是倒圆的。

static int ROUND_HALF_EVEN

四舍五入模式向“最近邻居”转弯,除非两个邻居都是等距离的,在这种情况下,向着邻居方向转移。

static int ROUND_HALF_UP

四舍五入模式向“最近邻居”转弯,除非两个邻居都是等距的,在这种情况下是圆括弧的。

static int ROUND_UNNECESSARY

舍入模式来确定所请求的操作具有精确的结果,因此不需要舍入。

static int ROUND_UP

舍入模式从零开始。

3,构造方法

BigDecimal(String val)

将BigDecimal的字符串表示 BigDecimal转换为 BigDecimal 。

BigDecimal(BigInteger val)

将 BigInteger转换成 BigDecimal 。

BigDecimal(double val)

将 double转换为 BigDecimal ,这是 double的二进制浮点值的精确十进制表示。

BigDecimal(int val)

将 int成 BigDecimal 。

BigDecimal(long val)

将 long成 BigDecimal 。

4,成员方法

BigDecimal add(BigDecimal augend)

返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale()) 。

BigDecimal subtract(BigDecimal subtrahend)

返回 BigDecimal ,其值是 (this - subtrahend) ,其标为 max(this.scale(), subtrahend.scale()) 。

BigDecimal multiply(BigDecimal multiplicand)

返回 BigDecimal ,其值是 (this × multiplicand),其标为 (this.scale() + multiplicand.scale()) 。

BigDecimal divide(BigDecimal divisor)

返回BigDecimal ,其值为(this / divisor) ,优先级为(this.scale() - divisor.scale()) ; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException 。

BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。

package com.momo.demo;

import java.math.BigDecimal;

/*

  • 浮点数在做运算的时候,可以能损失精度,
  • 因为浮点数据存储的时候和整数不一样,浮点数都有有效位数
  • 为了能够更加精确的计算浮点数,java提供了 BigDecimal
  • /

public class Demo1 {public static void main(String[] args) {System.out.println(0.09+0.01);System.out.println(1.0-0.32);System.out.println(1.015100);

System.out.println(1.301/100);

System.out.println("-----------------");

/* BigDecimal bd1 = new BigDecimal("0.09");

BigDecimal bd2 = new BigDecimal("0.01");

BigDecimal bd3 = bd1.add(bd2);

System.out.println(bd3);*/

/* BigDecimal bd1 = new BigDecimal("1.0"); BigDecimal bd2 = new BigDecimal("0.32"); BigDecimal bd3 = bd1.subtract(bd2); System.out.println(bd3);*/ BigDecimal bd1 = new BigDecimal("10"); BigDecimal bd2 = new BigDecimal("3"); BigDecimal bd3 = bd1.divide(bd2,9,BigDecimal.ROUND_CEILING); System.out.println(bd3);

}

}

二,Date

1,概述

-java.util包下的

-表示特定的时间,精确到毫秒值

-Date中很多功能被Calendar和DateFormat两个类给替代了

2,构造方法

Date()

分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。

Date(long date)

分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。

package com.momo.demo;

import java.util.Date;

public class Demo2 {

public static void main(String[] args) {

Date d = new Date();

System.out.println(d);

System.out.println(d.toLocaleString());

Date dd = new Date(65465464555L); System.out.println(dd); }

}

3,成员方法

boolean after(Date when)

测试此日期是否在指定日期之后。

boolean before(Date when)

测试此日期是否在指定日期之前。

static Date from(Instant instant)

从 Instant对象获取一个 Date的实例。

long getTime()

返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 。

void setTime(long time)

设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点。

package com.momo.demo;

import java.time.Instant;

import java.util.Date;

public class Demo2 {

public static void main(String[] args) {

Date d = new Date();

//d.setTime(64565465465416L);

System.out.println(d);

System.out.println(d.toLocaleString());

Date dd = new Date(65465464555L); System.out.println(dd); System.out.println(d.after(dd)); System.out.println(d.getTime()); // Instant in = d.toInstant(); }

}

三,DateFormat

1,DateFormat是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间

-本身是一个抽象类,无法实例化,但是可以依赖具体子类实现实例化,或者直接创建具体子类对象

来使用

-SimpleDateFormat是一个具体的子类

格式化和解析日期的时候允许我们自定义格式

日期和时间模式:

日期和时间格式由日期和时间模式字符串指定。

在日期和时间模式字符串中,从'A'到'Z'和从'a'

到'z'的非引号的字母被解释为表示日期或时间字符串的组件的模式字母。

y 年

M 月

d 日

H 时

m 分

s 秒

2,构造方法

SimpleDateFormat()

构造一个 SimpleDateFormat使用默认模式

SimpleDateFormat(String pattern)

使用给定模式

3,成员方法

String format(Date date)

将日期格式化成日期-->时间字符串。

Date parse(String source)

从给定字符串的开始解析文本以生成日期。

package com.momo.demo;

import com.momo.utils.DateUtil;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Demo3 {

public static void main(String[] args) throws ParseException {

/SimpleDateFormat sdf = new SimpleDateFormat();System.out.println(sdf);/

/* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(sdf);*/ //格式化 //SimpleDateFormat sdf = new SimpleDateFormat();//2023/7/26 上午10:43 // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); /* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d = new Date(); String s = sdf.format(d); System.out.println(s);*/ Date d = new Date(); // System.out.println(DateUtil.DateToString(d, "yyyy-MM-dd HH:mm:ss")); System.out.println(DateUtil.DateToString(d)); //解析 注意:格式要匹配,否则会出现解析异常 ParseException String s = "2023-07-26 10:45:12"; /* // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(s); System.out.println(d);*/ // System.out.println(DateUtil.StringToDate(s, "yyyy-MM-dd")); }

}

package com.momo.utils;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class DateUtil {

private DateUtil(){}

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

public static Date StringToDate(String s) throws ParseException {

Date d = sdf.parse(s);

return d;

}

public static String DateToString(Date d){ String s = sdf.format(d); return s; }

/* public static Date StringToDate(String s,String regex) throws ParseException {

SimpleDateFormat sdf = new SimpleDateFormat(regex);

Date d = sdf.parse(s);

return d;

}

public static String DateToString(Date d,String regex){ SimpleDateFormat sdf = new SimpleDateFormat(regex); String s = sdf.format(d); return s; }*/

}

4,练习

-键盘输入你的生日,计算从出生到现在已经过了多少天了?

假设你能活到80岁,计算一下还剩多少天?

四,Calendar

1,概述

-Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR ,

MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段

  • Calendar提供了一种类方法getInstance ,用于获取此类型的一般有用的对象。

-有具体实现类.

2,成员方法

static Calendar getInstance()

使用默认时区和区域设置获取日历。

int get(int field)

返回给定日历字段的值。

void set(int field, int value)

将给定的日历字段设置为给定的值。

void set(int year, int month, int date, int hourOfDay, int minute, int second)

设置字段中的值 YEAR , MONTH , DAY_OF_MONTH , HOUR_OF_DAY , MINUTE和 SECOND 。

void add(int field, int amount)

根据日历的规则,将指定的时间量添加或减去给定的日历字段。

Date getTime()

返回一个 Date表示此物体 Calendar的时间值(毫秒从偏移 Epoch “)。

long getTimeInMillis()

以毫秒为单位返回此日历的时间值。

void setTime(Date date)

使用给定的 Date设置此日历的时间。

void setTimeInMillis(long millis)

从给定的长值设置此日历的当前时间。

package com.momo.demo;

import java.sql.SQLOutput;

import java.util.Calendar;

import java.util.Date;

public class Demo4 {

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

//System.out.println(c);

// c.setTimeInMillis(564654654);

// c.setTime(new Date(6546544654L));

//c.set(2000,3,10,11,20,11);

/* c.set(Calendar.YEAR,3000); c.set(Calendar.MONTH,2);*/ //c.add(Calendar.MONTH,2); // c.add(Calendar.MONTH,-2); //三年前的今天时什么时候 // c.add(Calendar.YEAR,-3); //10年后的20天前时什么时候 c.add(Calendar.YEAR,10); c.add(Calendar.DATE,-20); System.out.println(c.get(Calendar.YEAR)); System.out.println(c.get(Calendar.MONTH)+1);//0-11 实际值要+1 System.out.println(c.get(Calendar.DATE)); System.out.println(c.get(Calendar.HOUR)); System.out.println(c.get(Calendar.MINUTE)); System.out.println(c.get(Calendar.SECOND)); /* Date d = c.getTime(); System.out.println(d);*/ //System.out.println(c.getTimeInMillis()); }

}

3,练习

-设计一个程序,键盘输入任意一年,输出这一年的2月份有多少天?


package com.momo.demo;

import com.momo.entity.Student;

/*

  • 有3个学生对象,要求把学生对象存到数组中,遍历数组,输出学生信息
  • 后来又来了一个学生,要存入数组,怎么办?
  • 要重新创建数组,长度是之前长度+1,把之前的学生按照顺序存入新数组,然后再把新学生存入数组, 每次都要这样做
  • 数组长度一旦确定就固定了,不能改变。
  • 如果有一个学生离开了,怎么办?
  • 要重新创建数组,长度是之前长度-1,把剩余的学生按照顺序存入新数组, 每次都要这样做
  • 为了避免浪费空间,和空指针异常

  • 说明:数组不能满足长度不断变化的需求。
  • */

public class Demo5 {

public static void main(String[] args) {

// Student[] stus = new Student[3];

Student s1 = new Student("乔峰",35); Student s2 = new Student("虚竹",28); Student s3 = new Student("段誉",20); Student s4 = new Student("阿朱",26);

/* stus[0] = s1;

stus[1] = s2;

stus[2] = s3;*/

//stus[3] = s4; Student[] stus2 = new Student[4]; stus2[0] = s1; stus2[1] = s2; stus2[2] = s3; // stus2[3] = s4; for (int i = 0; i < stus2.length; i++) { Student s = stus2[i]; // System.out.println(s); System.out.println(s.getName()); }

}

}

五,集合

1,概述

-可以存储多个元素的容器,而且长度可变

-为什么会出现集合类?

面向对象语言对事物的体现都是以对象的形式体现的,为了

方便对多个对象进行操作,java就提供了集合。

-我们在存储多个元素的时候,我们可能也会有不同的存储需求(随便存,相同的只能存一个,

存入的元素要求从小到大排序,...)

针对不同的需求,java就提供了不同的集合类,所以就出现了多个集合类。

这多个集合类的数据结构不同(数据的组织方式,数据的存储方式)这个不重要。

重要的是他们都能存储元素(添加,删除,判断,..) 也就是说这多个集合类存储共性内容

java就把他们的共性内容不断的向上提取,最终就形成了java集合的继承体系结构。

在这个继承体系结构中的大哥是Collection

-数组和集合都属于容器,但是他们有不同之处:

数组:可以存储基本类型,也可以存储引用类型,但是长度固定,

集合:只能存储引用类型,但是长度可变。

2,集合特点

-只能存储引用类型,长度可变,一个集合可以存储不同类型的对象(一般也只存一种类型)

六,Collection

1,概述

-是集合体系结构中的根,顶层接口,存储的对象也成为元素

它的子体系中有允许重复的,有不允许重复的,有无序的,有有序的。

-有2大子接口 List 和 Set

2,成员方法

-添加

boolean add(Object e)

确保此集合包含指定的元素(可选操作)。

boolean addAll(Collection c)

将指定集合中的所有元素添加到此集合(可选操作)。

package com.momo.demo;

import com.momo.entity.Student;

import java.util.ArrayList;

import java.util.Collection;

/*

  • Collection的添加功能
  • */

public class Demo6 {

public static void main(String[] args) {

//接口多态

Collection c = new ArrayList();

System.out.println(c);

c.add("momo");

c.add("帅哥");

c.add(true);

c.add(12.3);

c.add(123);

// c.add(Integer.valueOf(123));//自动装箱

c.add(new Student("aaa",18));

System.out.println(c);

Collection c2 = new ArrayList(); c2.add("momo"); c2.add(123); System.out.println(c2.addAll(c)); System.out.println(c2);

}

}

-删除

void clear()

从此集合中删除所有元素(可选操作)。

boolean remove(Object o)

从该集合中删除指定元素的单个实例(如果存在)(可选操作)。

boolean removeAll(Collection c)

删除指定集合中包含的所有此集合的元素(可选操作)。

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collection;

/*

  • Collection 删除功能
  • */

public class Demo7 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("momo");

c.add("帅哥");

c.add(true);

c.add(12.3);

c.add(123);

System.out.println(c);

/* //移除123 System.out.println(c.remove(123)); System.out.println(c); //移除321 System.out.println(c.remove(321)); System.out.println(c);*/ /* c.clear(); System.out.println(c);*/ //boolean removeAll(Collection<?> c) 只要移除一个就叫移除返回值就是true,如果没有一个被移除,返回false Collection c2 = new ArrayList(); c2.add("momo"); c2.add("帅哥"); c2.add(true); c2.add(22); System.out.println(c2); System.out.println(c.removeAll(c2)); System.out.println(c); System.out.println(c2);

}

}

-判断

boolean contains(Object o)

如果此集合包含指定的元素,则返回 true 。

boolean containsAll(Collection c)

如果此集合包含指定 集合中的所有元素,则返回true。

boolean equals(Object o)

将指定的对象与此集合进行比较以获得相等性。

boolean isEmpty()

如果此集合不包含元素,则返回 true 。

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collection;

/*

  • Collection 判断功能
  • */

public class Demo8 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("momo");

c.add("帅哥");

c.add(true);

c.add(12.3);

c.add(123);

System.out.println(c);

/* Collection c2 = new ArrayList();

c2.add("momo");

c2.add("帅哥");

c2.add(true);

// c2.add(12.3);

c2.add(123);

System.out.println(c2);

System.out.println(c.equals(c2));*/ /* System.out.println(c.contains(123)); System.out.println(c.contains(321));*/ /* System.out.println(c.isEmpty()); c.clear(); System.out.println(c.isEmpty());*/ // c = null; 只有具体对象才能调用方法 // System.out.println(c.isEmpty());NullPointerException //boolean containsAll(Collection<?> c) 包含所有才叫包含 Collection c2 = new ArrayList(); c2.add("momo"); c2.add("帅哥"); c2.add(true); c2.add(666); System.out.println(c2); System.out.println(c.containsAll(c2)); }

}

-获取功能

Iterator iterator()

返回此集合中的元素的迭代器。

int size()

返回此集合中的元素数。

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

/*

  • Collection 获取功能
  • */

public class Demo9 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("momo");

c.add("帅哥");

c.add(true);

c.add(12.3);

c.add(123);

System.out.println(c);

System.out.println(c.size()); /* * Iterator<E> iterator() 返回此集合中的元素的迭代器。 集合特有的遍历方式 本身是接口,方法肯定返回该接口具体实现类对象 * boolean hasNext() 如果迭代具有更多元素,则返回 true 。 E next() 返回迭代中的下一个元素。 * */ Iterator it = c.iterator(); /* System.out.println(it.hasNext()); System.out.println(it.next()); System.out.println(it.hasNext()); System.out.println(it.next()); System.out.println(it.hasNext()); System.out.println(it.next()); System.out.println(it.hasNext()); System.out.println(it.next()); System.out.println(it.hasNext()); System.out.println(it.next()); System.out.println(it.hasNext());

// System.out.println(it.next());NoSuchElementException 没有这样的元素异常*/

while (it.hasNext()){ System.out.println(it.next()); }

}

}

-交集

boolean retainAll(Collection c) 交集:2个集合中都有的元素

仅保留此集合中包含在指定集合中的元素(可选操作)。

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collection;

/*

  • Collection 交集功能
  • */

public class Demo10 {

public static void main(String[] args) {

//boolean retainAll(Collection c) 获取2个集合中相同的内容,把相同的内容保存到调用方法的集合中

//返回值返回的是调用方法的集合有没有发生过变化

Collection c = new ArrayList();

c.add("momo");

c.add("帅哥");

c.add(true);

c.add(123);

System.out.println(c);

Collection c2 = new ArrayList(); /* c2.add("momo"); c2.add("帅哥");*/ c2.add(666);

/* c2.add("momo");

c2.add("帅哥");

c2.add(true);*/

// c2.add(123);

// c2.add("momo"); /* c2.add("帅哥"); c2.add(true); c2.add(123);*/ System.out.println(c2); System.out.println(c.retainAll(c2)); System.out.println(c); System.out.println(c2); }

}

-转换

Object[] toArray()

返回一个包含此集合中所有元素的数组。

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collection;

/*

  • Collection 转换功能
  • */

public class Demo11 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("momo");

c.add("帅哥");

c.add(true);

c.add(123);

System.out.println(c);

Object[] objs = c.toArray(); for (int i = 0; i < objs.length; i++) { System.out.println(objs[i]); }

}

}

3,Collection集合的遍历:依次获取集合种的每一个元素

(存储字符串遍历, 存储自定义对象并遍历)

-2种遍历方式

转数组

迭代器

package com.momo.demo;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

/*

  • Collection集合的遍历
  • */

public class Demo12 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("aaa");

c.add("bbb");

c.add("ccc");

c.add("ddd");

System.out.println(c);

/* Object[] objs = c.toArray(); for (int i = 0; i < objs.length; i++) { // System.out.println(objs[i]); Object o = objs[i]; // System.out.println(o); //输出每个元素的长度 *//* * 找不到符号 符号: 方法 length() Object种没有length方法 * 向下转型 * *//* //System.out.println(o.length()); String s = (String)o; System.out.println(s); System.out.println(s.length()); }*/ Iterator it = c.iterator(); while (it.hasNext()){ Object o = it.next(); String s = (String)o; System.out.println(s); System.out.println(s.length()); }

}

}

-练习:存储自定义对象并遍历(2种方式)

上一篇:支付功能3
下一篇:没有了
网友评论