Java-Basic3
Before:Welcome back to JaneZ’s Java Learning!
Java Basic 3
访问权限
Public VS Private ————对于fields和methods而言
Public: 可以被其他对象调用 Private: 只可被类内成员调用
那么为什么要对访问权限进行公有和私有的区分呢?
- 为了保护私有信息
- 声明其他对象应该如何调用当前类
- 将实现与接口分离————意味着你可以自由地修改类的内部实现,而不影响使用该类的其他代码,只要公共接口保持不变
类作用域
在函数中定义的变量只能在该函数中进行访问,而在类中定义的变量可以在类的所有函数中进行访问
函数级别的变量只在函数内部有效,而类级别的变量在整个类中都有效
this关键字
用于引用当前对象的实例,其作用在于:
- 明确作用域(Clarifies scope):
当类中的成员变量和方法参数同名时,使用this关键字可以明确指出要访问的是成员变量而不是参数。 - 表示“my object”:
this关键字用于引用当前对象,即调用方法的对象。
Java的包 Package
类似于C++中的namespace(名字空间)
- 每个类都属于一个包,包是组织类的一种形式
- 同一包中的类具有相似的用途。例如,所有与图形用户界面相关的类可能放在一个名为 gui 的包中。
- 包只是目录
- 需要导入其他包中的类
1
2
3
4
5package com.example.data;
public class DataModel {
// 数据模型相关的代码
}
包的定义
在C++中,我们有:
1 |
|
而相应的在Java中,我们有:
1 |
|
定义的基本格式为:
1 |
|
包的使用方式
在C++中,我们有using namespace std
而相应的在Java中,我们有:import path.to.package.foo.Foo
为什么包?(好奇怪的句子
- 组合相似功能
包可以用来将功能相似的类组合在一起。这样做可以提高代码的模块化,使得相关功能更加集中和易于管理。 - 区分相似名称
包还可以用来区分具有相似名称的类,以避免命名冲突。
例如,shopping.List 和 packing.List 这两个类虽然名称相似,但它们位于不同的包中,分别代表购物清单和打包清单。通过使用包,我们可以清楚地区分这两个类,即使它们的名称相同。
特殊的包
首先,同一包内的类可以互相访问。
其次,还有一个比较特殊的包:java.lang
所有位于 java.lang 包中的类都不需要显式导入就可以在任何地方使用。这是Java语言规范的一部分,java.lang 包被视为Java程序的基础包,其中包含了一些最常用的类,如 String、Math、System 等。
Java API
起因是在使用deepseek时看到了这样一个界面:
一直对API为何物充满了疑问,出于好奇还充了10块钱买了五百万tokens,但并不知道应该如何使用😅(最近资源紧张似乎已经买不了了🤣)
在看到这里时十分激动,于是立刻开始了学习!
首先,我先问了deepseek✌,API是什么?
Application Programing Interface!
好像也没有那么抽象嘛?我的理解是就是一种很不错的工具,通过标准化接口简化开发,提升效率,广泛应用于数据访问、服务集成和微服务架构中。而我们要讨论的Java API,其实就类似于C++/Python中的标准库(standard library)
Java语言包含了大量的包(packages)和类(classes),开发者可以利用Java提供的现有类来完成特定的任务,而不需要从头开始编写代码,这样可以节省时间和努力。
C++中的标准模板库(STL)我们已经挺熟悉的了,那么接下来,让我们看看Java API中有什么相应的数据结构:
1.ArrayList
我们知道在C++中有std::vector,可以动态地调节数组的大小,而在Java中,有一个具有同样功能的容器————ArrayList,其用法如下:
1 |
|
2.Set
同样的,我们知道在C++中有std::set,表示集合,而在Java中,有一个具有相似功能的容器————Set,其特点如下:
- 集合中每个对象只存储一份,即不允许重复
- 集合中的对象没有索引,不能通过索引访问对象
下面是两种主要的Set实现: - TreeSet,对应C++中的std::set 有序
- HashSet,对应C++中的std::unordered_set 无序但查找更快
3.Map
更加同样的,我们知道在C++中有std::map,表示映射,而在Java中,有一个具有相似功能的容器————Map,其特点如下:
- 存储的是键值对(key-value pair)
- 可以通过查找键(key)来获取对应的值(value)
下面是两种主要的Map实现: - TreeMap,对应C++中的std::map 有序
- HashMap,对应C++中的std::unordered_map 无序但查找更快