Java基础小练习

前言

由于工(yi)作(qing)原因,最近有很多学习的机会[手动狗头]。
测试小姐姐们聚在一起搞了个Java小培训,目的是为了练习用Java和Selenium搭建自动化测试框架。又重新回顾了Java的基础知识,包括:

  • Java1: 数组/循环/运算符/方法
  • Java2: 类/封装/继承/多态
  • Java3: 异常/字符类/集合框架(Collection&Map)
    温故知新,为了证明自己又学了一遍,以及不能让练习的代码白写,就有了这篇博客🙈

代码练习

下边是学习过程中遇到的一些代码练习题,以及一些嗑过的知识点,总结一下。

模拟借书

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//练习点:try catch

String[] books = {"中国通史", "围城", "沉默的大多数", "古文观止", "局外人"};

public void CheckArg(int input)
{
if(!(input==1 || input==2))
throw new IllegalArgumentException();
}

public void SearchWithNo()
{

Scanner sc = new Scanner(System.in);
System.out.println("请输入图书序号:");
int index = sc.nextInt();

try{
String name = books[index];
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("该序号不存在~");
}

System.out.println("找到了!图书为:" + books[index]);
}

public void SearchWithName()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入图书名称:");
String name = sc.next();
boolean flag = false;

for (String book : books) {
if(book.equals(name))
{
flag = true;
break;
}
}

if(flag)
System.out.println("该图书存在~");
else
System.out.println("该图书不存在~");

}

public void Process(int arg)
{
if(arg == 1)
{
SearchWithNo();
}
else{
SearchWithName();
}
}

public static void main(String[] args) {

HelloWorld hello = new HelloWorld();

while (true)
{
System.out.println("请输: 1 -- 按照序号查找, 2 -- 按照书名查找");
Scanner sc = new Scanner(System.in);
try{
int input = sc.nextInt();
hello.CheckArg(input);
hello.Process(input);
}
catch (InputMismatchException e)
{
System.out.println("请输入数字哦~");
}
catch (IllegalArgumentException e)
{
System.out.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
//练习点:string类方法

public void CheckFile(String file)
{
if(file.contains(".") && file.indexOf(".")!=0 && file.endsWith(".java"))
System.out.println("文件名正确");
else
System.out.println("文件名无效");
}

public void CheckEmail(String email)
{
if(email.indexOf("@") < email.indexOf(".") && !email.endsWith("."))
System.out.println("邮件名正确");
else
System.out.println("邮件名无效");
}

public static void main(String[] args) {

HelloWorld hello = new HelloWorld();

System.out.println("输入文件名:");
Scanner sc = new Scanner(System.in);
String file = sc.next();
hello.CheckFile(file);

System.out.println("输入邮件名:");
Scanner sc1 = new Scanner(System.in);
String email = sc1.next();
hello.CheckEmail(email);

}

知识点

1. 深入理解对象引用及其赋值

1
Vehicle veh1 = new Vehicle();

这篇文章让我明白了上边的代码发生了什么。

2. 关于StringBuilder的equals方法

1
2
3
4
5
6
7
8
9
10
    public static void main(String[] args) {
StringBuilder s1 = new StringBuilder("123");
String s2 = s1.toString();
String s3 = s1.toString();
System.out.println(s1.equals(s2)); //false, 由于StringBuilder类没有重写父类Object类的equals方法, 所以比较的还是s1和s2的地址,和==作用相同
System.out.println(s1==s2); //编辑器报错,因为s1是StringBuilder类型,s2是String类型,不同类型的数据不能用==比较
System.out.println(s2.equals(s3)); // true, String类重写了Object类的equals方法,比较的是s2和s3地址中的内容
System.out.println(s2 == s3); //false, ==比较的是两个引用的地址
}
}

3. 通过重写Object超类的equals方法,实现比较两个类的内容相等

Object超类的equals方法调用了 == 比较两个对象的地址,但更多时候我们需要它来比较两个对象的内容,所以需要重写。这也是热门面试题之一。
怎么做,这篇文章写得很明白。

4. 关于Map的Key和Value能不能为空

其实还写了很多代码来着,不过就不贴了,自动化框架搭建好之后也会写博客总结的💪