JAVA进阶(03)常用类

一、包装类

1、包装类概述

  • 8种基本类型对应8种包装类,除了 Integer 和 Character 类以外,其他只是类名首字母大写;
  • 除了 Character 和 Boolean,其他都是数字型,继承自 Number 类,重写过 intValue()、longValue()、floatValue()、doubleValue() 方法,可以相互转换;
  • 包装类的用途:对象数组和集合操作;包装对象包含方法可以为基本类型、包装类和字符串之间的转换提供方便;

2、自动装箱和拆箱

(1)自动装箱:基本类型的数据处于需要对象的环境中时,会自动转为对象

(2)自动拆箱:每当需要一个值时,对象会自动转成基本数据类型

(3)实现:通过调用包装类的 valueof()和 intValue()方法分别实现 装 拆 箱,整个过程有编译器自动完成

(4)代码:注意包装类的空指针问题

Integer b = 23; // 自动装箱
int a = new Integer(20); //自动拆箱
// 下面的问题我们需要注意:
Integer c = null;
int d = c; // 此处其实就是:c.intValue(),因此抛空指针异常。

3、包装类缓存问题

(1)包装类在自动装箱时为了提高效率,对于-128~127之间的值会进行缓存处理

(2)缓存的本质就是包装类在加载时,自动创建这个范围内的对象,后面用的话直接引用,不会在 new 对象

(3)超过范围后,对象之间不能再使用==进行数值的比较,而是使用equals方法

 

二、String类

1、String 类概述

(1)String 类对象是不可变的Unicode字符序列(不可变对象),其内部的成员变量用 final 修饰,其值无法改变

(2)字符串常量拼接时的优化

public class TestString2 {
    public static void main(String[] args) {
        //编译器做了优化,直接在编译的时候将字符串进行拼接
        String str1 = "hello" + " java";//相当于str1 = "hello java";
        String str2 = "hello java";
        System.out.println(str1 == str2);//true
        String str3 = "hello";
        String str4 = " java";
        //编译的时候不知道变量中存储的是什么,所以没办法在编译的时候优化
        String str5 = str3 + str4;
        System.out.println(str2 == str5);//false
    }
}

(3)常用方法总结:

  • 这些方法会返回一个新的 String,而不改变原来 String 的值:concat()、 replace()、substring()、 toLowerCase()、 toUpperCase()、trim()
  • 提供查找功能的有关方法: endsWith()、 startsWith()、 indexOf()、lastIndexOf()
  • 提供比较功能的方法: equals()、equalsIgnoreCase()、compareTo()
  • 其它方法: charAt() 、length()

2、StringBuffer和StringBuilder

(1)概念

  • tringBuffer 和 StringBuilder 均代表可变的字符序列
  • 都是抽象类 AbstractStringBuilder 的子类,方法几乎一模一样
  • 二者内部字符数组未用 final 修饰,是可变的
  • 字符串的多次拼接可以用这两个类,多用于循环中,可以减少资源的浪费

(2)二者区别

  • StringBuffer 线程安全, 效率较低
  • StringBuilder 线程不安全,效率较高,建议采用该类;

(3)常用方法

  • append("  ")
  • delete(int start,int end)
  • deleteCharAt(int index)
  • insert(index,"  ")
  • reverse()
  • 此外还有:indexOf()、substring()、length()、charAt()等方法

 

三、时间类

1、毫秒值

  • 把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一);
  • 毫秒值为 long 型:long now = System.currentTimeMillis();

2、date类

(1)构造器

  • 空参:new Date() 时间默认当前时间
  • 有参:new Date(100) 参数为毫秒值

(2)方法

  • long getTime():得到时间的毫秒值
  • 判断时间前后:before、after、equals
  • toString:格式化输出

(3)说明:很多方法过时,现在一般用 calendar 类

3、DateFormat类和SimpleDateFormat类

(1)作用:实现字符串和时间对象的相互转换

// new 出 sdf 对象
SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// 将时间对象转换成字符串
System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
// 将符合指定格式的字符串转成成时间对象.字符串格式需要和指定格式一致。
String time = "2007-10-7 20:15:30";
Date date = s1.parse(time);

(2)其他用途:获取当前时间是今年第几天

SimpleDateFormat s1 = new SimpleDateFormat("D");
String daytime = s1.format(new Date());
System.out.println(daytime);

4、calendar类

(1)概述

  • Calendar 类是一个抽象类,提供日期计算的相关功能
  • GregorianCalendar 是 Calendar 的一个具体子类
  • 注意月份的表示,一月是0,二月是1,以此类推,12月是11

(2)方法

  • calendar.get(Calendar.YEAR)
  • set(Calendar.YEAR, 2999)
  • add(Calendar.MONTH, -7)
  • calendar3.getTime():日历转时间
  • calendar4.setTime(new Date()):时间转日历

(3)某一月份日历打印(练习)

(4)Clendar 类的常量

  • Calendar.YEAR
  • Calendar.MONTH
  • Calendar.DAY_OF_MONTH
  • Calendar.DATE
  • Calendar.DAY_OF_WEEK
  • Calendar.HOUR_OF_DAY
  • Calendar.MINUTE
  • Calendar.SECOND

 

四、Math类

1、常用方法

  • abs 绝对值、sqrt 平方根、pow(double a, double b) a的b次幂、random() 返回 0.0 到 1.0 的随机数
  • ceil(double a) 大于a的最小整数、floor(double a) 小于a的最大整数、long round(double a) 四舍五入

2、关于随机数

(1)Math.random():返回 0到 1的随机数

(2)Random类:nextDouble()、nextInt(10)

(3)Math.random()底层调用的就是Random的nextDouble()方法

 

五、File类

1、基本用法

(1)说明: java.io.File类代表文件和目录,用于读取文件、生成文件、删除文件、修改文件的属性

(2)构造方法

  • public File(String pathname):有相对路径和绝对路径

(3)创建文件

JAVA进阶(03)常用类_第1张图片

File f = new File("a.txt"); //相对路径:默认放到user.dir目录下面
f.createNewFile();//创建文件

(4)创建目录

  • 一个目录
File f2 = new File("d:/电影");
boolean flag = f2.mkdir(); //目录结构中有一个不存在,则不会创建整个目录树
System.out.println(flag);//创建失败
  • 多个目录
File f2 = new File("d:/电影/华语/大陆");
boolean flag = f2.mkdirs();//目录结构中有一个不存在也没关系;创建整个目录树
System.out.println(flag);//创建成功

(5)访问属性

JAVA进阶(03)常用类_第2张图片

2、递归遍历目录

/**
     * 打印文件信息
     * @param file 文件名称
     * @param level 层次数(实际就是:第几次递归调用)
     */
    static void printFile(File file, int level) {
        //输出层次数
        for (int i = 0; i < level; i++) {
            System.out.print("-");
        }
        //输出文件名
        System.out.println(file.getName());
        //如果file是目录,则获取子文件列表,并对每个子文件进行相同的操作
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File temp : files) {
                //递归调用该方法:注意等+1
                printFile(temp, level + 1);
            }
        }
    }

 

六、枚举类

1、概念

(1)定义格式

enum Season {
    SPRING, SUMMER, AUTUMN, WINDER 
}

(1)实质

  • 枚举实质上还是类,而每个被枚举的成员实质就是一个枚举类型的实例,默认都是public static final修饰的,可以通过类名直接调用

2、使用

  • 需要定义一组常量时,可以使用枚举类型
  • 尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现

 

你可能感兴趣的:(Java基础)