Java中的常用类

Math类

// Math.abs():取绝对值
System.out.println(Math.abs(-88)); //88
// Math.random(): 取[0,1)之间的随机数
System.out.println((int)( Math.random()*100) + 1);
//Math.ceil(double a): 取大于此数的最小整数,返回值为double类型
System.out.println(Math.ceil(85.5)); //86
System.out.println(Math.ceil(-33.3)); //-33
//Math.floor(double a): 取小于此数的最大整数,返回值为double类型
System.out.println(Math.floor(45.36)); //45
System.out.println(Math.floor(-5.54)); //-6
//Math.max(int a, int b)
System.out.println(Math.max(6, 9));
//Math.round(float a):按四舍五入返回最接近参数的int
System.out.println(Math.round(6.67F));
System.out.println(Math.round(6.33F));

System类

System.exit(int status): 终止当前运行的Java虚拟机,非零表示异常终止

System.out.println("开始");
//终止当前运行的java虚拟机
System.exit(0);
System.out.println("结束");
//输出:开始

System.currentTimeMillis(): 返回当前时间(以毫秒为单位)

System.out.println(System.currentTimeMillis()
                   *1.0/1000/60/60/24/365 + "年");
//51.639367204274485年

System.currentTimeMillis()可以用于计算程序的执行时间:

long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
    System.out.println(i);
}
long end = System.currentTimeMillis();
long time = end - start;
System.out.println("共耗时" + time + "毫秒"); //共耗时49毫秒

Object类

Object的toString方法

Object类中默认的toString方法:返回类的包路径+@+一串数字

Student s = new Student();
s.setName("林青霞");
s.setAge(20);
System.out.println(s); //com.itheima.Student@1b6d3586
System.out.println(s.toString()); //com.itheima.Student@1b6d3586

在子类Student中重写toString方法:

@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

再次输出Student类的对象

Student s = new Student();
s.setName("林青霞");
s.setAge(20);
System.out.println(s); //Student{name='林青霞', age=20}
System.out.println(s.toString()); //Student{name='林青霞', age=20}

Object类的equals方法

Object类中的equals方法默认比较的是地址:

Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(30);

Student s2 = new Student();
s2.setName("林青霞");
s2.setAge(30);

System.out.println(s1 == s2); //false

System.out.println(s1.equals(s2)); //false: 比较的是s1和s2地址值,由于s1和s2都是new出来的,地址值不相同

要想比较s1和s2中的属性值,要在子类中重写equals方法:

在子类中自动生成equals方法

