Java中的常用类

常用类

一、object类

1.1简介

Object类是所有类的直接或间接父类,位于继承树的最顶层。

任何类,如果没有明确书写extends继承某个类,都默认直接继承Object类,否则为间接继承。

Object类中所定义的方法,是所有对象都具备的方法。

Object类型可以存储任何对象

  • 作为参数,可接收任何对象;
  • 作为返回值,可返回任何对象。

2.2常用方法

2.2.1hashCode方法
  • 方法定义:public int hashCode()
  • 返回该对象的哈希码值
2.2.2getClass方法
  • 方法定义public final Class<?> getClass()
  • 返回此 Object 的运行时类
2.2.3toString方法
  • 方法定义:public String toString()
  • 直接打印是地址 重写后显示你想要的内容
  • 返回一个对象的字符串表示形式
2.2.4equals方法

方法定义:public boolean equals(Object obj)

比较两个对象的地址是否相同

==equals有什么区别

  • ==比较的是地址 一般情况下 用于基本数据类型比较,基本数据类型储存在栈内存当中
  • equals 默认也是比较地址 一般用于引用类型数据比较
2.2.5finalize()方法
  • 方法定义:protected void finalize()

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列

二、包装类

2.1简介

  • 包装类:一种可以将基本数据类型数据当成对象使用的技术

  • 8种基本数据类型和其包装类对应关系如下:

    1. byte -- Byte
    2. short -- Short
    3. int -- Integer
    4. long -- Long
    5. float -- Float
    6. double -- Double
    7. char -- Character
    8. boolean -- Boolean

2.2、装修和拆箱

  • 装箱:基本数据类型转换成包装类;

  • 拆箱:包装类转换成基本数据类型。

手动拆装箱

/*
 * 手动装箱
 * 	基本数据类型--->包装类
 * */
int a = 10;
Integer i  = Integer.valueOf(a);
System.out.println(i);
/*
 * 手动拆箱
 * 	包装了--->基本数据类型
 * */
int b = i.intValue();
System.out.println(b);
  • JDK自从1.5(5.0)版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。
/*
 * 自动装箱 JDK1.5
 * */
int a = 10;
Integer i1 = a;
/*
 * 自动拆箱 JDK1.5
 * */
int c = i1;

2.3基本数据类型和字符串转换

/*
 * 基本数据类型和字符串转换
 * 	基本数据类型--->字符串
 * 		int x = 10;  "10"
 * 		x + "";
 * 	字符串--->基本数据类型
 * 		String str = "10";
 * */
int x = 10;
String s = x + "";

/*
 * 字符串--->基本数据类型
 * String--->int
 * */
String str = "100";
x = Integer.parseInt(str);
System.out.println(x);

三、String类

Java程序可以方便的处理字符串类型的数据信息,而这都要归功于Java中String类提供的强大功能。
String类描述的是文本字符串序列,即多个字符组成的一串数据。
String类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现

字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。

3.1常用方法

3.1.1判断功能
  • boolean equals(Object obj)
  • boolean equalsIgnoreCase(String str)
  • boolean contains(String str)
  • boolean startsWith(String str)
  • boolean endsWith(String str)
  • boolean isEmpty()
String str1 = new String("abcd");
/*
 * equals() 判断字符串的内容是否相等
 * */
System.out.println(str1.equals("abcd"));
//equalsIgnoreCase() 忽略大小写判断内容是否相等
System.out.println(str1.equalsIgnoreCase("ABCD"));
System.out.println(str1.contains("abc"));
//startsWith()
System.out.println(str1.startsWith("abc"));
System.out.println(str1.startsWith("bc"));
//endsWith()
System.out.println(str1.endsWith("bc"));
System.out.println(str1.endsWith("bcd"));
//isEmpty()
System.out.println(str1.isEmpty());
System.out.println("".isEmpty());
3.1.2获取功能
  • int length()
  • char charAt(int index)
  • int indexOf(int ch)
  • int indexOf(String str)
  • int indexOf(int ch, int fromIndex)
  • int indexOf(String str, int fromIndex)
  • String substring(int start)
  • String substring(int start, int end)
