Java常用类介绍

常用类

包装类

基本介绍

包装类位于java.lang包,用法类似;

基本数据类型与包装类的对应关系:

基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double

由于包装类的常用方法类似,此处拿Integer举例;

数字相关的包装类都继承了Number类;Byte,Short,Integer,Long,Float,Double等。

常用方法示例:

public class TestInteger {
	public static void main(String[] args) {
		//1.基本数据类型转成包装类对象
		Integer a = new Integer(1);
		Integer b = Integer.valueOf(2);
		//2.包装类对象转成基本数据类型
		int c = b.intValue();
		double d = b.doubleValue();		
		//3.字符串转成包装类对象
		Integer e = new Integer("8888");	
		//4.包装类对象转成字符串
		String f = e.toString();	
		//5.包装类中的常量
		System.out.println("Integer中最大值:"+Integer.MAX_VALUE);
		System.out.println("Size:"+Integer.SIZE);
	}
}

自动装箱和拆箱

// 自动装箱 
Integer a = 2;//相当于 Integer a = Integer.valueOf(2); 
// 自动拆箱
int b = a; //编译器自动转为:int b = a.intValue();
  • 缓存问题:缓存[-128,127]之间的数字,系统初始化时创建的一个缓存数组;
Integer a = 124;
Integer b = 124;
System.out.println(a==b); //true
System.out.println(a.equals(b)); //true

Integer c = 128;
Integer d = 128;
System.out.println(c==d); //false
System.out.println(c.equals(d)); //true

String

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];   
}
  • String类是不可变字符序列;
  • 判断String对象值是否相等使用equals()方法

常用方法

JDK8 API

方法 解释说明
char charAt(int index) 返回字符串中索引为index的字符,索引范围(0,lenth()-1);
boolean equals(Object anObject) 如果字符串与anObject相等,返回true;否则返回false;
boolean equalsIgnoreCase(String other) 判断字符串是否相等(忽略大小写);
int indexOf(String str) 返回从头开始查找的第一个子字符串str在字符串中的索引位置。如果未找到子字符串str,则返回-1;
int lastIndexOf() 返回从末尾开始查找的第一个子字符串str在字符串中的索引位置。如果未找到子字符串str,则返回-1;
int length() 返回字符串的长度;
String replace(char oldChar,char new Char) 返回一个新串,它是通过用newChar替换此字符串中出现的所有oldChar而生成的;
boolean startsWith(String prefix) 如果字符串以prefix开始,则返回true;
boolean endsWith(String prefix) 如果字符串以prefix结尾,则返回true;
String substring(int beginIndex) 返回一个新字符串,该串包含从原始字符串beginIndex到串尾;
String substring(int beginIndex, int endIndex) 返回一个新字符串,该串包含从原始字符串beginIndex到串尾或endIndex-1的所有字符;
String toLowerCase() 返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母;
String toUpperCase() 返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母;
String trim() 返回一个新字符串,该串删除了原始字符串头部和尾部的空格

StringBuilder和StringBuffer

StringBuilder和StringBuffer共同的父类AbstractStringBuilder

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char[] value;
}
  • StringBuilder和StringBuffer是可变字符序列;
  • StringBuffer JDK1.0版本提供的类,线程安全,做线程同步检查,效率较低;
  • StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高,常用;

常用方法

方法 解释说明
public StringBuilder append(…) 重载的方法,可以为StringBuilder对象添加字符序列,仍然返回自身对象;
public StringBuilder delete(int start,int end) 可以删除从start到end-1为止的一段字符串序列,仍然返回自身对象;
public StringBuilder deleteCharAt(int index) 移除此序列索引为index的字符,仍然返回自身对象;
public StringBuilder insert(…) 重载的方法,可以为StringBuilder对象在指定位置插入字符序列,仍然返回自身对象;
public StringBuilder reverse() 将字符串序列逆序,仍然返回自身对象;
public String toString() 返回此序列中数据的字符串表示形式;
public void setCharAt(int index,char c) 将c替换到原字符序列索引为index的位置;
indexOf(),substring(),length(),charAt() 类似String类中的方法;

时间处理相关类

  • 以1970年1月1日 00:00:00定为基准时间,度量单位为毫秒(千分之一秒)

  • 用long类型的变量保存时间;

  • 获得现在时刻的“时刻数值”,

    long now = System.currentTimeMillis();
    

Date

public class Date
    implements java.io.Serializable, Cloneable, Comparable<Date>
{
	public Date() {
        this(System.currentTimeMillis());
    }
}
  • Date的构造方法返回了当前时间的毫秒值,说明新创建的Date对象的时间为当前时间;
  • Date带参构造,参数是一个毫秒数,表示从基准时间过了参数毫秒值的时间;
  • boolean after(Date when) 判断此时间是否在指定时间之后;
  • boolean before(Date when) 判断此时间是否在指定时间之前;
  • boolean equals(Date when)判断两个日期的相等性;
  • long getTime() 返回自基准时间到该Date对象时间所经过的毫秒数;
  • String toString() 把Date对象转换成java源码中设定格式的字符串输出;

