目录
1.Math
//返回参数的绝对值
System.out.println(Math.abs(-5));
//向上取整,类型是一个double
System.out.println(Math.ceil(5.14));
//向下取整
System.out.println(Math.floor(5.14));
//四舍五入
System.out.println(Math.round(5.14));
//返回两个数的最大值
System.out.println(Math.max(-5, 6));
//返回两个数的最小值
System.out.println(Math.min(-5, 6));
//返回a的b次幂的值
System.out.println(Math.pow(2, 3));
//返回值为double的正值,[0.0,1.0)
System.out.println(Math.random());
2.System
//程序停止
System.out.println("11");
//System.exit(0);
//获取当前时间的毫秒
System.out.println(System.currentTimeMillis());
//数组的拷贝
int [] arr={1,2,3,4};
int [] arr2=new int[4];
//被拷贝的数组,开始索引,接收的数组,开始索引,长度
System.arraycopy(arr,0,arr2,0,4);
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
3.Object
概:每一个类之间或间接的父类
面向对象继承的子类,都会访问父类的无参数构造方法原因:顶级父类只有无参构造方法
在string 里面equals被重写了的自己直接比较的是内容,其他的同
4.objects
方法1等同于方法的toString方法
方法2就是同1,厉害的地方就是当对象的空的时候返回默认字符串
方法3 Objects.isNull() 返回的TF
方法4是方法3的反着的情况,作用一样
5.bigdecimal
BigDecimal bigDecimal=new BigDecimal(10.0);
System.out.println(bigDecimal);
BigDecimal bigDecimal2=new BigDecimal("123");
System.out.println(bigDecimal2);
BigDecimal bigDecimal=new BigDecimal("10");
BigDecimal bigDecimal2=new BigDecimal("3");
//加法
System.out.println(bigDecimal.add(bigDecimal2));
//减法
System.out.println(bigDecimal.subtract(bigDecimal2));
//乘法
System.out.println(bigDecimal.multiply(bigDecimal2));
//除法
//参与运算的对象,位数,模式
System.out.println(bigDecimal.divide(bigDecimal2, 2, RoundingMode.HALF_UP));
//进一 RoundingMode.UP 去尾RoundingMode.FLOOR 四舍五入RoundingMode.HALF_UP
BigDecimal是用来进行精确计算的
2,创建BigDecimal的对象,构造方法使用参数类型为字符串的。
3,四则运算中的除法,如果除不尽请使用divide的三个参数的方法。
代码示例:
BigDecimal divide = bd1.divide(参与运算的对象, 小数点后精确到多少位, 舍入模式);
参数1 ,表示参与运算的BigDecimal对象。
参数2 ,表示小数点后面精确到多少位
参数3 ,舍入模式
BigDecimal.ROUND_UP 进一法
BigDecimal.ROUND_FLOOR去尾法
BigDecimal.ROUND_HALF_UP四舍五入
6.基本包装类型
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
1.创建对象
传入Int类型或者String类形型
Integer integer=new Integer(100);
Integer integer2=new Integer("100");
System.out.println(integer);
System.out.println(integer2);
System.out.println("=========上面的过时了==========");
Integer integer3 = Integer.valueOf(200);
Integer integer4 = Integer.valueOf("300");
System.out.println(integer3);
System.out.println(integer4);
2.自动装箱,拆箱
自动装箱->把基本数据类型变成包装类
自动拆箱->把包装类型自动准换成基本数据类型
当基包装类型是null时,要判断再尽心计算,基本数据类型无法计算null
//自动装箱
自定装箱底层调用的是interger.valueof();
Integer i1 = 100;
i1 += 200;//i1=i1+200;
//先把i1转换成基本数据类型100,100+200的结果再转换成包装类
System.out.println(i1);
//自动拆箱
底层调用Intvalue()
int i2 = i1;
System.out.println(i1);
interger对象 在比较的时-128-127不会产生新的对象
3.int-string之间的转换
String s="200";
//字符串类型转换成int类型
int i = Integer.parseInt(s);
//int 转换成字符串类型
int i2=200;
//方式1
String s2=i2+"";
//方式2
String s1 = String.valueOf(i2);
//字符串91 27 46 38 50转换成数组每一个数
String s="91 27 46 38 50";
//按照空格分割成没有空格的数组
String[] s1 = s.split(" ");
int [] arr=new int[s1.length];
//遍历实现
for (int i = 0; i < s1.length; i++) {
arr[i]=Integer.parseInt(s1[i]);
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
7.数组的高级高作
1.二分查找
前提,数组必须是有序
步骤
1.定义两个变量,从数组的左右端开始
2.循环查找min<max
3.计算出mid中间数的值
4.判断mid是否是要寻找的值,如果是返回索引
5.如果值在左半边,右边max=mid-1,继续循环下去
6.如果在右边min=mid+1
7.当min>max表示不存在返回-1
public static int getnumber(int[] arr, int n) {
//定义最小值在最左边
int min = 0;
//定义最大值在最右边
int max = arr.length - 1;
while (min <= max) {
//中间值
int mid = (min + max) / 2;
//如果mid对应元素大于n
if (arr[mid] > n) {
max = mid - 1;
//如果mid对应元素小于n
} else if (arr[mid] < n) {
min = mid + 1;
} else {
//等于n
return mid;
}
}
return -1;
}
2.冒泡排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j+1] <arr[j]) {
int tmep = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmep;
}
}
}
3.Arryas
int[] arr = {-1, 6, 8, 2, 11};
//把int类型转换成字符串
String s = Arrays.toString(arr);
//排序
Arrays.sort(arr);
//二分查找
int i = Arrays.binarySearch(arr, 6);
System.out.println(i);
8.递归
递归就是方法中调用方法本身
public static int gejc(int n) {
if (n == 1) {
return 1;
} else {
return n * gejc(n - 1);
}
}
9.异常
异常就是用来描述代码中出现的问题
语法错误不是异常
当程序出现异常,首先判断有没有自定义异常,没有就返回给调用的对象.有异常后就在哪里停止代码
运行时异常可以省略
编译时异常不能省略
1.throws
格式:throws 异常类型
l编译时异常因为在编译时就会检查,所以必须要写在方法后面进行显示声明
l运行时异常因为在运行时才会发生,所以在方法后面可以不写
2.throw和throws区别
3.try-catch
执行顺序:
1.如果try中没有问题 按顺序执行,不会执行catch
2.如果try中有问题, 跳转到catch中,有异常的代码下面不执行,然后执行异常外的代码
3.如果没有正确处理异常,那么报错的代码后就不执行,默认方式
4.同时出现多个异常,多个catch,异常存在子父类关系,父类一定要写在下面!
针对不同的异常可能有多种处理方法
4.throwable
try {
int [] arr={1,2};
System.out.println(arr[10]);
} catch (Exception e) {
//返回throwable的消息字符串
String message = e.getMessage();
System.out.println(message);
String s = e.toString();
System.out.println(s);
e.printStackTrace();//红色字体
}
}
5.自定义异常
10日期类
1秒=1000ms
计算机时间原点是1970年1月1日00:00:00
1.DATE
创建一个时间对象
①Date date1=new Date();
//里面存放的是毫秒对象L
包含时区
②Date date1=new Date(0L);
date.getTime()//获取当前时间对象的毫秒
System.currntTimeMiles()//获取当前时间对象的毫秒
date.setTime()//设置时间也是毫秒L
date.setTime(0L)//把时间设置到时间原点
2.SimpleDateFormat
//创建一个时间对象
Date date=new Date();
//定义一个格式 年月日时分秒 yMd Hms
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yy-MM-dd HH:ss:mm");
//给日期设置指定的格式
String format = simpleDateFormat.format(date);
//输出指定格式的
System.out.println(format);
//把字符串类型时间格式转化成时间
String str="2021-12-12";
//格式必须和字符串一直
SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yy-MM-dd");
//把字符串类型转成时间类型
Date parse = simpleDateFormat1.parse(str);
//输出
System.out.println(parse);
3.localdatetime
//获取当前时间对象
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//获取输入时间的对象
LocalDateTime locadatetime = LocalDateTime.of(2022, 8, 12, 12, 12, 12);
System.out.println(of);
localdatetime.puls(1)//加减
localDateTime.minusHours(1);//向前后移动
localDateTime.withYear(1);//修改时间
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 11, 11, 11);
localDateTime.getYear();
localDateTime.getMonth();
localDateTime.getDayOfMonth();
localDateTime.getDayOfYear();//一年中的第几天
localDateTime.getDayOfWeek();//一个星期的第几天
localDateTime.getMinute();
localDateTime.getMinute();
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 11, 11, 11);
//转换成localdate对象
LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime();
LocalDateTime localDateTime2 = LocalDateTime.now();
//创建一个格式化器件
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY年MM月dd日");
//格式化当前时间
String format = dateTimeFormatter.format(localDateTime2);
System.out.println(format);
//解析时间对象
String S="2021年12月12日 12:12:12";
//创建指定格式
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//解析
LocalDateTime parse = LocalDateTime.parse(S, dateTimeFormatter1);
//parse.plusDays(1);时间可以加减
//转转换成指定对象
String format1 = dateTimeFormatter1.format(parse);
System.out.println(format1);
Period计算localdate类型时间对象时间间隔
LocalDate localDate = LocalDate.now();
LocalDate localDate1 = LocalDate.of(2021, 12, 12);
Period between = Period.between(localDate, localDate1);
//获取年
between.getYears();
//获取月
between.getMonths();
//获取日
between.getDays();
//获取总月数
between.toTotalMonths();
Duration:计算localdatetime类型的时间对象时间间隔
LocalDateTime localDateTime = LocalDateTime.of(2021, 12, 12, 12, 12, 12);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 12, 12, 12, 12, 12);
Duration between1 = Duration.between(localDateTime, localDateTime2);
//获取时间间隔的秒
between1.toSeconds();
//获取间隔的毫秒
between1.toMillis();
4.Calender
//获取获得一个日历对象 Calendar calendar = Calendar.getInstance(); //getTime() 得到当前日期对象 Date time = calendar.getTime(); // setTime() 使用给定的 Date 设置此 Calendar 的时间 calendar.setTime(time); //传入field字段获得给定日历字段的值 calendar.get() System.out.println(calendar.get(calendar.YEAR)+"年"); System.out.println(calendar.get(calendar.MONTH)+"月"); System.out.println(calendar.get(calendar.DAY_OF_MONTH)+"日"); System.out.println(calendar.get(calendar.HOUR)+"时"); System.out.println(calendar.get(calendar.HOUR_OF_DAY)+"时"); System.out.println(calendar.get(calendar.MINUTE)+"分"); System.out.println(calendar.get(calendar.MILLISECOND)+"秒"); System.out.println("一年中的多少天"+calendar.get(calendar.DAY_OF_YEAR)); System.out.println("周几"+(calendar.get(calendar.DAY_OF_WEEK)-1)); System.out.println("今天是这个月的第几周"+calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周");