java学习笔记(day21)

0x00 Calendar类

1.概述

java.util.Calendar类:日历类
Calendar类是一个抽象类,里面提供了很多操作日历字段的方法。

Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象。

static Calendar getInstance() 使用默认失去和语言环境获得一个日历。

2.Calendar类常用的成员方法

  1. public int get(int field):返回给定日历字段的值。
  2. public void set(int field,int value):将给定的日历字段设置为给定值。
  3. public abstract void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  4. public Date getTime():返回一个表示次Calendar类的静态成员变量获取。

成员方法的参数跟DateFormat相同。

0x01 System类

概述

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。

System类的常用方法

  1. public static long currentTimeMillis:返回以毫秒为单位的当前时间。
  2. public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):将数组中指定的数据拷贝到另一个数组中。

练习:public static long currentTimeMillis

该方法可以用来验证程序的效率
验证for循环打印数字1-9999所需要使用的时间(毫秒)

package day21;
public class ForDemo01 {    
      // 验证for循环打印数字1-9999所需要使用的时间(毫秒)    
      public static void main(String[] args) {        
            long s = System.currentTimeMillis();        
            for (int i = 1; i <=9999 ; i++) {            
                  System.out.println(i);        
            }        
            long e = System.currentTimeMillis();        
            System.out.println("程序总耗时"+(e-s)+"毫秒");    
      }
}

练习:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
参数:
src - 源数组
srcPos - 源数组中的起始位置(起始索引)
dest - 目标数组
destPos - 目标数组中的起始位置
length - 要复制的数组元素的数量

将src数组的前三个元素,复制到dest数组的前三个位置上。
src数组{1,2,3,4,5}
dest数组 {5,6,7,8,9}

package day21;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import java.util.Arrays;
public class ArrayDemo02 {    
      public static void main(String[] args) {        
            int src[] = {1,2,3,4,5};        
            int dest[] = {5,6,7,8,9};        
            System.out.println("复制前的dest数组"+ Arrays.toString(dest));        
            System.arraycopy(src,0,dest,0,3);        
            System.out.println("复制后的dest数组"+Arrays.toString(dest));    
      }
}

0x02 StringBuilder类

String类
字符串是常量;它们的值在创建之后不能更改。
字符串的底层是一个被final修饰的数组,不能改变,是一个常量。
private final byte[] value;

进行字符串的相加,内存中就会有多个字符串,占用空间多,效率低下。

StringBuilder类
字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
底层也是一个数组,但是没有被final修饰,可以改变长度。
byte[] value = new byte[16]

StringBuilder在内存中始终是一个数组,占用空间少,效率高。
如果超出了StringBuilder的容量,会自动的扩容。

常用构造方法

  1. StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
  2. StringBuilder(Sting str):构造一个字符串生成器,并初始化为指定的字符串内容。

代码演示

package day21;
public class StringDemo03 {    
      public static void main(String[] args) {        
            StringBuilder bu1 = new StringBuilder();        
            System.out.println("bu1:"+bu1);        
            StringBuilder bu2 = new StringBuilder("abc");        
            System.out.println("bu2:"+bu2);    
      }
}

常用成员方法

  1. public StringBuilder oppend(...):添加任意类型数据的字符串形式,并返回当前对象自身。
    代码演示
package day21;
public class AppendDemo04 {    
      public static void main(String[] args) {        
            StringBuilder bu1 = new StringBuilder();        
            StringBuilder bu2 = bu1.append("abc");        
            System.out.println(bu1);        
            System.out.println(bu2);        
            System.out.println(bu1 == bu2);    
      }
}

使用append方法无须接受返回值。

  1. public String toString():该方法可以让StringBuilder对象转变成String对象
    代码演示
package day21;
public class ToStringDemo05 {    
      public static void main(String[] args) {        
            String str = "hello";        
            System.out.println("str:"+str);        
            StringBuilder bu = new StringBuilder(str);        
            bu.append("word"); 
            //往StringBuilder里添加数据        
            System.out.println("bu:"+bu);        
            //进行转换        
            String s = bu.toString();        
            System.out.println("s:"+s);    
      }
}

StringBuilder和String可以相互转换;
String -> StringBuilder
使用StringBuilder的构造方法。

0x03 包装类

概念:
基本数据类型,使用起来非常方便,但是没有对应的方法来操作这些基本类型的数据。可以使用一个类,把基本类型的数据装起来,在类中定义一些方法,这个类叫做包装类,我们可以使用类中的方法来操作这些基本类型的数据。

装箱和拆箱

装箱:把基本类型的数据,包装到包装类中。(基本类型的数据 -> 包装类)

构造方法:
Integer(int value)构造一个新分配的Integer对象,它表示指定的Int值。
Integer(String s)构造一个新分配的Integer对象,它表示String参数所指示的int值。(传递的字符串必须是基本类型的字符串。)

静态方法:
static Interger valueOf(int i)返回一个表示指定的int值的Integer实例。
static Integer valueOf(String s)返回保存指定String的值的Integer对象。

拆箱:在包装类中取出基本类型的数据(包装类 -> 基本类型的数据)

成员方法:
int intValue() 以 int类型返回该Integer的值。

自动装箱和自动拆箱

基本数据类型的数据和包装类之间可以自动的相互转换

package day21;
public class IngeterDemo06 {    
      public static void main(String[] args) {        
            /*        
            自动装箱:直接把int类型的整数赋值到包装类。        
            Integer in = 1;相当于Integer in = new Integer(1)         
            */        
            Integer in = 1;                
            /*        
            自动拆箱:in是包装类,无法直接参与运算,可以自动转换为基本数据类型,再进行计算。        
            in + 2;就相当于in.intValue() + 2 = 3        in = in.intValue() + 2 = 3 又是一个自动装箱         
            */                
            in = in + 2;    
      }
}

基本类型与字符串之间的相互转换

基本类型 -> 字符串

  1. 基本类型的值+“”
  2. 包装类的静态方法toString(参数)
  3. String类的valueOf(参数)

字符串 -> 基本类型

  1. 包装类的静态方法parseXXX("数值类型的字符串")
    Integer类:static int parseInt(String s)
    Double类:static double parseDouble(String s)
posted @ 2020-10-21 18:12  小明-o3rr0r  阅读(174)  评论(0编辑  收藏  举报