Java常用类总结

Java基础常用类简介:Object、包装类、System、Scanner、BigInteger、BigDecimal、Math、Random、File、Date、SimpleDateFormat、Calendar、Arrays、String……


1 Object类

Object类所有类的直接或间接父类,位于继承树的最顶层。任何类,如果没有书写extends显示继承某个类,都默认直接继承Object,否则为间接继承。在对象实例化的时候,最终找到的父类就是Object。

Object类提供无参构造方法,之所以提供这样的无参构造,是因为在子类对象实例化时都会默认调用父类中的无参构造方法,这样在定义类时即使没有明确定义父类为Object,读者也不会感觉代码的强制性要求。Object类中所定义的方法,是所有对象都具备的方法。

Object类型可以储存任何对象——作为参数,可接收任何对象;作为返回值,可返回任何对象。

1.1 基本实例方法

  1. hashCode():返回该对象的哈希值。哈希值为根据对象的地址或字符串或数字使用hash算法计算出来的int值。
    一般情况下相同对象返回相同哈希码。如果两个对象的哈希码值不同,那这两个对象一定不等;如果两个对象的哈希码值相同,不能确保这两个对象一定相等。
    // s1和s2对象指向不相同,s1.hashCode() != s2.hashCode()
    Student s1 = new Student();
    Student s2 = new Student();
    // s1和s3对象指向相同,s1.hashCode() == s2.hashCode()
    Student s3 = s1;
    
  2. toString():返回该对象的字符串表示,默认为对象的类型 + @ + 内存地址值。在开发中,经常需要按照对象的属性得到相应的字符串表现形式,需要重写它。
    public class Person {  
        private String name;
        private int age;
    
        @Override
        public String toString() {
            return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
        }
    }
    
  3. clone():返回克隆对象的克隆。克隆对象对应的类需要实现Cloneable接口,否则会报错:java.lang.CloneNotSupportedException
  4. getClass():返回引用中存储的实际对象类型。通常用于判断两个引用中实际存储对象类型是否一致。

    如何获取类的字节码文件对象?

    • 类名.class: JVM将使用类装载器,将类装入内存(前提:类还未装入内存),不做类的初始化工作。返回Class的对象。
    • Class.forName("类名字符串")(类名字符串:包名+类名):装入类,并做类的静态初始化,返回Class的对象。
    • 实例对象.getClass():对类进行静态初始化、非静态初始化;返回引用对象运行时真正所指的对象(因为子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象。
  5. notify()wait():线程控制
  6. equals():比较两个对象地址是否相同。可进行重写来实现比较两个对象的内容是否相同。
    public class Person {  
        private String name;
        private int age;
    
        @Override
        public boolean equals() {
    		if (this.name.equals(s.getName()) && this.age == s.getAge()) {
    			return true;
    		}
    		return false;
    	}
    }
    

1.2 Objects工具类

Objects工具类提供了上述成员方法的等价静态方法,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。

例:在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals静态方法就优化了这个问题,为public static boolean equals(Object a, Object b)

public static boolean equals(Object a, Object b) {  
    return (a == b) || (a != null && a.equals(b));  
}

2 包装类

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能。
若想要基本类型像对象一样操作,就可以使用基本类型对应的包装类。

基本类型对应的包装类(位于java.lang包中)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

2.1 装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为装箱拆箱

JDK5之前需要手动装箱、拆箱

// 装箱:基本类型 → 引用类型
int num1 = 18;
Integer integer1 = new Integer(num1);
Integer integer2 = Integer.valueOf(num1);

// 拆箱:引用类型 → 基本类型
Integer integer3 = new Integer(100);
int num2 = integer3.intValue();

由于经常要做基本类型与包装类之间的转换,后续版本中装箱、拆箱动作可以自动完成

int age = 30;
// 自动装箱
Integer integer4 = age;
// 自动拆箱
int age2 = integer4;

2.2 基本类型与字符串转换

除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:

  • public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
  • public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
  • public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
  • public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
  • public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
  • public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
  • public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。
// 1. 基本类型转成字符串
int n1 = 100;
// 1.1 使用+号(推荐)
String s1 = n1 + "";
// 1.2 使用Integer中的toString()方法
String s2 = Integer.toString(n1);
// 1.3 x为进制要求
String s2 = Integer.toString(n1, x); 

// 2. 字符串转成基本类型
String str = "150";
// 2.1使用Integer.parseXXX();(推荐)
int n2 = Integer.parseInt(str);
// 2.2包装类型的构造器
Integer i = new Integer("2");
// 2.3返回保存指定的 String 的值的 Integer 对象
Integer integer2 = Integer.valueOf(num1);

// boolean 字符串形式转成基本类型,"true" ---> true
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);

