Java常用类

String类:

​ String类是一个字符串类型的常用类,String类型的数值都是用final定义的常量,所以String类型一旦定义赋值就不可以再修改其值了。因此我们可以将String对象称为“不可变对象”。

  • String类为不可变对象
  • String类new生成一个新的对象的值,实际上是重新生成一个存储空间
  • String类通过字面量赋值,所产生的值是存在同一个存储空间的
  • String通过“==”进行比较,实际上是比较两个String类的内存空间是否相同
  • String通过“equal"进行比较,实际上是比较两个String类的字符串值是否相同

1、使用字符串常量直接初始化一个String对象:

2、使用String的构造方法初始化字符串对象,String类的构造方法如下表所示。

image-20210320193911143

public static void main(String[] args) {
//        String s1 = "abc";
        String s2 = "abc";      //通过字面量赋值
//      String s1 = "aaa";
        String s1 = new String("abc");  //通过new创建String对象

        System.out.println(s1 == s2);           //两个都为字面量创建为true,否则则为false
        System.out.println(s1.equals(s2));      //对比两个数据的字符串值,而非两个字符串的地址

     
    }

String类一些常用方法可参考JDK文档:JDK文档链接

image-20210320194005163

StringBuilder类与StringBuffer类:

StringBuilder类与StringBuffer类与之String类对比,StringBuilder类与StringBuffer类可以说是可变字符序列。

  • StringBuilder类:线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。
  • StringBuffer类:线程安全,做线程同步检查, 效率较低。
  • 两者的使用基本上是差不多的

StringBuffer类与String类的区别:

  1. String类表示的字符串是常量,一旦创建后,内容和长度都是无法改变的。而StringBuffer表示字符容器,其内容和长度可以随时修 改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可,但是如果需要对字符串中的字符进行增删操作,则使 用StringBuffer类。

  2. String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法,具体示例如下:

 		StringBuilder str = new StringBuilder("abc");
        StringBuilder str1 = new StringBuilder("abc");
        System.out.println(str.equals(str1));       //false

        String str2 = new String("abc");
        String str3 = new String("abc");
        System.out.println(str2.equals(str3));      //true

3)String类对象可以用操作符“+”进行连接,而StringBuffer类对象之间不能,具体示例如下:

 		StringBuilder s1 = new StringBuilder("abc");
        StringBuilder s2 = new StringBuilder("def");
        System.out.println(s1 + s2);		//报错
        String s3 = new String("abc");
        String s4 = new String("def");
        System.out.println(s3 + s4);		//正常运行

以下是StringBuffer类提供了一系列的方法:

image-20210320194305003

		public static void main(String[] args) {
        StringBuilder x = new StringBuilder("abcd");
        System.out.println(x);
        System.out.println(x.hashCode());		//输出字符串x的哈希码
        StringBuilder y = x.replace(1,2,"B");	//将字符串y中索引在[1-2)间的数替换成B
        System.out.println(y);
        System.out.println(y.hashCode());		//输出字符串y的哈希码  可以得出两个字符串虽然改了数据,但地址还是一样的

        x.append('e');				//在字符串x后面添加字符e
        System.out.println(x);
        x.reverse();				//将字符串x进行倒序排序
        System.out.println(x);
        x.insert(0,'A');			//在字符串x的索引0的位置插入一个字符A
        System.out.println(x);

System类:

System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。System类的常用方法如下表所示 :image-20210320215042494

1getProperties()方法

​ System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对形式存在的。

2currentTimeMillis():

​ currentTimeMillis()方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称作时间戳。

3arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

​ arraycopy()方法用于将一个数组中的元素快速拷贝到另一个数组。其中的参数具体作用如下:

  • src:表示源数组。

  • dest:表示目标数组。

  • srcPos:表示源数组中拷贝元素的起始位置。

  • destPos:表示拷贝到目标数组的起始位置。

  • length:表示拷贝元素的个数。

Date类:

在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。

Date中的方法 方法解读
Date() 分配一个Date对象,并初始化此对象为系统当前的日期和时间,可以精确到毫秒)。
Date(long date) 配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
boolean after(Date when) (Date when)此日期是否在指定日期之后。
booleanbefore(Date when) (Date when)此日期是否在指定日期之前。
boolean equals(Object obj) 比较两个日期的相等性。
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
String toString() 把此 Date 对象转换为以下形式的 String:dow mon dd hh:mm:ss zzz yyyy

注意:如今Date中很多方法都已经过时了,现在日期操作一般使用Calendar类,而字符串的转化使用DateFormat类。

		Date time = new Date();                 //当前系统时间
        System.out.println(time);

        Date time0 = new Date();
        System.out.println(time0.getTime());      //获取当前毫秒数

		Date time1 = new Date(2020-1900,10,11,11,11,11);	//自定义一个时间点
        System.out.println(time1);							

        System.out.println(time.after(time1));     //比较当前时间是否在time1的时间之后   返回Boolean
        System.out.println(time.before(time1));    //比较当前时间是否在time1的时间之前   返回Boolean

DateFormat类和SimpleDateFormat类

  • DateFormat类的作用:
    • 把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。
    • DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。
		// DateFormat抽象类 与 SimpleDateFormat
        //把时间对象按相应的格式转换成字符串
        SimpleDateFormat time2 = new SimpleDateFormat();    //需要传入格式化的字符串:查看字符串含义表
        System.out.println(time2);
        DateFormat time3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		System.out.println(time3.format(new Date()));
        System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));

        System.out.println("==================================");
        //把字符串按照格式字符串转换成时间对象
        DateFormat time4 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String str = "2021年03月20日 19:12:52";    //时间格式必须与上面的格式一样
        System.out.println(str);
        try {
            Date time5 = time4.parse(str);
            System.out.println(time5);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        SimpleDateFormat time6 = new SimpleDateFormat("D"); //当前年份的天数
        System.out.println(time6.format(new Date()));

        SimpleDateFormat time7 = new SimpleDateFormat("W"); //当前月份中的周数
        System.out.println(time7.format(new Date()));
    }