//length()
System.out.println("abcde".length());
//contains(str)判断字符v换是否拥有指定的字符 返回boolean
System.out.println("qwerty".contains("a"));
//charAt()
//charAt(index)获取字符串指定下标索引位置的元素
System.out.println("abcdef".charAt(2));
//indexOf() 返回字符首次出现的索引,如果没有被判断的字符,返回-1
System.out.println("abcdabc".indexOf('e'));
//判断字符串首次出现的索引
System.out.println("abcdabc".indexOf("bcd"));
System.out.println("abcdabc".indexOf('c'));
System.out.println("abcdabc".indexOf('c', 3));
//获取字串
System.out.println("abcdabc".substring(5));
//获取字串,但是不包含end
System.out.println("abcdabc".substring(1, 2));
3.1.3转换功能
  • byte[] getBytes()
  • char[] toCharArray()
  • static String valueOf(char[] chs)
  • static String valueOf(int i)
  • String toLowerCase()
  • String toUpperCase()
  • String concat(String str)
/*
 * 字符串的转换功能
 * */
String str = "hello";
//getBytes()转换成byte类型的数组
byte[] arr = str.getBytes();
System.out.println(Arrays.toString(arr));

//toCharArray()转换成char类型的数组
char[] arrChar = str.toCharArray();
System.out.println(Arrays.toString(arrChar));

//大小写转换
System.out.println(str.toUpperCase());
System.out.println("ABCD".toLowerCase());
/*
 * 字符串连接---生成了新的字符串
 * */
System.out.println(str.concat("****"));
System.out.println(str);
//基本数据类型--->字符串
System.out.println(String.valueOf(1000));
System.out.println(String.valueOf(100.56F));
3.1.4替换功能
  • String replace(char old, char new)
  • String replace(String old, String new)
/*
 * 替换功能---生成了新的字符串
 * */
String str = "hello 123";
System.out.println(str.replace('l', '*'));
System.out.println(str);
System.out.println(str.replace("ll", "$"));
System.out.println(str);
3.1.5去空格功能

trim()

/*
 * 去除空格的功能
 * trim()---去除字符串首位的空格
 * */
String str1 = " ab c ";
System.out.println(str1.length());
String str2 = str1.trim();
System.out.println(str2);
System.out.println(str2.length());
3.1.6按字典比较
  • int compareTo(String str)
  • int compareToIgnoreCase(String str)
System.out.println("a".compareTo("b"));
System.out.println("a".compareTo("a"));
System.out.println("b".compareTo("a"));
System.out.println("abc".compareTo("abd"));
System.out.println("abcd".compareTo("abdd"));

可变字符串

1.1

概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串

  • StringBuilder:可变长字符串,jdk5.0提供,运行效率快,线程不安全
  • StringBuffer:可变长字符串,JDK1.0提供,运行效率满线程安全

StringBuffer与StringBuilder用法一致

1.2常用方法
  • append(String str);在末尾添加
  • insert(index,String str);在指定下标位置添加字符串
  • sb.delete(index,index);删除从指定位置开始在指定位置结束的子字符串
  • reverse();将字符串内容反转
  • toString();将StringBuffer转换成String
public class Demo01 {
    public static void main(String[] args) {
        //创建StringBuffer对象
        //StringBuffer sb = new StringBuffer();//等效于String sb="";
        StringBuffer sb = new StringBuffer("aaa");

        //常用方法
        //在末尾添加字符串
        sb.append("bbb");
        System.out.println(sb);

        //在指定下标位置添加字符串
        sb.insert(3,",");
        System.out.println(sb);

        //删除从指定位置开始在指定位置结束的子字符串
        sb.delete(3,4);
        System.out.println(sb);

        //将字符串内容反转
        sb.reverse();
        System.out.println(sb);

        //将StringBuffer转换成String
        String s=sb.toString();
        System.out.println(s);
        System.out.println(s.getClass());
    }
}
1.4String StringBuffer StringBuilder异同
  • 相同:三者都可以表示字符串
  • 不同:
    1. String类是字符串常量,一旦定义不能被改变
    2. StingBuffer StringBuilder 是可变字符串 自带缓冲区 默认是16个字节
    3. StingBuffer 线程安全但效率低 StringBuilder 线程不安全但效率高
  • 总结:
    • 在大量字符串拼接时使用StringBuilder和StingBuffer
    • 不考虑线程安全情况下使用StringBuilder
    • 考虑线程安全情况下使用StringBuffer