3 System类

System类提供了一些与系统操作和属性相关的静态方法和属性。如:标准输入、输出和错误流,获取系统属性,退出程序,垃圾回收,获取当前时间,数组拷贝等。

  • 标准流属性
    • static PrintStream out:标准输出流,用于将文本内容输出到控制台。
    • static InputStream in:标准输入流,用于从控制台读取用户输入。
    • static PrintStream err:标准错误输出流,用于输出错误信息到控制台。
  • 静态方法
    • static void exit(int status):终止当前正在运行的 Java 虚拟机。status参数表示程序的退出状态。
    • static long currentTimeMillis():返回当前时间的毫秒数,用于计算时间间隔等。
    • static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组 src 中的一部分元素复制到数组 dest 中的指定位置。
    • static String getProperty(String key):获取指定键的系统属性值。
    • static String getProperty(String key, String defaultValue):获取指定键的系统属性值,如果没有找到则返回默认值。
    • static void setProperty(String key, String value):设置指定键的系统属性值。
    • static String getenv(String name):获取指定名称的环境变量值。
    • static Map<String, String> getenv():获取所有环境变量的名称和值组成的映射。
public static void main(String[] args) {
    long time = System.currentTimeMillis();
    System.out.println("时间的毫秒数:" + time);
    System.out.println("文件编码格式:" + System.getProperty("file.encoding"));
}

4 Scanner类

Scanner类提供了多个构造方法,可以从不同的输入源(例如文件、字符串、流等)创建一个Scanner对象。用于简化从不同输入源(如键盘、文件等)读取数据的过程。

  • 构造方法
    • Scanner(System.in):从标准输入流读取数据
  • 实例方法
    • Pattern delimiter():获取当前使用的分隔符模式。
    • Scanner useDelimiter(Pattern pattern):设置用于分隔标记的模式。
    • Scanner useDelimiter(String pattern):设置用于分隔标记的模式(使用正则表达式字符串)。
    • Pattern skipPattern():获取当前用于跳过输入的模式。
    • Locale locale():获取当前的 Locale 对象。
    • Scanner useLocale(Locale locale):设置用于解析数字和日期的 Locale。
    • int radix():获取当前的进制基数(用于解析整数)。
    • Scanner useRadix(int radix):设置用于解析整数的进制基数。
    • MatchResult match():获取最近匹配操作的结果。
    • boolean hasNext():检查是否有下一个标记(默认以空白字符作为分隔符)。
    • String next():获取并返回下一个标记。

      还存在获取特定类型数据的方法hasNextX()和nextX(),如hasNextInt()nextInt()

    • String nextLine():获取并返回下一行的内容。
    • void close():关闭 Scanner 对象。
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String text = scanner.next();
    System.out.println("您输入的内容是:" + text);
}

5 大数类

5.1 BigInteger类

位于java.math.BigInteger。不可变的任意精度的整数。

  • 构造方法
    • BigInteger(String s):通过字符串创建BigInteger对象
  • 成员方法
    • add(BigInteger bi):+
    • subtract(BigInteger bi):-
    • multiply(BigInteger bi):*
    • divide(BigInteger bi):/

5.2 BigDecimal类

位于java.math.BigDecimal。不可变的、任意精度的有符号十进制数。

  • 构造方法
    • BigDecimal(String s):通过字符创建BigDecimal对象
  • 成员方法
    • add(BigDecimal bi):+
    • subtract(BigDecimal bi):-
    • multiply(BigDecimal bi):*
    • divide(BigDecimal bi, x, BigDecimal.ROUND_HALF_UP):/(x为保留小数位数)
BigDecimal b1 = new BigDecimal(1.0);
BigDecimal b2 = new BigDecimal(0.9);
BigDecimal sum = null;

sum = b1.add(b2);

sum = b1.subtract(b2);

sum = b1.multiply(b2);

sum = b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);

6 Math类

Math工具类提供了一系列数学运算的静态方法

  • abs(int a):绝对值
  • ceil(double d):向上取整
  • floor(double d):向下取整
  • max(int a, int b):最大值
  • pow(double a, double b):a的b次幂
  • random():生成 [ 0.0 , 1.0 ] [0.0,1.0] [0.0,1.0] 上的随机数
  • round(float f):四舍五入(原理:在参数上加0.5再进行取整)
  • sqrt(double d):算术平方根
