小白学JAVA之十四——常用类
一. 常用包
- java.lang包 - 该包是Java语言的核心包,并且该包中的所有内容由Java虚拟机自动导入。
如:System类、String类、… - java.util包 - 该包是Java语言的工具包,里面提供了大量工具类以及集合类等。
如:Scanner类、Random类、List集合、… - java.io包 - 该包是Java语言中的输入输出包,里面提供了大量读写文件相关的类等。
如:FileInputStream类、FileOutputStream类、… - java.net包 - 该包是Java语言中的网络包,里面提供了大量网络编程相关的类等。
如:ServerSocket类、Socket类、… - java.sql 包 - 该包是Java语言中的数据包,里面提供了大量操作数据库的类和接口等。
如:DriverManager类、Connection接口、…
二. Object类
1.基本概念
- java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间接子类。
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类为 java.lang.Object 类。 - Object类定义了“对象”的基本行为, 被子类默认继承。
2.常用方法
import java.util.Objects;
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
public int getId() {
return id;
}
public void setId(int id) {
if (id > 0) {
this.id = id;
} else {
System.out.println("学号不合理哦!!!");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 为了比较两个对象的内容,也就是学号信息需要重写该方法
*/
// Student this = s1;
// Object obj = s2;
/*
@Override
public boolean equals(Object obj) {
// 当调用对象和参数对象指向同一个对象时,则内容一定相同
if (this == obj) return true;
// 当调用对象为不为空而参数对象为空时,则内容一定不相同
if (null == obj) return false;
// 判断obj指向的对象是否为Student类型的对象,若是则条件成立,否则条件不成立
if (obj instanceof Student) {
Student ts = (Student) obj;
// 以学号作为基准判断两个对象是否相等 int是基本数据类型,内存空间中放的就是数据本身,使用 == 可以判断数据是否相同
//return this.getId() == ts.getId();
// 以姓名作为基准判断两个对象是否相等 String是引用数据类型,内存空间中放的是地址,使用 == 判断地址是否相同
// 也就是判断两个对象中姓名字符串的地址是否相同,不够完美
//return this.getName() == ts.getName();
return this.getName().equals(ts.getName()); // 比较姓名字符串的内容是否相同
}
// 否则类型不一致没有可比性,则内容一定不相同
return false;
}
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return id == student.id &&
Objects.equals(name, student.name);
}
/**
* 为了使得该方法的结果与equals方法的结果保持一致,从而满足Java官方的常规协定,需要重写该方法
*/
/*
@Override
public int hashCode() {
//return getId(); // 不再代表内存地址的编号了
final int type = 12;
//return type*31 + getId();
return type*31 + getName().hashCode();
}
*/
@Override
public int hashCode() {
return Objects.hash(id, name);
}
/**
* 为了返回更有意义的字符串数据,则需要重写该方法
*/
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
三. 包装类
3.1 包装类的分类
3.2 Integer类
3.2.1基本概念
java.lang.Integer类内部包装了一个int类型的变量作为成员变量,主要用于实现对int类型的包装并提供int类型到String类之间的转换等方法。
3.2.2常用方法
3.2.3装箱和拆箱
在Java5发布之前使用包装类对象进行运算时,需要较为繁琐的“拆箱”和“装箱”操作;即运算前先将包装类对象拆分为基本类型数据,运算后再将结果封装成包装类对象。
从Java5开始增加了自动拆箱和自动装箱的功能。
// 1.使用构造方法来构造Integer类型的对象并打印
Integer it1 = new Integer(123);
System.out.println("it1 = " + it1); // 自动调用toString方法 123
Integer it2 = new Integer("456");
System.out.println("it2 = " + it2); // 456
// 上述方法已过时,建议使用valueOf方法取代之,相当于从int类型到Integer类型的转换,叫做装箱
Integer it3 = Integer.valueOf(123);
System.out.println("it3 = " + it3); // 123
// 相当于从String类型到Integer类型的转换
Integer it4 = Integer.valueOf("456");
System.out.println("it4 = " + it4); // 456 自动调用toString方法得到的是String类型
// 获取调用对象中的整数数值,相当于从Integer类型到int类型的转换,叫做拆箱
int ia = it4.intValue();
System.out.println("获取到的整数数据是:" + ia); // 456 得到的是int类型
// 2.从Java5开始增加了自动装箱和自动拆箱的机制
Integer it5 = 100; // 直接通过赋值运算符实现自动装箱
int ib = it5; // 直接通过赋值运算符实现自动拆箱
3.2.4自动装箱池
在Integer类的内部提供了自动装箱池技术,将-128到127之间的整数已经装箱完毕,当程序中使用该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率。
3.2.5装箱和拆箱笔试考点
Integer it6 = 128; //127;
Integer it7 = 128; //127;
Integer it8 = new Integer(128); //new Integer(127);
Integer it9 = new Integer(128); //new Integer(127);
System.out.println(it6 == it7); // 比较地址 false // true 地址一样
System.out.println(it6.equals(it7)); // 比较内容 true
System.out.println(it8 == it9); // 比较地址 false
System.out.println(it8.equals(it9)); // 比较内容 true
3.3 Double类
3.3.1基本概念
java.lang.Double类型内部包装了一个double类型的变量作为成员变量,主要用于实现对double类型的包装并提供double类型到String类之间的转换等方法。
3.3.2常用方法
3.4 Boolean类
3.4.1基本概念
java.lang.Boolean类型内部包装了一个boolean类型的变量作为成员变量,主要用于实现对boolean类型的包装并提供boolean类型到String类之间的转换等方法。
3.4.2常用方法
3.5 Character类
3.5.1基本概念
java.lang.Character类型内部包装了一个char类型的变量作为成员变量,主要用于实现对char类型的包装并提供字符类别的判断和转换等方法。
3.5.2常用方法
3.6 包装类(Wrapper)的使用总结
- 基本数据类型转换为对应包装类的方式:
调用包装类的构造方法或静态方法valueOf即可 - 获取包装类对象中基本数据类型变量数值的方式:
调用包装类中的xxxValue方法即可 - 字符串转换为基本数据类型的方式:
调用包装类中的parseXxx方法即可
四. 数学处理类
4.1 Math类
4.1.1基本概念
java.lang.Math类主要用于提供执行数学运算的方法,如:对数,平方根。
4.1.2常用方法
4.2 BigDecimal类
4.2.1基本概念
由于float类型和double类型在运算时可能会有误差,若希望实现精确运算则借助java.math.BigDecimal类型加以描述。
4.2.2常用方法
4.2.3 BigDecimal类实现精确计算
// 实现精确运算
System.out.println(0.1 + 0.2); // 0.30000000000000004
BigDecimal bd3 = new BigDecimal("0.1");
BigDecimal bd4 = new BigDecimal("0.2");
System.out.println("精确计算的结果是:" + bd3.add(bd4)); // 0.3
4.3 BigInteger类
4.3.1基本概念
若希望表示比long类型范围还大的整数数据,则需要借助java.math.BigInteger类型描述。