一、Math类

1、Math类介绍

  Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰。

常用字段:

1、E 表示自然对数的底数 2.71828

2、Π 表示圆周率 3.1415926

2、Math类常用方法

以下X表示 double,float,int,,long

1、abs(X x):求绝对值,比如 static double abs(double a) 。

2、max(X x1,X x2):求最大值,比如 static double max(double a, double b) 求两个数中的最大值。

3、min(X x1,X x2):求最小值。

4、pow(double a,double b) 返回第一个参数次幂的值。

5、random():返回一个 0 到 1 之间的数,double类型。

6、public static int round(float a):返回最接近参数的 int。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 int 类型。

public static long round(double a):返回最接近参数的 long。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 long 类型。

7、public static double sqrt(double a):返回正确舍入的 double 值的正平方根。

二、BigInteger类和 BigDecimal类

1、BigInteger类

  不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。

  BigInteger类比long大。

BigInteger 方法:

1、BigInteger add(BigInteger val);

  返回其值为 (this + val) 的 BigInteger(当前对象和传入对象相加,返回新的值)。

2、BigInteger multiply(BigInteger val);

  返回其值为 (this * val) 的 BigInteger。

3、BigInteger divide(BigInteger val);

  返回其值为 (this / val) 的 BigInteger。

2、BigDecimal类

  不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)

  BigDecimal能够精确的表示一个小数,常用于商业和科学计算;float,double不能精确的表示一个小数。

  BigDecimal类和BigInteger类很相似,比如 add(加法)、multiply(乘法)divide(除法)。

 import java.math.BigDecimal;

 public class BigDecimalTest {
/**
* 不精确的计算
*/
@Test
public void test1(){
System.out.println(0.05 + 0.01); //输出:0.060000000000000005
System.out.println(1.0 - 0.42); //输出:0.5800000000000001
System.out.println(4.015*100); //输出:401.49999999999994
System.out.println(123.3/100); //输出:1.2329999999999999
} /**
* 使用BigDecimal,参数类型是double类型,计算还是不精确
*/
@Test
public void test2(){
BigDecimal b1 = new BigDecimal(0.05);
BigDecimal b2 = new BigDecimal(0.01);
System.out.println(b1.add(b2)); //输出:0.06000000000000000298372437868010820238851010799407958984375
} /**
* 使用BigDecimal,参数类型是String类型,计算结果精确
*/
@Test
public void test3(){
BigDecimal b1 = new BigDecimal("0.05");
BigDecimal b2 = new BigDecimal("0.01");
System.out.println(b1.add(b2)); //输出:0.06
}
}

3、小结

BigInteger和BigDecimal它们之间有很多共性:

1、BigInteger 和 BigDecimal 都是Number的子类,表示数字类型。

2、Integer是int的包装类,BigInteger,BigDecimal和Integer没有一点关系,BigInteger,BigDecimal都是平级的,都是Number的子类。

3、BigInteger,BigDecimal 虽然都是数字类型的引用类型,但是不能够使用基本运算符( 比如 +, -, *,/),需要使用专门的方法来进行计算。

三、随机数

1、获取随机数的方法

1、Math.random()

  返回带正号的double值,该值大于等于0.0 且小于1.0;(返回值double,范围[0.0,1.0) )。

2、Java中单独提供了一个Random类

  int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。(在整个int范围内随机获得int值)。

 int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值n(不包括)之间均匀分布的 int 值。(获得0到n的一个int值)。

3、Random括展了一个子类(ThreadLocalRandom),可以指定区间[n,m)左闭右开。

4、UUID 唯一标识

 import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom; public class RandomTest {
/**
* 测试Math.random
*/
@Test
public void test1(){
System.out.println(Math.random()); //输出:0.4645899681898382
} /**
* 测试Random类
*/
@Test
public void test2(){
Random random = new Random();
int nextInt1 = random.nextInt();
int nextInt2 = random.nextInt();
System.out.println(nextInt1);
System.out.println(nextInt2);
//Random(long seed) 如果种子是一个固定值,得到也是一个固定值
Random random1 = new Random(123456);
int nextInt3 = random1.nextInt();
//int nextInt(int n) n 必须比0大,返回在 n 之间的随机数
int nextInt4 = random1.nextInt(9);
System.out.println(nextInt3);
System.out.println(nextInt4); //输出:4
} /**
* 测试ThreadLocalRandom类
*/
@Test
public void testThreadLocalRandom(){
//不能使用new来创建ThreadLocalRandom对象
ThreadLocalRandom random = ThreadLocalRandom.current();
int nextInt1 = random.nextInt();
//nextInt(int n) n 必须比0大,返回在 n 之间的随机数
int nextInt2 = random.nextInt(9);
System.out.println(nextInt1); //输出:347500648
System.out.println(nextInt2); //输出:7
} /**
* 测试UUID 唯一标示
*/
@Test
public void testUUID(){
UUID uuid = UUID.randomUUID();
System.out.println(uuid); //输出:2cc14224-72e3-4e3a-8c7b-017abb433f74
}
}

四、日期时间类

1、Date类

  java.util.Date 使用一个类表示时间,也就是把时间封装成一个类。

 import java.util.Date;

 public class DateTest {
/**
* 测试Date
*/
@Test
public void test1(){
Date date = new Date();
System.out.println(date); //返回当前时间
}
}

2、时间格式化

DateFormat类的子类SimpleDateFormat

方法:

1、格式化(把Date转换成String)  String format(Date date)。

2、解析(把String转换成Date)   Date parse(String source)。

