Java

- 一个源文件中只能有一个 public 类,可以有多个非 public 类。
- 源文件的名称应该和 public 类的类名保持一致。如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java。
- Employee 类的构造函数名也为Employee,没有返回类型。
- Java 中每个文件必须有类(或接口、枚举、注解)
- 可以没有
public
类
- 但如果有
public
类,文件名必须和它一致
- 因此一般习惯是:一个文件一个
public
类,名字和文件一致。
- Java 的
import
不能直接导入函数或对象,只能导入类、接口等类型
修饰符 Modifiers
public + [static + final] + class MyClass
public + [static + final] + void + myFunction(int param)
访问修饰符: 从package和class两方面控制
Default: accessible only within the same package.
Public
: No Restriction
Private
: 类
Protected
: 类/子类
非访问修饰符
Final: variable, method, or class cannot be modified or extended.
Static: available outside any particular instance of the class. 该变量和Class声明同在。Class被load之后就存在。instance可以修改,表现为共用的量。
静态方法:
属于类,可以直接通过类名调用,无需创建实例。
Static Method 不能访问 Non-static(即this)。
Calculator.add(x, y) //static
Static Method=不调用this
Non-static=调用this
静态变量(类变量):
是一样的道理,属于Class的变量。
A有static变量id。修改a0.id,影响在a1.id中也能观察到。
为避免混淆static变量和instance变量,推荐使用A.id修改类变量。
数据类型:
内置:数字x6,char,Boolean。
引用:对象(Iterable, Map,String)。
Collection.stream()
List.add()

变量类型
Java 语言支持的变量类型有:Local Variables,Instance Variables,Class Variables/Static Variables,Parameters
Static
:
a single copy of the variable is created and shared among all objects at a class level.
Non-Static Variable:
Local Variables:
Instance Variables:
As instance variables are declared in a class, these variables are created when an object of the class is created and destroyed when the object is destroyed.
传参数
- Java 中的基本数据类型都采用值传递方式传递参数变量的值,Java 中的对象类型采用引用传递方式传递参数变量的值。(similar to js & py)
- Java 函数只支持 位置传参(positional arguments),不支持命名传参(keyword arguments),这是 Java 与 Python 等语言的一个重要区别。
输入输出
Mapper 就是“对象 <> 另一种格式”的转换器,比如 JSON、XML、YAML、CSV 等。
private final ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(obj)
mapper.readValue(json, Class)
抽象设计中,定义越少越高层(越抽象)。Java遵循接口和实现分离。接口定义共性,具体实现类实现差异。
子类继承父类,继承父类的所有方法。子类更具体。
List list = new ArrayList<>();
List 是接口。
ArrayList,LinkedList是实现。
- 重载(Overload) 发生在同一个类中,方法名相同但参数不同。
- Java 禁止多类继承,主要是为了避免“菱形继承问题”。(同一个方法有不同实现)
- public class D extends C implements A, B 是可以的。
流
Stream:通过Stream的方式实现了类似JS原生方法的流式处理。
List result = users.stream()
.filter(user -> user.getAge() > 20)
.sorted(Comparator.comparingInt(User::getAge))
.map(User::getName)
.collect(Collectors.toList());
Throwable
├── Error
└── Exception
├── RuntimeException
│ ├── NullPointerException
│ ├── IndexOutOfBoundsException
│ └── ...
├── IOException
├── SQLException
└── ...
Spring, Spring Boot, Spring Cloud
ssm: Spring, SpringMVC, MyBatis
MyBatis和JPA功能重叠
TS
class
extends
class
interface
extends
interface
class
implements
interface
override
const { name: userName, age: userAge }: { name: string; age: number } = user;