@Overridepublic boolean equals(Object o) {    /*        this --- s1        o    --- s2     */    //比较地址是否相同,如果相同,直接返回true    if (this == o) return true;    //判断参数是否为null    //判断两个对象是否来自同一个类    if (o == null || getClass() != o.getClass()) return false;    //向下转型    Student student = (Student) o;    //比较年龄是否相同    if (age != student.age) return false;    //比较姓名内容是否相同    return name != null ? name.equals(student.name) : student.name == null;}

再次测试equals方法:

Student s1 = new Student();s1.setName("林青霞");s1.setAge(30);Student s2 = new Student();s2.setName("林青霞");s2.setAge(30);System.out.println(s1 == s2); //falseSystem.out.println(s1.equals(s2)); //true

Arrays类

Arrays.toString(int[] a): 返回指定数组的内容的字符串表示形式

Arrays.sort(int[] a): 按照数字顺序排列指定的数组

//定义一个数组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]

Integer类

判断一个数据是否在int的范围内?

System.out.println(Integer.MAX_VALUE); //2147483647System.out.println(Integer.MIN_VALUE); //-2147483648

Integer对象创建方式

//方式1:根据构造方法创建Integer对象Integer i1 = new Integer(100); //100Integer i2 = new Integer("100"); //100Integer i3 = new Integer("abc"); //错误 NumberFormatException//方式2:静态方法获得对象Integer i1 = Integer.valueOf(100); //100Integer i2 = Integer.valueOf("100"); //100Integer i3 = Integer.valueOf("aaa"); //错误 NumberFormatException

int和String的相互转换

int — String

int num = 100;//方式1String s1 = "" + num;System.out.println(s1); //100//方式2String s2 = String.valueOf(num); //100System.out.println(s2);

String — int

String s = "100";//方式1//String --- Integer --- intInteger i = Integer.valueOf(s);int x = i.intValue();System.out.println(x);//方式2int y = Integer.parseInt(s);System.out.println(y);

字符串中的数据排序

需求:有一个字符串: “91 27 46 38 50”,请写程序实现最终输出结果是:“27 38 46 50 91”

public static void main(String[] args) {    //定义一个字符串    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++) {        int num = Integer.parseInt(s1[i]);        arr[i] = num;    }    Arrays.sort(arr);    System.out.println("排序后:" + ArrayToString(arr));}public static String ArrayToString(int[] arr) {    StringBuilder sb = new StringBuilder();    for (int i = 0; i < arr.length; i++) {        if (i == arr.length-1) {            sb.append(arr[i]);        } else {            sb.append(arr[i]).append(" ");        }    }    return sb.toString();}

自动装箱和拆箱

装箱

装箱:把基本数据类型转换为对应的包装类类型

Integer i = Integer.valueOf(100);

自动装箱:

Integer ii = 100; //底层自动调用了Integer.valueOf(100);

拆箱

拆箱:把包装类类型转换为对应的基本数据类型

ii = ii.intValue() + 200; //自动装箱

自动拆箱:

ii += 200; //内部隐含了自动拆箱和自动装箱

拆箱之前要做判断

Integer iii = null;iii += 300; //NullPointerException,iii为null,null调方法:空指针异常

所以在操作之前,应该加一个检查数据是否为空的操作:

Integer iii = null;    if (iii != null) {        iii += 300;  //NullPointerException    }

Date类

创建Date对象的方式

// Date(): 分配一个Date对象,并初始化,代表它被分配的时间,精确到毫秒Date d1 = new Date();System.out.println(d1); //Mon Aug 09 17:29:55 CST 2021// Date(long date): 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数long date = 1000*60*60;Date d2 = new Date(date);System.out.println(d2); //Thu Jan 01 09:00:00 CST 1970:时区问题,所以是9点而不是1点

Date类的常用方法

public long getTime(): 获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值

//创建日期对象Date d = new Date();System.out.println(d.getTime());System.out.println(d.getTime()*1.0/1000/60/60/24/365 + "年");

public void setTime(long time): 设置时间,给的是毫秒值

System.out.println(d); //Mon Aug 09 17:36:37 CST 2021long time = System.currentTimeMillis();d.setTime(time);System.out.println(d); //Mon Aug 09 17:36:38 CST 2021

SimpleDateFormat类

SimpleDateFormat格式化和解析日期

1.格式化(从Date到String)

format(Date date): 将日期格式化成日期/时间字符串

Date d = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String s = sdf.format(d);System.out.println(s); //2021-08-09 17:42:16

2.解析(从String到Date)

parse(String source)

String ss = "2018-08-09 11:11:11";SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");Date dd = sdf.parse(s);System.out.println(dd); //Mon Aug 09 17:42:16 CST 2021

日期工具类

需求:定义一个日期工具类(DateUtils),包含两个方法:把日期转换为指定格式的字符串;把字符串解析为指定格式的日期,然后定义一个测试类(DateDemo),测试日期工具类的方法

DateUtils:

public class DateUtils {    private DateUtils() {}    public static String DateToString(Date date, String sdfString) {        SimpleDateFormat sdf = new SimpleDateFormat(sdfString);        String s = sdf.format(date);        return s;    }    public static Date StringToDate(String s, String sdfString) throws ParseException {        SimpleDateFormat sdf = new SimpleDateFormat(sdfString);        Date date = sdf.parse(s);        return date;    }}

DateDemo:

public class DateDemo {    public static void main(String[] args) throws ParseException {        Date d = new Date();        String s1 = DateUtils.DateToString(d, "yyyy-MM-dd HH:mm:ss");        String s2 = DateUtils.DateToString(d, "yyyy-MM-dd");        String s3 = DateUtils.DateToString(d, "HH:mm:ss");        System.out.println(s3);        Date date = DateUtils.StringToDate(s1, "yyyy-MM-dd HH:mm:ss");        System.out.println(date);    }}

Calendar类

public int get(int field): 返回给定日历字段的值

public abstract void add(int field, int amount): 根据日历的规则,将指定的时间量添加或减去给定的日历字段

public final void set(int year, int month, int date): 设置当前日历的年月日

创建对象

//获取对象Calendar c = Calendar.getInstance(); //多态的形式System.out.println(c); //java.util.GregorianCalendar[time=1628502485406,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=7,WEEK_OF_YEAR=33,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=221,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=48,SECOND=5,MILLISECOND=406,ZONE_OFFSET=28800000,DST_OFFSET=0]

add方法

需求1:三年前的今天

c.add(Calendar.YEAR, -3);    int year = c.get(Calendar.YEAR);    int month = c.get(Calendar.MONTH) + 1; //month是从0开始的    int date = c.get(Calendar.DATE);    System.out.println(year + "年" + month + "月" + date + "日");//2018年8月9日

需求2:十年后的五天前

c.add(Calendar.YEAR, 10);    c.add(Calendar.DATE, -5);    int year = c.get(Calendar.YEAR);    int month = c.get(Calendar.MONTH) + 1; //month是从0开始的    int date = c.get(Calendar.DATE);    System.out.println(year + "年" + month + "月" + date + "日");//2031年8月4日

二月天

需求:获取任意一年的二月有多少填

思路:

1.键盘录入任意的年份

2.设置日历对象的年、月、日

​ 年:来自于键盘的输入

​ 月:设置为3月,月份是从0开始的,所以设置的是2

​ 日:设置为1日

3.3月1日往前推一天,就是2月的最后一天

4.获取这一天的输出即可

Scanner sc = new Scanner(System.in);System.out.println("请输入年份:");int year = sc.nextInt(); //2008Calendar c = Calendar.getInstance();c.set(year, 2, 1);c.add(Calendar.DATE, -1);int days = c.get(Calendar.DATE);System.out.println(year + "年的二月有" + days + "天"); //2008年的二月有29天
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值