一般可以把时间格式化方法封装为一个工具类:

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale; /**
* 时间工具类
*/
public class DateUtil {
/**
* 格式化日期
* @param date
* @return
*/
public static String DateToString(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
String format = dateFormat.format(date);
return format;
} /**
* 字符串转换成日期格式
* @param date
* @return
* @throws ParseException
*/
public static Date StringToDate(String date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
Date parse = null;
try {
parse = dateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return parse;
}
}

2、Calendar 日历类

  Calendar类属于java.util包下面 , 抽象类;不能使用new创建对象,获取日历对象用 Calendar.getInstance()。

Calendar方法:

1、public final void set(int year, int month, int date)

  设置日历字段 YEARMONTHDAY_OF_MONTH 的值。

2、public int get(int field)

  返回给定日历字段的值。在 lenient 模式下,所有日历字段都被标准化。在 non-lenient 模式下,所有日历字段都是经过验证的,如果任何日历字段有超出范围的值,则此方法抛出一个异常。

 public class DateTest {
/**
* 测试Calendar类
*/
@Test
public void testCalendar(){
Calendar calendar = Calendar.getInstance(); //创建Calendar对象,不能用new,是一个抽象类
int year = calendar.get(Calendar.YEAR); //获取年
int month = calendar.get(Calendar.MONTH) + 1; //获取月 第一个月是 JANUARY,它为 0;所以需要加 1
int day = calendar.get(Calendar.DAY_OF_MONTH); //获取day
System.out.println("当前日期:" + year + "年"+ month + "月" + day + "号"); //输出:当前日期:2018年2月7号
Date time = calendar.getTime(); //一次性获取日期
System.out.println(time); //Wed Feb 07 16:11:00 GMT+08:00 2018
} /**
* Calendar类的计算
*/
@Test
public void testCalendar2(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 1); //增加1年
calendar.add(Calendar.MONTH, 2); //增加2个月
calendar.add(Calendar.DAY_OF_MONTH, 8); //增加8天
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; //获取月 第一个月是 JANUARY,它为 0;所以需要加 1
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("当前日期:" + year + "年"+ month + "月" + day + "号"); //输出:当前日期:2019年4月15号
}
}

Java基础(七)常用类的更多相关文章

  1. 【Java基础】常用类

    常用类 字符串相关的类 String类:代表字符串,使用一对 "" 引起来表示. public final class String implements java.io.Seri ...

  2. java基础之常用类1

    java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接   java常用类: 1.内部类 2.Object类 3.Object类常用方法 4.包装类 5.String类 6.BigDeci ...

  3. Java基础总结--常用类以及包的访问权限

    -----Object---所有类的根类1.怎么得到的:通过对所有对象不断的向上抽取共性,具备所有对象的共性的东西2.常用的方法* equals(Object obj):比较两个对象的引用是否指向同一 ...

  4. Java基础之常用类

    1.Collections类: (1)此类完全由在 collection 上进行操作或返回 collection 的静态方法组成. (2)静态方法摘要: static <T> boolea ...

  5. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  6. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  7. java中的常用类(二)

    java中的常用类(二) Math类 Math类的声明:public final class Math extends Object Math类是与数学计算有关的类,里面的方法都是静态方法,直接使用类 ...

  8. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  9. Java基础:Object类中的equals与hashCode方法

    前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象   对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...

  10. Java基础和常用框架的面试题

    前言 最近学校也催着找工作了,于是刷了一些面试题,学习了几篇大佬优秀的博客,总结了一些自认为重要的知识点:听不少职场前辈说,对于应届毕业生,面试时只要能说到核心重要的点,围绕这个点说一些自己的看法,面 ...

随机推荐

  1. 使用git提交代码简单说明

    一. 图形化git 1.首先下载msysgit,和 tortoisegit, 先装msysgit再装小乌龟 2.运行git按照github上说明生成秘钥对     ssh-keygen -t rsa ...

  2. dbproxy-id生成器

    id生成器使用的是snowflake, 需要执行 snowflake_init(region_id, worker_id); 而region_id和worker_id是在配置文件中配置的 networ ...

  3. JAVA JVM 杂谈(一)

    JVM能够跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台先关的软件或者硬件之间的差异,使得与平台先关的耦合统一由JVM的提供者来实现. JVM结构组成: 1.类加载器:在 ...

  4. Leetcode 856. Score of Parentheses 括号得分(栈)

    Leetcode 856. Score of Parentheses 括号得分(栈) 题目描述 字符串S包含平衡的括号(即左右必定匹配),使用下面的规则计算得分 () 得1分 AB 得A+B的分,比如 ...

  5. elasticsearch-sql插件

    elasticsearch DSL语法有些时候比较难懂换成SQL好处理一些,网上找到一个插件 https://github.com/NLPchina/elasticsearch-sql 安装elast ...

  6. NSInvocation 调用block clang代码转换c++

    NSInvocation 调用block cpp 转换 fatal error: 'UIKit/UIKit.h' file not found https://blog.csdn.net/yst199 ...

  7. 【Leetcode】Binary Tree Traversal

    把三个二叉树遍历的题放在一起了. 递归写法太简单,就不再实现了,每题实现了两种非递归算法. 一种是利用栈,时间和空间复杂度都是O(n). 另一种是借助线索二叉树,也叫Morris遍历,充分利用树中节点 ...

  8. 主流服务器虚拟化技术简单使用——KVM(一)

    Tips:因为博客园排版的原因,图片显示不清晰,可以放大网页查看清晰图片. 如果系统使用物理机,需要在BIOS里面开启Intel VT-x(或AMD-V),如果是VMware workstation, ...

  9. mvc Area(区域)相关技术

    ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所 ...

  10. python中range()和len()函数区别

    函数:len() 作用:返回字符串.列表.字典.元组等长度 语法:len(str) 参数: str:要计算的字符串.列表.字典.元组等 返回值:字符串.列表.字典.元组等元素的长度 实例 1.计算字符 ...