package StringBuChong;

public class Demo02 {
    public static void main(String[] args) {

        //需求:定义一个字符串a在这个字符串后面添加100w个比较运行时间
        //记录开始时间
        //currentTimeMillis 获取当前系统的一个时间毫秒数
        
        
  /*
  		//String运行时间
        long start = System.currentTimeMillis();
        String s="a";

        for (int i = 0; i < 1000000; i++) {
            s+="a";
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start));//耗时92055毫秒
*/
        

/*
		//tringBuffer运行时间
        long start = System.currentTimeMillis();
        StringBuffer sb= new StringBuffer("a");
        for (int i = 0; i < 1000000; i++) {
           sb.append("a");
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start));//耗时27毫秒

*/

		//StringBuilder运行时间
        long start = System.currentTimeMillis();
        StringBuilder sb= new StringBuilder("a");
        for (int i = 0; i < 1000000; i++) {
            sb.append("a");
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start));//耗时17毫秒

    }
}

四、时间和日期类

4.1、Date

表示特定的瞬间,精确到毫秒。要注意该类中很多方法已经过时。

构造方法

  • Date():分配Date对象并用当前时间初始化此对象,以表示分配它的时间(精确到毫秒)
  • Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日 00:00:00 GMT)以来的指定毫秒数。

常用方法

  • boolean after(Date anotherDate):测试此日期是否在指定日期之后
  • boolean before(Date anotherDate):测试此日期是否在指定日期之前
  • int compareTo(Date anotherDate):比较两个日期的顺序
  • long getTime():返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数
  • void setTime(long time):以long类型参数time设置此Date对象,以表示1970年 1 月 1 日 00:00:00 GMT以后指定毫秒的时间点
  • String toString():默认实现是把此Date对象转换为以下形式的字符串dow mon dd hh:mm:ss zzz yyyy
    • dow是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)
    • mon是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
    • dd是一月中的某一天(01 至 31),显示为两位十进制数
    • hh是一天中的小时(00 至 23),显示为两位十进制数
    • mm是小时中的分钟(00 至 59),显示为两位十进制数
    • ss是分钟中的秒数(00 至 61),显示为两位十进制数
    • zzz是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符
    • yyyy是年份,显示为 4 位十进制数
import java.util.Date;

public class DateDemo01 {
    public static void main(String[] args) {

/*
        //创建date对象
        Date date = new Date();//使用无参构造


        //表示系统当前时间
        System.out.println(date);
        */

/*
        //表示当前指定时间
        */
/*
        * year:从1900年开始
        * month:从0-11为止
        * date:天数
        * *//*

        //有参构造表示 显示指定时间
        Date date = new Date(2022 - 1900, 10 - 1, 26);
        System.out.println(date);
*/

        //Date的常用方法
        Date date = new Date();
        System.out.println(date.getYear()+1900);
        System.out.println(date.getMonth()+1);
        System.out.println(date.getDate());
        System.out.println(date.getHours());
        System.out.println(date.getMinutes());
        System.out.println(date.getSeconds());

        //返回date所对应的毫秒数(时间戳)1970开始
        System.out.println(date.getTime()/1000/60/60/24/365);

        //计算自己活了多少天
        Date date1 = new Date(2000-1900,12-1,9);

        //判断date是否在date1后
        System.out.println(date.after(date1));
        System.out.println(date.before(date1));

        long day=((date.getTime()-date1.getTime())/1000/60/60/24);
        System.out.println(day);
    }
}
4.2SimpleDateFormat
  • 以指定格式输出日期和时间。

  • Date类型与字符串转换:

    • Date转换成字符串:format()

    • 字符串转为Dateparse()

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
/*
        //将日期类型格式化字符串
        //创建日期格式化对象 pattern:表示格式化的格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //创建时间对象
        Date date = new Date();
        System.out.println(sdf.format(date));
      */


        //将字符串类型转换成时间类型
        String time = "2022-10-26 14:45:20";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
           Date d= sdf.parse(time);
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
4.3Calendar

单独获取当前日期和时间中的年月日和星期。

获取Calendar对象:Calendar.getInstance()