int a = -10;
double d = 3.33;
int b = 5;

int absValue = Math.abs(a);			// 获取a的绝对值
double ceilValue = Math.ceil(d);	// 向上取整
double floorValue = Math.floor(d);	// 向下取整
int maxValue = Math.max(a, b);		// 获取最大值
double power = Math.pow(d, 2);		// d的2次幂
double randomValue = Math.random();	// 生成0.0到1.0上的随机数
int roundValue = Math.round(d);		// 四舍五入
double sqrtValue = Math.sqrt(d);	// 算术平方根

7 Random类

Random类用于生成随机数。只要两个Random对象的种子相同,而且方法的调用顺序也相同,产生的随机数相同。

  • 构造方法
    • Random():以当前时间毫秒值作为种子,创建Random对象
    • Random(long seed):以指定种子创建Random对象
  • 成员方法
    • nextInt():生成1个int类型范围的随机数
    • nextInt(int n):产生1个 [ 0 , n − 1 ] [0,n-1] [0,n1]范围内的随机数
/* 生成[0, n]上的数 */
// 法1:使用Math.random()静态方法
int res = (int)Math.random() * (n + 1)
// 法2:使用Random类对象
Random r = new Random();
int res = r.nextInt(n + 1);

/* 生成[n, m]上的随机数 */
// 法1:使用Math.random()静态方法
int res = n + (int)(Math.random() * (m + 1 - n));
// 法2:使用Random类对象
Random r = new Random();
int res = r.nextInt(m + 1 - n) + n;

UUID:用于做数据库的id

String uuid = UUID.randomUUID().toString();
// 效果:39eb10ce-e8be-49f5-a44b-bfd0aa8c8135

8 File类

File文件类以抽象的方式代表文件名和目录路径名。主要用于文件和目录的创建、文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。

  • 构造方法
    • File(File parent, String child):通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。
    • File(String pathname):通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。
    • File(String parent, String child):根据父路径名字符串和子路径名字符串创建一个新File实例。
    • File(URI url):通过将给定的文件URI转换成一个抽象路径名来创建一个新的File实例。
// 通过给定的父路径名和子路径名字符串创建一个新的File实例。
File parent = new File("C:/Users");
String child = "Documents";
File file1 = new File(parent, child);

// 通过给定路径名字符串转换成抽象路径名来创建一个新File实例。
String pathname = "C:/Users/Public";
File file2 = new File(pathname);

// 根据父路径名字符串和子路径名字符串创建一个新File实例。
String parentPath = "C:/Users";
String childPath = "Downloads";
File file3 = new File(parentPath, childPath);

// 通过将给定的文件URI转换成一个抽象路径名来创建一个新的File实例。
URI uri = new File("C:/Users/Public/Documents").toURI();
File file4 = new File(uri);
  • 实例方法
    • 添加文件
      • public boolean mkdir():创建此抽象路径名指定的目录。
      • public boolean mkdirs():创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
    • 查看文件
      • public File[] listFiles():返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
    • 修改文件
      • public boolean renameTo(File dest):重新命名此抽象路径名表示的文件。
    • 删除文件
      • public boolean delete():删除此抽象路径名表示的文件或目录。
// 创建文件夹
File folder = new File("testFolder");
if (folder.mkdir()) {
    System.out.println("Folder created successfully.");
} else {
    System.out.println("Failed to create folder.");
}

// 创建多层文件夹
File multiLevelFolder = new File("multiLevelFolder/test");
if (multiLevelFolder.mkdirs()) {
    System.out.println("Multi-level folder created successfully.");
} else {
    System.out.println("Failed to create multi-level folder.");
}

// 查看文件
File directory = new File("directory");
File[] files = directory.listFiles();
if (files != null) {
    for (File file : files) {
        System.out.println(file.getName());
    }
}

// 修改文件名
File oldFile = new File("oldFile.txt");
File newFile = new File("newFile.txt");
if (oldFile.renameTo(newFile)) {
    System.out.println("File renamed successfully.");
} else {
    System.out.println("Failed to rename file.");
}

// 删除文件
File fileToDelete = new File("fileToDelete.txt");
if (fileToDelete.delete()) {
    System.out.println("File deleted successfully.");
} else {
    System.out.println("Failed to delete file.");
}

9 Date类