DateFormat

  • 把时间对象转化成指定格式的字符串,反之,把指定格式的字符串转化成时间对象;
  • DateFormat是一个抽象类,一般使用它的子类SimpleDateFormat类来实现

方法:

方法 解释说明
public String format(Date date) 返回将date转化为指定格式的字符串;
public Date parse(String str) 将指定格式的字符串转化为Date对象并返回;
//把时间对象转成字符串
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String str = df.format(date);
//把字符串装成时间对象
Date date = df.parse("2019-9-9 11:11:11"); //需要捕获异常

其他格式化字符:SimpleDateFormat

比如 D 表示当前时间是当前年份的第多少天

Calendar

  • Calendar类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年月日时分秒的展示和计算;
  • GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统;
  • 注意:0-11表示对应的月份,0是1月,11代表12月;
  • 1-7表示星期,1是星期日,7代表星期六

方法:

  • get(param):根据传的参数,获得对应的日期属性;
  • set(params):根据参数,给日期对象设置日期属性;
  • add(params):根据参数,进行日期的计算;
  • Date getTime():转化成一个时间类对象;
  • Calender setTime(Date date):将时间类对象转化为日期类;

可视化日历程序

		String str = "2020-2-29";  //平年天数超出不做判断
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Date date = df.parse(str); // 有异常
		Calendar c = new GregorianCalendar();
		c.setTime(date);
		int today = c.get(Calendar.DAY_OF_MONTH);// 保存当前日期为哪一天

		System.out.println(" 日\t一\t二\t三\t四\t五\t六");

		c.set(Calendar.DAY_OF_MONTH, 1); // 从当前月的第一天开始

		// 计算出当前月的第一天是周几
		for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
			System.out.print("\t");
		}

		int days = c.getActualMaximum(Calendar.DATE); // 当前月一共有多少天
		for (int i = 1; i <= days; i++) {
			if (i == today) // 如果是今天,则在日期后面加上*
				System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
			else
				System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");

			// 周六换行
			if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
				System.out.println();
			}
			c.add(Calendar.DAY_OF_MONTH, 1);
		}

Math

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

Random

专门用于生成随机数的类;

Random rand = new Random();
// 随机生成[0,1)之间的double类型的数据
System.out.println(rand.nextDouble());

// 随机生成int类型允许范围之内的整型数据
System.out.println(rand.nextInt());
// 随机生成[0,1)之间的float类型的数据
System.out.println(rand.nextFloat());

// 随机生成false或者true
System.out.println(rand.nextBoolean());

// 随机生成[0,10)之间的int类型的数据
System.out.println(rand.nextInt(10));
// 随机生成[20,30)之间的int类型的数据
System.out.println(20 + rand.nextInt(10));
// 随机生成[20,30)之间的int类型的数据(此种方法计算较为复杂)
System.out.print(20 + (int) (rand.nextDouble() * 10));

File

  • java.io.File类:代表文件和目录;
  • 构造方法:传入一个目录地址;
File f = new File("d:\\a.txt");
//File f = new File("d:/a.txt");

常用方法:

方法 说明
public boolean exists() 判断File是否存在
public boolean isDirectory() 判断File是否为目录
public boolean isFile() 判断File是否为文件
public long lastMidified() 返回File最后修改时间
public long length() 返回File大小
public String getName() 返回文件名
public String getPath() 返回文件的目录路径

创建新目录:

File f = new File("d:/电影/华语/大陆");
boolean flag = f.mkdir(); // false 目录结构中有一个不存在,则不会创建整个目录树
boolean flag = f.mkdirs(); //创建整个目录树

递归遍历目录树结构:

public static void main(String[] args) {
		File  f = new File("D:\\2345\\Downloads");
		printFile(f,0);
	}
	static void  printFile(File  file, int  level){	
		//输出层数
		for(int i=0;i<level;i++){
			System.out.print("-");
		}	
		System.out.println(file.getName());
		if(file.isDirectory()){
			File[] files = file.listFiles();
			
			for(File  temp: files){
				printFile(temp,level+1);
			}	
		}
	}

枚举

  • JDK1.5引入了枚举类型,枚举类型的定义包括枚举声明和枚举体。

    enum 枚举名{
    	枚举体(常量列表)
    }
    
  • 枚举体就是放置一些常量;

  • 枚举类型隐性地继承自java.lang.Enum。

  • 枚举实质上还是类,而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的,提议直接通过枚举类型名使用它们;

enum Season {
	SPRING, SUMMER, AUTUMN, WINTER
}
public class TestEnum {
	public static void main(String[] args) {
		Season a = Season.AUTUMN;
		switch(a){
		case SPRING:
			System.out.println("春天");
			break;
		case SUMMER:
			System.out.println("夏天");
			break;
		case AUTUMN:
			System.out.println("秋天");
			break;
		case WINTER:
			System.out.println("冬天");
			break;
		}
	}
}
不会的东西只有怀着一颗狂妄的心,假装能把它看穿吧。
原文地址:https://www.cnblogs.com/zhangshuaiyin/p/12038082.html