Java-Basic4
Before:忙里偷闲出一期extra,感觉后面时间越来越少了,Games101遥遥无期😭😭😭
Java Basic 4
Good program design
Correct / Easy to understand / Easy to modify / speed
Naming
Variables: nouns,lowercase first letter,capitals separating words
Methods: Verbs,lowercase first letter
Classes:nouns,uppercase first letter
Good Class Design
- Make fields and methods private by default 默认私有即可,无需强行private
- Only make methods public if you need to 只有必要时将函数设为公有
- If you need access to a field, create a method 我们建议将成员变量设成private,再通过get或set函数来获取值或修改值
Debugging
Interval Testing
Important cases
下界以下、等于下界、在区间内、等于上界、上界以上
Eclipse Warnings
May not be a mistake, but it likely is.
Always fix all warning!
Assertion 断言
断言用于验证代码是否按预期运行
- 当断言条件为真时,程序正常运行,不会有额外操作。
- 当断言条件为假时,程序会崩溃并抛出错误。
assert difference >= 0
这行代码表示断言变量difference的值大于或等于0,如果不满足该条,程序将报错。
Interfaces 接口
Java接口可以在不了解对象内部工作原理的情况下对其进行操作。
- 当处理相似但不完全相同的对象时,接口很有用
- 当想要使用他人编写的代码时,接口也很实用。通过定义接口,代码提供者可以明确对外提供的功能契约,使用者只需按照接口定义来调用,而无需关心具体实现细节
类比:C++中的抽象基类
1 |
|
1 |
|
implement关键字:用于类与接口之间的关系,表明一个类要实现接口中定义的所有抽象方法。一个类可以实现多个接口,从而具备多种不同的行为。(与后文提到的extends一个重要的区别)
Interface Notes 关于抽象基类
- 只有函数
- 不提供具体代码实现,只提供定义
- 一个类可以实现任意数量的接口
关于最后一点,在C++中,可以举个这样的例子: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#include <iostream>
// 第一个抽象类,模拟第一个接口
class Flyable {
public:
// 纯虚函数,模拟接口方法
virtual void fly() = 0;
virtual ~Flyable() {}
};
// 第二个抽象类,模拟第二个接口
class Swimmable {
public:
// 纯虚函数,模拟接口方法
virtual void swim() = 0;
virtual ~Swimmable() {}
};
// 一个类继承多个抽象类
class Duck : public Flyable, public Swimmable {
public:
// 实现Flyable接口的方法
void fly() override {
std::cout << "Duck is flying." << std::endl;
}
// 实现Swimmable接口的方法
void swim() override {
std::cout << "Duck is swimming." << std::endl;
}
};
Access
当通过接口来引用对象时,只能访问接口中定义的成员(方法、常量等)
举个例子:Drawable d = new BouncingBox(...);
d只能访问Grawable接口中定义的draw函数
相当于接口限定了外部可见功能的边界
Cast
1 |
|
则box可以调用BouncingBox类中
Inheritance
extends关键字:用于类与类之间的继承关系,即一个类(子类、派生类)可以继承另一个类(父类、基类)的属性和方法。
特别注意的是:在 Java 里,类的继承只支持单继承,也就是一个子类只能有一个直接父类。
class A extends B{}:A是B的子类
A拥有B的全部成员变量和函数,且可以增加自己的成员变量和函数
Example:
1 |
|
当然A也可以通过implement替换父类中的某个函数
Example:
1 |
|
Exceptions
Java中的报错信息主要为以下几种:
Java 通过创建异常对象并抛出的方式处理异常
throw 主动抛出异常
1 |
|
throws & throw:
1 |
|
- throws关键字:用于方法声明中,它告诉 Java 这个get方法在执行过程中可能会抛出ArrayOutOfBoundsException(数组越界异常)
- throw关键字:用于实际抛出一个ArrayOutOfBoundsException异常对象,并将index作为参数传递给异常构造函数,方便在异常处理时获取相关信息。
try-catch 捕获并处理异常
Java希望调用get函数来处理异常
- Catching it
- Rethrowing it
try块用于执行可能会抛出异常的代码。在执行过程中,一旦代码抛出异常,程序的执行流程就会立即改变。
catch块则是告诉 Java 当捕获到指定类型的异常时,应该执行什么样的处理逻辑。
1 |
|
1 |
|
I/O 文件读写
字节流
以字节为单位进行数据读写,适用于处理所有类型的数据,如图片、音频等二进制文件。
InputStream(输入字节流的抽象类)和OutputStream(输出字节流的抽象类)
字符流
以字符为单位进行数据读写,适合处理文本数据。主要的字符流类有Reader(输入字符流的抽象类)和Writer(输出字符流的抽象类)
1 |
|
END
MIT 6.092: Introduction To Programming In Java
完结撒花🎇🎆