Java 8日期/时间API包总结(java.time)

9.1 Date

表示特定的瞬间,精确到毫秒值

  • 构造方法
    • Date():以当前时间毫秒值创建Date对象
    • Date(long time):以指定的毫秒值创建Date对象(0表示1970:01:01 08:00:00)
  • 成员方法
    • long getTime():获取Date对象的毫秒值
    • setTime(long time):设置Data对象的毫秒值
Date currentDate = new Date();		// 以当前时间毫秒值创建Date对象
Date specifiedDate = new Date(1000000000000L);	// 以指定的毫秒值创建Date对象

long currentTimeMillis = currentDate.getTime();	// 获取Date对象的毫秒值
specifiedDate.setTime(2000000000000L);	// 设置Data对象的毫秒值

9.2 SimpleDateFormat

将日期时间类Date转换为自定义日期时间格式(格式化)。

标识字母(区分大小写):yMdHms —— 年月日时分秒

  • 构造方法
    • SimpleDateFormat():以默认模式创建对象
    • SimpleDateFormat(String pattern):以指定模式创建对象
  • 成员方法
    • String format(Date date):格式化
    • Date parse(String time):解析格式化
// 创建日期对象
Date date = new Date();
// 创建日期格式化解析对象
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 调用格式化方法
String time = format.format(date);
// 打印结果
System.out.println(time);	// 结果:2022-05-10 09:46:15
// 创建日期格式化解析对象
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 自定义时间
String str = "2020-05-10 09:46:15";
// 调用解析方法,返回date对象,抛出ParseException异常
Date date = format.parse(str);
// 打印结果
System.out.println(date);	// 结果:Sun May 10 09:46:15 CST 2020

9.3 Calendar

Calendar日历类为抽象类(不可实例化),包含特定瞬间与一组字段,并为获取或者操作日历字段及其之间的转换提供了一些方法。

西方星期的开始为周日,中国为周一。
在Calendar类中,月份的表示是以0-11代表1-12月。
日期是有大小关系的,时间靠后,时间越大。

  • 静态方法
    • static Calender getInstance():以默认时区和语言创建日历
  • 实例方法(调用上述方法获取对象后才可使用)
    • int get(int field):获取指定字段的日历值
    • set(int field, int value):给指定的日历字段设置指定的值
    • set(int year, int month, int date):设置年月日
    • Date getTime():获取日历对象的Date日期
    • setTime(Date d):设置日历对象的日期
    • add(int field, int amount):对指定的日历字段添加指定的值
字段值含义
YEAR
MONTH月(从0开始)
DAY_OF_MONTH月中的天(几号)
HOUR时(12小时制)
HOUR_OF_DAY时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK星期几(周日为1)
/* get/set */
// 获取日历类对象
Calendar time = Calendar.getInstance();
// 获取年
int year = time.get(Calendar.YEAR);
// 获取月
int month = time.get(Calendar.MONTH);
// 获取日
int day = time.get(Calendar.DAY_OF_MONTH);
// 获取时
int hour = time.get(Calendar.HOUR_OF_DAY);
// 获取分
int minute = time.get(Calendar.MINUTE);
// 获取秒
int second = time.get(Calendar.SECOND);// 更改时间
time.set(Calendar.YEAR,2003);
/* add */
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
cal.add(Calendar.YEAR, -3); // 减3年

10 Arrays类

用于操作数组的工具类

/* 将指定序列转为List列表 */
static <T> List<T> asList(T... a)

/* 排序 */
static void sort(Object[] a)
static void sort(Object[] a, int fromIndex, int toIndex)	// from...to 左闭右开
static <T> void sort(T[] a, Comparator<? super T> c)		// 自定义比较规则

/* 二分查找 */
static int binarySearch(Object[] a, Object key)
static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key)

/* 判断两个数组中的元素是否一一对应相等 */
static boolean equals(Object[] a, Object[] b)

/* 填充数组 */
static void fill(Object[] a, Object val)

/* 复制数组,需设置复制的长度 */
static <T> T[] copyOf(T[] original, int newLength)

/* 将某个范围内的元素复制到新的数组中 */
static <T> T[] copyOfRange(T[] original, int fromIndex, int toIndex)

/* 转换为字符串形式 */
static String toString(Object[] a)
static String deepToString(Object[] a)		// 递归转换高维数组

11 数据结构类

字符串类(String、StringBuffer / StringBuilder)

集合框架(Collection、Map)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Akira37

💰unneeded

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值