常用的包

java.lang包 - 该包是Java语言的核心包,该包中的内容由Java虚拟机自动导入。如:String类、System类等。

java.util包 - 该包是Java语言的工具包,该包中提供大量工具类和集合类。如:Scanner类、Random类等。

java.io包 - 该包是Java语言的输入输出包,该包中提供读取文件的类。如:FileInputStream类、FileOutputStream类等。

java.net包 - 该包是Java语言的网络包,该包中提供大量网络编程类。如:ServerSocket类、Socket类等。

Object类

  • 基本概念

    java.lang.Object类是类层次结构的根类,任何类都是该类的直接或间接子类。

  • 常用的方法

    Object() - 使用无参的方式构造对象。

    boolean equals(Object obj) - 用于判断调用对象是否与参数对象相等。

    该方法默认比较两个对象的地址,与 == 运算符的结果一致。

    若希望该方法比较两个对象的内容,则需要重写该方法。

    int hashCode() - 用于获取调用对象的哈希码值(内存地址的编号)。

    若两个对象调用equals方法的结果相等,则各自调用hashCode方法的结果相同

    若两个对象调用equals方法的结果不相等,则各自调用该方法的结果不相同。

    因此上述两个方法中只要有一个重写,则另外一个也要重写。

    为了使得该方法的结果与equals方法保持一致,因此重写该方法。

    String toString() - 用于获取调用对象的字符串形式。

    该方法默认返回的字符串为:包名.类名@哈希码的十六进制形式。

    为了使得该方法返回更有意义的字符串内容,需要重写该方法。

    使用print()/println()打印引用或字符串连接引用时,会自动调用该方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public class Student {
private int id;
private String name;

public Student() {
super();
}
public Student(int id, String name) {
super();
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;
}

// 是为了比较两个对象的内容,因此需要重写equals方法 比较学号
@Override
public boolean equals(Object obj) {

// 1.若调用对象和参数对象的地址相同,则内容一定相同
if(this == obj) return true;
// 2.若调用对象不为空参数对象为空,则内容一定不相同
if(null == obj) return false;
// 3.若参数对象的类型和调用对象相同,则比较里面的学号是否相等
if(obj instanceof Student) {
/*Student ts = (Student)obj;
if(this.getId() == ts.getId()) {
return true;
} else {
return false;
}*/
return this.getId() == ((Student)obj).getId();
}
// 4.若参数对象和调用对象的类型不同,则内容一定不相同
return false;
}

// 为了使得该方法的执行结果与equals方法的结果保持一致,需要重写该方法
// 不再代表内存地址的编号
@Override
public int hashCode() {
//return getId();
int type = 12;
return type*31 + getId();
}

// 为了返回更有意义的字符串内容,需要重写该方法
@Override
public String toString() {
return "Student[id = " + getId() + ", name = " + getName() + "]";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class StudentTest {

public static void main(String[] args) {
// ctrl+shift+t 可以输入要查看源码的类型名称
// ctrl+o 可以搜索查看源码的方法名
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1001, "zhangfei");
// 当Student类中没有equals方法时,这里调用从Object类中继承的版本
// 默认比较两个对象的地址信息
// 当Student类中重写equals方法后,这里调用重写以后的版本 比较学号
boolean b1 = s1.equals(s2);
System.out.println("b1 = " + b1); // b1 = false true
System.out.println(s1 == s2); // false 比较地址
System.out.println("--------------------------------------");

// 当Student类中没有重写hashCode方法时,调用从Object类继承的版本
// 获取内存地址的编号
// 当Student类中重写hashCode方法后,这里调用重写以后的版本
int ia = s1.hashCode();
System.out.println("第一个对象的哈希码值是:" + ia); //
int ib = s2.hashCode();
System.out.println("第二个对象的哈希码值是:" + ib); //
System.out.println("--------------------------------------");

// 当Student类中没有重写toString方法时,调用从Object类中继承的版本
// 默认返回的字符串为:包名.类名@哈希码值的十六进制
// 当Student类中重写toString方法后,调用重写以后的版本
String str1 = s1.toString();
// cn.itxdl.day13.Student@55d
// Student[id = 1001, name = zhangfei]
System.out.println("获取到的字符串形式为:" + str1);
System.out.println(s1); // 自动调用toString()
String str2 = "hello" + s1; // 自动调用toString()
System.out.println("str2 = " + str2);
}
}

包装类和数学处理类

  • 包装类的概念

    在某些特殊场合(集合)中要求所有的数据内容都必须是对象,而基本数据类型声明的变量并不满足该要求,

    此时就需要对变量进行对象化处理打包成对象,该机制需要使用包装类。

  • 包装类的分类

    int => java.lang.Integer类

    char => java.lang.Character类

    其它类型都是将首字母变大写。

Integer类

  • 基本概念

    java.lang.Integer类里面提供了一个int类型的成员变量用于包装int类型。

    该类由final关键字修饰表示不能被继承。

  • 常用的方法

    Integer(int value) - 根据参数指定的整数来构造对象。

    Integer(String s) - 根据参数指定的字符串来构造对象。

    该类重写了equals()、hashCode()以及toString()方法。

    int intValue() - 用于获取调用对象中的int数值并返回。

    static Integer valueOf(int i) - 根据参数指定的整数值得到Integer类型的对象

    static int parseInt(String s) - 将字符串类型转换为int类型并返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class IntegerTest {

public static void main(String[] args) {
// 1.声明Integer类型的引用指向该类型的对象
Integer it1 = new Integer(10);
System.out.println("it1 = " + it1); // 自动调用toString it1 = 10

// 编译ok,运行发生NumberFormatException数字格式异常
//Integer it2 = new Integer("20a");
Integer it2 = new Integer("20");
System.out.println("it2 = " + it2); // it2 = 20 String类型的
System.out.println("------------------------------------");

// 2.调用成员方法进行测试
// 实现了从Integer类型到int类型的转换,叫做拆箱
int ia = it2.intValue();
System.out.println("获取到的整数是:" + ia); // 20 int类型的

// 实现了从int类型到Integer类型的转换,叫做装箱
Integer it3 = Integer.valueOf(ia);
System.out.println("it3 = " + it3); // 20 String类型
// 实现了从String类型到int类型的转换
int ib = Integer.parseInt("12345");
System.out.println("ib = " + ib); // 12345 int类型
System.out.println("------------------------------------");

// 从jdk1.5开始增加新特性: 自动装箱 和 自动拆箱
int ic = 30;
Integer it4 = ic; // 自动装箱
int id = it4; // 自动拆箱
}
}