Math类
Math类:针对数字运算提供的一系列方法常用的方法:
方法名 | 说明 |
---|---|
public static int abs(int a) | 获取参数a的绝对值: |
public static double ceil(double a) | 向上取整 |
public static double floor(double a) | 向下取整 |
public static double pow(double a, double b) | 获取a的b次幂 |
public static long round(double a) | 四舍五入取整 |
工具类的编写规则:
1.不能被继承,使用final关键字修饰类
2.不能创建对象,使用private关键字修饰构造方法
3.对外提供静态方法(通过类名访问)
public class MathTest {
//演示:Math的应用
public static void main(String[] args) {
int a = 10;
int b = 20;
//求最大值
int max = Math.max(a, b);
//求最小值
int min = Math.min(a, b);
//计算次幂
double num = Math.pow(2, 3);
//随机数
int random = (int) (Math.random()*100);//Random r = new Random();
//int n = r.next(100)//范围0~99
//四舍五入
long round = Math.round(4.7);
System.out.println(max);//20
System.out.println(min);//10
System.out.println(num);//8.0
System.out.println(random);//94
System.out.println(round);//5
}
}
System工具类
常用方法:方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |
public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
public class SystemTest {
//演示:System类的使用
public static void main(String[] args) {
//要知道方法执行多长时间(毫秒)
//在方法执行前:获取毫秒值
long beginTime = System.currentTimeMillis();//获取当前系统时间的毫秒值
method();
//在方法执行后:获取毫秒值
long endTime = System.currentTimeMillis();
System.out.println("方法执行时间:" + (endTime - beginTime) + "毫秒");//方法执行时间:10毫秒
// System.exit(0);
}
public static void method() {
int count = 0;
for (int i = 0; i < 10000000; i++) {
if (i % 2 == 0) {
count++;
}
}
}
}
BigInteger类
BigInteger介绍:java.math.BigInteger类是一个引用数据类型,可以用来对一些大整数做运算。当超出基本数据类型数据范围的整数运算时就可以使用BigInteger了。构造方法 | 描述 |
---|---|
BigInteger(String value) | 可以将整数的字符串,转换为BigInteger对象 |
BigInteger解决什么问题?
解决程序中出现long无法储存的整数使用BigIntegerBigInteger的加,减,乘,除的方法名是什么?
add,subtract,divide,multiplyimport java.math.BigInteger;
public class BigIntegerDemo {
public static void main(String[] args) {
//创建大整数对象
BigInteger num1 = new BigInteger("1000");
BigInteger num2 = new BigInteger("100");
//运算
BigInteger result1 = num1.add(num2);
System.out.println(result1);//1100
BigInteger result2 = num1.subtract(num2);
System.out.println(result2);//900
BigInteger result3 = num1.divide(num2);
System.out.println(result3);//10
BigInteger result4 = num1.multiply(num2);
System.out.println(result4);//100000
}
}
BigDecimal类
BigDecimal介绍:java.math.BigDecimal可以对大浮点数进行运算,保证运算的准确性。BigDecimal的精确性高于float和double构造方法名 | 描述 |
---|---|
BigDecimal(String val) | 将 BigDecimal 的字符串表示形式转换为 BigDecimal |
//使用构造方法,创建对象
BigDecimal num1 = new BigDecimal("12312312312312311.123123123123");
BigDecimal num2 = new BigDecimal("1000000000000000.9999999999");
//四则运算
BigDecimal result1 = num1.add( num2 );//加运算
BigDecimal result2 = num1.subtract( num2 );//减运算
BigDecimal解决什么问题?
用来存储超出double范围的小数BigDecimal的加,减,乘,除的方法名是什么?
add,subtract,divide,multiplyimport java.math.BigDecimal;
public class BigDecimalDemo {
public static void main(String[] args) {
//创建对象
BigDecimal num1 = new BigDecimal("100.2");
BigDecimal num2 = new BigDecimal("2.2");
//运算
System.out.println("加运算:"+(num2.add(num1)));//加运算:102.4
System.out.println("减运算:"+(num1.subtract(num2)));//减运算:98.0
System.out.println("乘运算:"+(num1.multiply(num2)));//乘运算:220.44
// System.out.println("除运算:"+(num1.divide(num2)));//当除不尽时,会引发异常(解决方案:设置保留有效小数位数)
// 保留小数位数 小数的取舍方式
BigDecimal result = num1.divide(num2,3,BigDecimal.ROUND_HALF_UP );//45.545
System.out.println(result);
}
}
Arrays类
Arrays类介绍:java.util.Arrays是数组的工具类,里面有很多静态的方法用来对数组进行操作(如排序和搜索)Arrays类:针对数组提供了一系列方法
Arrays的方法:
1.数组元素排序(默认升序)
2.数组转换为字符串
import java.util.Arrays;
import java.util.Random;
public class ArraysDemo {
//需求:随机生成10个[0,100]之间的整数,放到整数数组中,按照从小到大的顺序排序并打印元素内容
public static void main(String[] args) {
//解决需求1: 定义数组,存储10个随机整数
int[] array = new int[10];
//创建随机数字对象
Random r = new Random();
for (int i = 0; i < array.length; i++) {
int num = r.nextInt(101);
array[i] = num;
}
//测试看看数组中的元素值
System.out.println(Arrays.toString(array));//把数组转换为字符串
//解决需求2: 对数组中的元素进行排序
Arrays.sort(array);
System.out.println(Arrays.toString(array));//把数组转换为字符串
//打印数组中元素的格式: 元素1 元素2
String str = Arrays.toString(array);//str="[2, 3, 5, 7, 27, 31, 52, 54, 76, 76]";
str = str.substring(1, str.length()-1 );//去除前后:中括号
str = str.replaceAll(",", " ");//使用" "代替","
System.out.println("排序后:" + str);
/**运行结果:[35, 38, 97, 6, 46, 96, 31, 74, 97, 30]
[6, 30, 31, 35, 38, 46, 74, 96, 97, 97]
排序后:6 30 31 35 38 46 74 96 97 97
*/
}
}
包装类
什么是包装类?
Java把8种基本类型,进行了封装,变为包装类基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
包装类解决程序中的什么问题?
1、实现String类型和7种基本类型(没有char)之间的转换String str = “1234”; < => int类型
2、在后面学习mysql时会大量使用到包装类(包装类中可以存储null数据)
包装类怎么使用?
使用包装类:解决String类型和基本类型之间数据转换基本类型数据 => String类型
1.直接拼接空字符串2.使用String的valueOf静态方法
举例:
int num =100;String str = num+“”;
String str = String.valueOf( num );
String类型 => 基本类型数据
除了Character之外,都有静态方法parseXxx方法可以完成字符串转换基本数据类型。举例:
String str =“1234”;
int num = Integer.parseInt( str );
String s = “true”;
boolean flag = Boolean.parseBoolean( s )
public class Demo1 {
public static void main(String[] args) {
//把字符串转换为int类型数据
String str="123";
int num = Integer.parseInt(str);
System.out.println(num);
//把字符串转换为double类型数据
String str2="3.14";
double num2 = Double.parseDouble(str2);
System.out.println(num2);
}
}
包装类在使用中的细节
1. 在把String类型数据,转换为基本类型数据时,容易发生:NumberFormatException异常 (原因:String类型数据,不符合要转换的基本类型数据格式)public class Demo2 {
public static void main(String[] args) {
//把字符串转换为int类型数据
String str="123AAA";//字符串不是纯数字
//在把字符串转换为对应的基本类型数据时,务必保证字符串符合基本类型数据的格式
int num = Integer.parseInt(str);//出现异常:NumberFormatException
System.out.println(num);
}
}
运行结果:报错NumberFormatException
- 包装类在使用时存在:自动装箱、自动拆箱
基本数据类型自动转换为对应的包装类型叫做装箱。
包装类型转自动换为对应的基本数据类型叫做拆箱。
自动装箱 : Integer.valueOf( 数值 )
自动拆箱: Integer对象.intValue()
- 包装类中有常量池(数据值没有超出常量池范围,就直接从常量池中获取对象)
注意事项 :
3.1. 包装类对象的初始值为null(是一个对象)。
3.2. Java中除了float和double的其他基本数据类型,都有常量池。
整数类型:[-128,127]值在常量池
字符类型:[0,127]对应的字符在常量池
布尔类型:true,false在常量池
3.3. 在常量池中的数据 , 会进行共享使用,减少频繁创建,从而提高性能,不在常量池会创建新的对象
String类的常用方法举例
public class StringDemo1 {
/*
已知字符串,完成需求
String str = "I Love Java, I Love Heima";
判断是否存在 “Java”
判断是否以Heima字符串结尾
判断是否以Java开头
判断 Java在字符串中的第一次出现位置
判断 itcast 所在的位置
*/
public static void main(String[] args) {
String str = "I Love Java, I Love Heima";
boolean result = str.contains("Java");
System.out.println(result);
boolean result2 = str.endsWith("Heima");
System.out.println(result2);
boolean result3 = str.startsWith("Java");
System.out.println(result3);
int index = str.indexOf("Java");
System.out.println(index);
int itcast = str.indexOf("itcast");
System.out.println(itcast);
}
}
运行结果:
true
true
false
7
-1
public class StringDemo2 {
/*
已知字符串,完成右侧需求
String str = "I Love Java, I Love Heima";
需求:
1.将所有 Love 替换为 Like ,打印替换后的新字符串
2.截取字符串 "I Love Heima"
3.截取字符串 "Java"
*/
public static void main(String[] args) {
String str = "I Love Java, I Love Heima";
String replace = str.replace("Love", "like");
System.out.println(replace);
String substring = str.substring(13);
System.out.println(substring);
System.out.println(str.substring(7,11));
}
}
运行结果:
I like Java, I like Heima
I Love Heima
Java
public class StringDemo3 {
/*
已知字符串,完成右侧需求
String str = "I Love Java, I Love Heima";
需求:
1 计算字符 a 出现的次数(要求使用toCharArray)
2 计算字符 a 出现的次数(要求使用charAt)
3 将字符串中所有英文字母变成小写
4 将字符串中所有英文字母变成大写
*/
public static void main(String[] args) {
String str = "I Love Java, I Love Heima";
int count=0;
char[] chs = str.toCharArray();
for (int i = 0; i < chs.length; i++) {
if(chs[i] == 'a'){
count++;
}
}
System.out.println(count);
System.out.println(str.toUpperCase());
System.out.println(str.toLowerCase());
}
}
运行结果:
3
I LOVE JAVA, I LOVE HEIMA
i love java, i love heima