常用字段:

  • Calendar.YEAR年份
  • Calendar.MONTH月份,从0开始
  • Calendar.DATE日期
  • Calendar.DAY_OF_MONTH日期,和Calendar.DATE完全相同
  • Calendar.HOUR12小时制的小时数
  • Calendar.HOUR_OF_DAY24小时制的小时数
  • Calendar.MINUTE分钟
  • Calendar.SECOND
  • Calendar.DAY_OF_WEEK星期几

常用方法:

  • set()
  • get()
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //创建Calendar 类对象  单例模式

        //表示系统当前时间
        Calendar c = Calendar.getInstance();

        //get参数表示指定的字段
        System.out.println(c.get(Calendar.YEAR));
        //month
        System.out.println(c.get(Calendar.MONTH)+1);
        System.out.println(c.get(Calendar.DAY_OF_YEAR));
        System.out.println(c.get(Calendar.DAY_OF_MONTH));
        System.out.println(c.get(Calendar.DAY_OF_WEEK));
        System.out.println(c.get(Calendar.HOUR_OF_DAY));
        System.out.println(c.get(Calendar.MINUTE));
        System.out.println(c.get(Calendar.SECOND));

        //set方法
        c.set(2022,10-1,26);//设置-1 获取+1
        //参数1:表示指定字段   参数2:字段值
        c.set(Calendar.MONTH,10-1);
        System.out.println(c.get(Calendar.MONTH));
        System.out.println(c.get(Calendar.DAY_OF_MONTH));

        //add方法
        //参数1:表示指定的字段   参数2:增加或减少值
        Calendar c2 = Calendar.getInstance();
        c2.add(Calendar.MONTH,+5);
        System.out.println(c2.get(Calendar.MONTH)+1);
        System.out.println(c2.get(Calendar.DAY_OF_MONTH));
    }
}

案例:

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        System.out.println("周一\t周二\t周三\t周四\t周五\t周六\t周日");
        // 设置当前月份为10月
        c.set(2022,10-1,1);
        int weekDay = c.get(Calendar.DAY_OF_WEEK);

        for (int i = 1; i <= weekDay-2; i++) {
            System.out.print("\t");
            }
        int month =c.get(Calendar.MONTH);
        while (month==9){
            int day = c.get(Calendar.DATE);
            System.out.print(day+"\t");
            //重新获取星期几
           weekDay = c.get(Calendar.DAY_OF_WEEK);
           if (weekDay==Calendar.SUNDAY){
               System.out.println();
           }
           //每天的循环次数+1
            c.add(Calendar.DATE,1);
           //重新获取月份
            month = c.get(Calendar.MONTH);
        }
    }
}

五、数学相关类

5.1、Math

位置

  • java.lang包中

常量:

  • PI圆周率

常用方法:

  • ramdom():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
System.out.println(Math.random());
System.out.println("===============================================");
//0~9
for(int i = 0; i < 10; i++) {
    System.out.println((int)(Math.random()*10));
}
System.out.println("===============================================");
//1~10
for(int i = 0; i < 10; i++) {
    System.out.println((int)(Math.random()*10) + 1);
}
//1~4
System.out.println("===============================================");
for(int i = 0; i < 10; i++) {
    System.out.println(((int)(Math.random()*10))%4 + 1);
}

5.2、BigDecimal

位置

  • java.lang包中

**作用:**精确计算浮点整数

常用方法:

  • add(BigDecimal augend)
  • subtract(BigDecimal subtrahend)
  • multiply(BigDecimal multiplicand)
  • divide(BigDecimal divisor)
public class MyTest2 {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal(10);
        BigDecimal num2 = new BigDecimal(9.5);

        System.out.println(num1.add(num2));
        System.out.println(num1.subtract(num2));
        System.out.println(num1.multiply(num2));
        System.out.println(num1.divide(num2));
    }
}

进行除法运算时,如果不能准确的计算出结果时需要指定保留的位数和取舍方式。

divide(BigDecimal divisor, int scale, int roundingMode)

  • scale:指定精确到小数点后几位
  • mode:指定小数部分的取舍模式,通常采用四舍五入的模式,取值为BigDecimal.ROUND_HALF_UP
public class MyTest2 {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal(10);
        BigDecimal num2 = new BigDecimal(9.5);

        System.out.println(num1.add(num2));
        System.out.println(num1.subtract(num2));
        System.out.println(num1.multiply(num2));
        System.out.println(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值