目录
1.Math类
1.1概述
- Math包含执行基本数字运算的方法
- Math类没有构造方法,但是由于类的成员都是静态的,通过类名就可以直接调用
1.2常用方法
MathDemo.java
package com.math;
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.abs(88));//88
System.out.println(Math.abs(-88));//88
System.out.println(Math.ceil(12.34));//13.0
System.out.println(Math.ceil(12.56));//13.0
System.out.println(Math.floor(12.34));//12.0
System.out.println(Math.floor(12.56));//12.0
System.out.println(Math.round(12.34F));//12
System.out.println(Math.round(12.56F));//13
System.out.println(Math.max(66,88));//88
System.out.println(Math.min(66,88));//66
System.out.println(Math.pow(2.0,3.0));//8.0
System.out.println(Math.random());//随机数产生范围:[0.0,1.0)
System.out.println((int)(Math.random()*100)+1);//随机数产生范围:[1,100]
}
}
2.System类
2.1概述
System包含几个有用的类字段和方法,它不能被实例化。
2.2常用方法
SystemDemo.java
package com.system;
public class SystemDemo {
public static void main(String[] args) {
System.out.println("开始");
System.exit(0);
System.out.println("结束");
}
}
package com.system;
public class SystemDemo {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());//1651058383600
System.out.println(System.currentTimeMillis()*1.0/1000/3600/24/365+"年");//52.35471789700659年
long start=System.currentTimeMillis();
for(int i=0;i<10000;i++){
System.out.println(i);
}
long end=System.currentTimeMillis();
System.out.println("共耗时:"+(end-start)+"毫秒");//共耗时:91毫秒
}
}
3.Object
- Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类
- 构造方法: public Object()
- 面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?
- 因为它们的顶级父类只有无参构造方法
- 因为它们的顶级父类只有无参构造方法
3.1toString方法
重写前
ObjectDemo.java
package com.object;
//看方法的源码,选中方法,按下Ctrl+B
public class ObjectDemo {
public static void main(String[] args) {
Student s = new Student();
s.setName("林青霞");
s.setAge(30);
System.out.println(s);//com.Object.Student@2133c8f8
System.out.println(s.toString());//com.Object.Student@2133c8f8
/*
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
*/
/*
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
*/
/*
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*/
}
}
重写后
Student.java
//建议所有子类重写toString方法,Alt+Insert可以自动生成
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
ObjectDemo.java
System.out.println(s);//Student{name='林青霞', age=30}
System.out.println(s.toString());//Student{name='林青霞', age=30}
3.2equals方法
重写前
ObjectDemo2.java
package com.object;
public class ObjectDemo2 {
public static void main(String[] args) {
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("林青霞", 30);
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//false
/*
public boolean equals(Object obj) {
//this---s1
//this---s2
return (this == obj);
}
*/
}
}
重写后
Student.java
//比较对象的内容需要重写equals方法,Alt+Insert可以自动生成
@Override
public boolean equals(Object o) {
//this---s1
//o---s2
//比较地址是否相同
if (this == o) return true;
//判断参数是否为null 判断两个对象是否来自于同一个类
if (o == null || getClass() != o.getClass()) return false;
//向下转型
Student student = (Student) o;
//比较年龄是否相同
if (age != student.age) return false;
//比较姓名内容是否相同(字符串的equals方法默认比较的是对象的内容)
return name != null ? name.equals(student.name) : student.name == null;
}
ObjectDemo2.java
System.out.println(s1.equals(s2));//true
常用方法
4.Arrays
4.1冒泡排序
- 如果有n个数据进行排序,总共需要比较n-1次。
- 每一次比较完毕,下一次的比较就会少一个数据参与。
ArrayDemo.java
package com.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int arr[]={24,68,45,79,34};
System.out.println("排序前:"+arrayToString(arr));
/*
for (int i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第一次排序后:"+arrayToString(arr));
for (int i=0;i<arr.length-1-1;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第二次排序后:"+arrayToString(arr));
for (int i=0;i<arr.length-1-2;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第三次排序后:"+arrayToString(arr));
for (int i=0;i<arr.length-1-3;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第四次排序后:"+arrayToString(arr));
*/
for(int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("排序后:"+arrayToString(arr));
}
//把数组中的元素按照指定的规则组成一个字符串:[元素1,元素2,...]
public static String arrayToString(int arr[]){
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i=0;i<arr.length;i++){
sb.append(arr[i]);
if(i==arr.length-1){
sb.append("]");
}else{
sb.append(",");
}
}
String s=sb.toString();
return s;
}
}
4.2概述和常用方法
Arrays类包含用于操作数组的各种方法
工具类的设计思想:
构造方法用private修饰(防止外界创建对象)
成员用public static修饰(使用类名可以直接调用)
ArrayDemo2.java
package com.arrays;
import java.util.Arrays;
public class ArrayDemo2 {
public static void main(String[] args) {
//定义一个数组
int arr[]={24,69,80,57,13};
System.out.println("排序前:"+ Arrays.toString(arr));//排序前:[24, 69, 80, 57, 13]
Arrays.sort(arr);
System.out.println("排序后:"+ Arrays.toString(arr));//排序后:[13, 24, 57, 69, 80]
}
}
5.基本类型包装类
5.1概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
常用的操作之一:用于基本数据类型与字符串之间的转换。
5.2Integer类的概述和使用
Integer:包装一个对象中的原始类型int的值
IntegerDemo.java
package com.integer;
public class IntegerDemo {
public static void main(String[] args) {
/*
Integer i1 = new Integer(100);
System.out.println(i1);//100
Integer i2 = new Integer("100");
System.out.println(i2);//100
Integer i3 = new Integer("abc");
System.out.println(i3);//NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
*/
Integer i1=Integer.valueOf(100);
System.out.println(i1);//100
Integer i2 =Integer.valueOf("100");
System.out.println(i2);//100
Integer i3 = Integer.valueOf("abc");
System.out.println(i3);//NumberFormatException
}
}
5.3int和String的相互转换(本小节最常用的操作)
int转换为String
- public static String valueOf(int i)返回 int 参数的字符串表示形式。该方法是String类中的方法。
String转换为int
- public static int parseInt(String s)返回用十进制参数表示的整数值。该方法是Integer类中的方法。
IntegerDemo2.java
package com.integer;
public class IntegerDemo2 {
public static void main(String[] args) {
//int---String
//法一
int num=100;
String s=""+num;
System.out.println(s);//100
//法二 public static String valueOf(int i)返回 int 参数的字符串表示形式。
String s2=String.valueOf(num);
System.out.println(s2);//100
System.out.println("--------");
//String---int
//法一 String---Integer---int public int intValue()以 int 类型返回该 Integer 的值
String ss="100";
Integer i1=Integer.valueOf(ss);//100
int x=i1.intValue();
System.out.println(x);
//法二 public static int parseInt(String s)返回用十进制参数表示的整数值
int y=Integer.parseInt(ss);//100
System.out.println(y);
}
}
5.4字符串中数据排序
package com.integer;
import java.util.Arrays;
public class IntegerDemo3 {
public static void main(String[] args) {
String s = "91 27 46 38 50";//定义一个字符串
String strArray[]=s.split(" ");//拆分字符串,用一个字符串数组接受
int numArray[]=new int[strArray.length];//定义一个整型数组
for (int i=0;i<strArray.length;i++){//把字符串数组中的每一个字符串转换为整数并存储在整型数组中
numArray[i]=Integer.parseInt(strArray[i]);
}
Arrays.sort(numArray);//对整型数组的数进行排序
StringBuilder sb = new StringBuilder();//new一个StringBuilder类型
for (int i=0;i<numArray.length;i++){//拼接字符串
if (i==numArray.length-1){
sb.append(numArray[i]);
}else{
sb.append(numArray[i]).append(" ");
}
}
String result=sb.toString();//StringBuilder类型转换为String类型
System.out.println("result:"+result);//result:27 38 46 50 91
}
}
5.5自动装箱和拆箱
- 装箱:把基本数据类型转换为对应的包装类类型
- 拆箱:把包装类类型转换为对应的基本数据类型
注意:在使用包装类类型的时候,如果做操作,最好先判断是否为null。我们推荐的是,只要是对象,在使用前就必须进行不为null的判断。
IntegerDemo4.java
package com.integer;
public class IntegerDemo4 {
public static void main(String[] args) {
Integer i1=Integer.valueOf(100);//装箱
Integer i2=100;//自动装箱
System.out.println(i1);//100
System.out.println(i2);//100
int i=i1.intValue();//拆箱
int ii=i2;//自动拆箱
System.out.println(i);//100
System.out.println(ii);//100
System.out.println("------");
Integer j=100;//自动装箱
j+=200;//j+200是自动拆箱 j=j+200是自动装箱
System.out.println(j);//300
Integer k=null;
if (k!=null){
k+=200;
}
// k+=200;//NullPointerException
}
}
6.日期类
6.1Date类
概述和构造方法
Date代表了一个特定的时间,精确到毫秒
DateDemo.java
package com.date;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date d1 = new Date();
System.out.println(d1);//Sat Apr 30 21:12:12 CST 2022
long date=3600*1000;//3600000毫秒(一小时)
Date d2 = new Date(date);
System.out.println(d2);//Thu Jan 01 09:00:00 CST 1970(因为中国北京属于东八区,比UTC快八小时,还要加上date一小时)
}
}
常用方法
DateDemo2.java
package com.date;
import java.util.Date;
public class DateDemo2 {
public static void main(String[] args) {
//创建日期对象,并调用方法
Date d=new Date();
System.out.println(d.getTime());//1651324857229
System.out.println(d.getTime()*1.0/1000/3600/24/365+"年");//52.36316923763318年
long time=3600*1000;
d.setTime(time);
System.out.println(d);//Thu Jan 01 09:00:00 CST 1970
long time2=System.currentTimeMillis();//返回以毫秒为单位的当前时间
d.setTime(time2);
System.out.println(d);//Sat Apr 30 21:23:50 CST 2022
}
}
6.2SimpleDateFormat类
概述
SimpleDateFormat是一个具体的类, 用于以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式化和解析。
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从'A'到'Z' 以及从'a'
到'z' 引号的字母被解释为表示日期或时间字符串的组件的模式字母。
常用的模式字母及对应关系如下:
- y 年
- M 月
- d 日(一个月中)
- H 时
- m 分
- s 秒
构造方法
格式化和解析日期
- 格式化(从Date到String)
- public final String format(Date date):将日期格式化成日期/时间字符串
- 解析(从String到Date)
- public Date parse(String source):从给定字符串的开始解析文本以生成日期
- public Date parse(String source):从给定字符串的开始解析文本以生成日期
SimpleDateFormatDemo.java
package com.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//格式化:从Date到String
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat();
String s= sdf.format(d);//将日期格式化成日期字符串
System.out.println(s);//2022/5/3 下午5:43
Date d2=new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s2=sdf2.format(d2);
System.out.println(s2);//2022年05月03日 17:43:03
//从String到Date
System.out.println("--------");
String s3="2022年05月03日 17:35:06";
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d3=sdf3.parse(s3);//将字符串解析成日期
System.out.println(d3);//Tue May 03 17:35:06 CST 2022
String s4="2022-05-03 17:35:06";
//ParseException
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d4=sdf3.parse(s4);
System.out.println(d4);
}
}
6.3案例:日期工具类
DateUtils.java
package com.date.demo1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
private DateUtils(){
}
//定义将日期转换成字符串的函数
public static String dateToString(Date d, String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s=sdf.format(d);
return s;
}
//定义将字符串转换从日期的函数
public static Date stringToDate(String s,String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(s);
return d;
}
}
DateDemo.java
package com.date.demo1;
import java.text.ParseException;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
//创建日期对象,调用方法
Date d = new Date();
String s = DateUtils.dateToString(d, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(s);//2022年05月03日 18:57:44
String s2="2022-05-03 18:53:40";
Date d2 = DateUtils.stringToDate(s2,"yyyy-MM-dd HH:mm:ss");
System.out.println(d2);//Tue May 03 18:53:40 CST 2022
}
}
6.4Calendar类
Calendar为某一时刻和一组日历字段之间的转换提供了一些方法, 并为操作日历字段提供了一些方法
Calendar提供了一个类方法getInstance 用于获取Calendar 对象,其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar. getInstance();
CalendarDemo.java
package com.calendar;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//获取对象
Calendar c = Calendar.getInstance();//多态的形式(左边是父类和对象名,右边是子类对象)
//System.out.println(c);
//public int get(int field) 返回给定日历字段的值。
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//从0开始,需要加1
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2022年5月3日
}
}
常用方法
CalendarDemo2.java
//获取对象
Calendar c = Calendar.getInstance();
//需求1:3年前的今天
c.add(Calendar.YEAR,-3);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2019年5月3日
//需求2:10年后的5天前
c.add(Calendar.YEAR,10);
c.add(Calendar.DATE,-5);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2032年4月28日
//需求3:设置当前日历的年月日
c.set(2022,04,03);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2022年5月3日
案例:二月天
package com.calendar;
import java.util.Calendar;
import java.util.Scanner;
public class CalendarTest {
public static void main(String[] args) {
//键盘录入任意的年份
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
//设置日历对象的年、月、日
Calendar c = Calendar.getInstance();
c.set(year,02,01);//xxxx年3月1日
//3月1日往前推一天,就是2月的最后一天
c.add(Calendar.DATE,-1);
//获取2月份的天数并输出
int date=c.get(Calendar.DATE);
System.out.println(year+"年的2月份有"+date+"天");
}
}