字符含义表:
image-20210321010122188

Calendar类

Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。 GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

注意:程序中月份是在0-11之间的范围内的。

public static void main(String[] args) {
        Date date = new Date();				
        Calendar calendar = new GregorianCalendar(2020,2,20,20,12,33);	//输入固定时间
        System.out.println(date);					//输出当前时间
        int year = calendar.get(Calendar.YEAR);		//获取calendar的年份
        int month = calendar.get(Calendar.MONTH);	//获取calendar的月份
        int day = calendar.get(Calendar.DATE);		//获取calendar的日期
        System.out.println(year);					//2020
        System.out.println(month + 1);				//3   
        System.out.println(day);					//20
        System.out.println("=======================================");
    
        //设置日期相关元素:
        Calendar calendar1 = new GregorianCalendar();           //默认为当前时间
        System.out.println(calendar1.get(Calendar.YEAR));       //获取当前年份
        calendar1.set(Calendar.YEAR,2017);                      //设置年份为2017
        System.out.println(calendar1.get(Calendar.YEAR));       //2017
		System.out.println("=======================================");
    
        //日期的计算
        Calendar c1 = new GregorianCalendar();
        c1.add(Calendar.YEAR,10);              //利用add()方法在当前日期加上10年
        System.out.println(c1.get(Calendar.YEAR));	
        System.out.println("=======================================");

        //日期对象和时间对象的转换
        System.out.println(c1);             //输出Calendar的数据				
        Date date1 = c1.getTime();			//日期对象转换为时间对象
        System.out.println(date1);          //输出Date时间对象的数据
        Calendar c2 = new GregorianCalendar();
        c2.setTime(new Date());				//将时间对象转换为日期对象


        System.out.println("=======================================");
    }
   

Math类和Random类

​ Math类是数学操作类,提供了一系列用于数学运算的静态方法,包括求绝对值、三角函数等。Math类中有两个静态常量PI和E,分别代表数学常量π和e,其方法的参数和返回值类型一般为double型。

Math类的常用方法:

abs 绝对值
acos,asin,atan,cos,sin,tan 三角函数
sqrt 平方根
pow(double a, double b) a的b次幂
max(double a, double b) 取大值
min(double a, double b) 取小值
ceil(double a) 大于a的最小整数
floor(double a) 小于a的最大整数
random() 返回 0.0 到 1.0 的随机数
long round(double a) double型的数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度->角度
toRadians(double angdeg) 角度->弧度

​ 在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。在Random类中提供了两个构造方法,具体如下表所示:

image-20210321010909823

  • 表中列举了Random类的两个构造方法,其中第一个构造方法是无参的,通过它创建的Random实例对象每次使用的种子是随机的,因此每个对象所产生的随机数不同。
  • 如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子即可。

Random类与Math.random的区别:

  • 相对于Math的random()方法而言,Random类提供了更多的方法来生成各种伪随机数,不仅可以生成整数类型的随机数,还可以生成浮点类型的随机数,表中列举了Random类中的常用方法:

image-20210321011128610

包装类:

​ 在Java中,很多类的方法都需要接收引用类型的对象,此时就无法将一个基本数据类型的值传入。为了解决这样的问题,JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象。在Java中,每种基本类型都有对应的包装类,具体如下表所示:

image-20210321133913992

  • 列举了8种基本数据类型及其对应的包装类。其中,除了Integer和Character类,其它包装类的名称和基本数据类型的名称一致,只是类名的第一个字母需要大写。
  • 包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的值转为引用数据类型,反之,拆箱是指将引用数据类型的对象转为基本数据类型。
        //基本数据类型转换成包装类对象
        Integer a1 = new Integer(5);
        Integer a2 = Integer.valueOf(6);
        System.out.println(a1);         //5
        System.out.println(a2);         //6

        //包装类对象转换成基本数据类型:
        int b1 = a1.intValue();
        System.out.println(b1);         //5

        //字符串类型转换为包类型:输入的数值只能是数值字符串
        Integer a3 = Integer.parseInt("123");
        System.out.println(a3);                     //int:123

        //包装类转换成字符串:
        Integer a4 = Integer.valueOf(123456);
        String b2 = a4.toString();
        System.out.println(b2);                 //String:"123456"

​ 在JDK5.0版本之前,数学运算表达式中的操作数必须是基本类型的,并且运行结果也是基本类型,包装类和基本类型是不允许进行混合数学运算的,如果想运算,必须要通过拆箱将包装类对象转为基本数据类型的值才行,具体示例如下:

 		Integer i = 12;     //自动装箱,默认执行-->Integer i = Integer.valueOf(12);
        int j = i;          //自动拆箱,默认执行-->int j = i.intValue();
        System.out.println(i + " " +j);
        //注:在[-128,127]范围之间的数字,定义时不会生成新对象的,所以它们的内存地址也将相同。
        Integer a = Integer.valueOf(121);
        Integer b = Integer.valueOf(121);
        System.out.println(a == b);            //true

        Integer a1 = 130;
        Integer b1 = 130;
        System.out.println(a1 == b1);          //false

posted @ 2021-03-29 23:45  VXZX  阅读(135)  评论(0)    收藏  举报