void----无返回值
Void—返回值一定是null
包装类对象的哈希码值都是固定的(null 0)
由基本类型数据构建的包装类对象—封箱
基本类型数据直接赋值给包装类对象—自动封箱—jdk1.5新特性
底层依赖包装类.valueOf()生成包装类对象
包装类对象直接赋值给基本类型数据—自动拆箱—jdk1.5特性、
底层依赖包装类对象.xxxValue()生成基本类型数据
注意:Double d=2;//不可以
Double.valueOf(2);//可以
Math
最终类 提供了基本的数学运算 提供了大量的静态方法
BigDecimal----用于精确运算的类(参数必须是字符串)
BigInteger----用于超大数
DecimalFormat----用于格式化(使用占位符)
Date类
用SimpleDateFonater去操作日期和字符串之间的转换(字符串转日期parse() 日期转字符串format())
calendar—日历类
public class IntegerDemo1 {
public static void main(String[] args) {
int i=5;
//创建Integer
//包装类对象由基本类型数据构建而来---封箱
//Integer in=new Integer(i);
//基本数据类型数据直接赋值给包装类对象---自动封箱---jdk1.5新特性
//底层是由包装类点valueOf()把基本类型数据转成包装类对象
//Integer.valueOf(i)
Integer in=i;
System.out.println(in);
//封箱
System.out.println(new Character('a'));
}
}
public class IntegerDemo2 {
public static void main(String[] args) {
Integer in=new Integer(232);
//包装类对象直接赋值给基本类型数据---自动拆箱--jdk1.5特性
//底层依赖包装类对象调用xxxValue()生成基本数据类型
//in.intvalue()
int y=in.intValue();
int i=in;
System.out.println(i);
System.out.println(y);
}
}
public class IntegerDemo3 {
public static void main(String[] args) {
//
//-128--127一个共享范围,超过这个范围每次就返回一个新对象
Integer.valueOf(12);
Integer in1=150;
Integer in2=150;
//范围-128---127
Byte.valueOf((byte)12);
//范围-128---127
Short.valueOf((short)12);
//范围 0-127
Character.valueOf((char)12);
//范围-128---127
Long.valueOf(23L);
//没有共享范围
Float.valueOf(2.3F);
System.out.println(in1==in2);
}
}
public class IntegerDemo4 {
public static void main(String[] args) {
/*
* Integer in=new Integer(12); int i=12; //包装类对象和基本类型进行操作时会进行自动拆箱
* System.out.println(in+i);
*/
//创建包装类对象
//NumberFormatException----数字格式异常
//会检测字符串中开头是否有+或者-,后面的内容不能出现非整数字符
Integer in=new Integer("234");
System.out.println(in);
//出现了只有true的字样可以忽略大小写,返回的才是true
Boolean b=new Boolean("True");
System.out.println(b);
//类名.parseInt()----把其它类型数据转成包装类对象
System.out.println(Integer.parseInt("12"));
//没有提供character的相关方法
}
}
public class IntegerDemo5 {
public static void main(String[] args) {
//哈希码值就是输入的整形值
System.out.println(new Integer(12).hashCode());
//哈希码值就是输入的整形值
System.out.println(new Byte((byte)12).hashCode());
//哈希码值就是输入的整形值
System.out.println(new Short((short)12).hashCode());
//哈希码值就是输入的整形值
System.out.println(new Character((char)12).hashCode());
//哈希码值就是输入的整形值
System.out.println(new Long(232333L).hashCode());
//
System.out.println(new Double(2.30).hashCode());
//
System.out.println(new Float(2.3F).hashCode());
}
}
Math下的方法
public class MathDemo1 {
public static void main(String[] args) {
//绝对值
System.out.println(Math.abs(-2.4));
//求第一个参数的第二个参数次幂(次幂可以是小数,求根)
System.out.println(Math.pow(4, 0.5));
//向上取整
System.out.println(Math.ceil(2.01));
//向下取整
System.out.println(Math.floor(2.51));
//四舍五入 结果是整数
System.out.println(Math.round(3.16));
//伪随机小数,大于等于0.0小于1.0
System.out.println(Math.random());
//30到50之家的随机的随机整数 随机范围20
System.out.println((int)(Math.random()*20+30));
}
}
案例:验证码
package cn.tedu.math;
/**
*@author 作者:
*@version 创建时间:2020年10月5日下午10:10:37
*@description 描述:验证码底层原理
*/
public class YzmDemo {
public static void main(String[] args) {
char[]cs= {'a','g','由','k','o','t','p','l'};
String str="";
for (int i = 0; i < 6; i++) {
str+=cs[(int)((Math.random()*8))];
}
System.out.println(str);
}
}
BigDecimal
public class BigDecimalDemo {
//strictfp只能加到方法上
//在底层进行运算时可以把处理的位数提高到80位,最后存储还是64位,所以依然不是精确运算
public strictfp static void main(String[] args) {
//因为大部分小数的补码是无线位数,但是存储的位数是固定的
//就不能精确运算
double d=2.1-1.98;//行不通
//参数时字符串才能做精确运算
BigDecimal bd1=new BigDecimal("2.1");
BigDecimal bd2=new BigDecimal("1.98");
System.out.println(bd1.subtract(bd2));
}
}
超大数之间的运算
public class BigIntegerDemo {
public static void main(String[] args) {
//超大数之间的运算
BigInteger bi1=new BigInteger("1234156789");
BigInteger bi2=new BigInteger("987456123");
System.out.println(bi1.multiply(bi2));
}
}
public class DecimalFormaemo {
public static void main(String[] args) {
//保留小数位
Double d=2.329;
//DecimalFormat----进行格式化
//占位符 0时占位符,如果这个位上有值就把值展示出来,没值就展示0
//#是占位符,如果这个位上有值就把值展示出来,没值就不展示
DecimalFormat df=new DecimalFormat("0.0000");
DecimalFormat df2=new DecimalFormat("#.####");
String s=df.format(d);
System.out.println(s);
String s2=df2.format(d);
System.out.println(s2);
}
}
date类
public class DateDemo1 {
public static void main(String[] args) {
//CST------中国标准时区----上海时间
//得到的是当前的日期和时间
//默认指定具体的时间时会加上1990年1月
//警告压制
//方法名上有黑线----过时了---在未来的版本中不支持
Date date1=new Date();
@SuppressWarnings("deprecation")
Date date=new Date(2020-1900,11-1,1);
System.out.println(date1);
}
}
public class DateDemo2 {
public static void main(String[] args) throws ParseException {
//1、字符串转日期
String str="2020-12-12 15:12:12";//1911/1/1 1911年
//ParseException
//指定日期转换的格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//把字符串转成日期
Date date=sdf.parse(str);
System.out.println(date);
//2、日期转字符串
//指定格式
//SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//把日期转换成字符串
String s=sdf1.format(date);
System.out.println(s);
}
}
public class CalendarDemo {
public static void main(String[] args) {
//获取日历类对象
Calendar c=Calendar.getInstance();
System.out.println(c);
//指定日期
@SuppressWarnings("deprecation")
Date date=new Date(2020-1900,12-1,12);
//给日历设定时间
c.setTime(date);
//得到日历类里的信息
System.out.println(c.get(Calendar.DAY_OF_MONTH));
}
}
扩展:localdate
public class LocalDateDemo {
public static void main(String[] args) {
//jdk1.8time 包下更新 只展示日期
LocalDate f=LocalDate.now();
//
System.out.println(f);
//加日期
System.out.println(f.plus(1,ChronoUnit.CENTURIES));
}
}
案例:利用编程实现两数乘积的过程
public class MulTest {
public static void main(String[] args) {
int[] arr1= {3,2,1};//123
int[] arr2= {6,5,4};//456
//结果数组
int[] result=new int[6];
//进行相乘
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr2.length; j++) {
result[i+j]+=arr1[i]*arr2[j];
}
}
//遍历结果进行进位
for (int i = 0; i < result.length-1; i++) {
if(result[i]/10>=0) {
int tmp=result[i]%10;
result[i+1]+=result[i]/10;
result[i]=tmp;
}
}
int sum=0;
for (int i = 0; i < result.length; i++) {
sum+=result[i]*Math.pow(10, i);
}
System.out.println(sum);
}
}