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
    5
    package com.example.data;

    public class DataModel {
    // 数据模型相关的代码
    }

包的定义

在C++中,我们有:

1
2
3
4
5
6
7
namespace myapp {

void hello() {
std::cout << "Hello, World!" << std::endl;
}

} // namespace myapp

而相应的在Java中,我们有:

1
2
3
4
5
6
7
package com.example.myapp; // 文件路径

public class MyClass {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

定义的基本格式为:

1
2
3
4
package path.to.package.foo
class Foo{
...
}

包的使用方式

在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时看到了这样一个界面:
deepseekAPI
一直对API为何物充满了疑问,出于好奇还充了10块钱买了五百万tokens,但并不知道应该如何使用😅(最近资源紧张似乎已经买不了了🤣)
在看到这里时十分激动,于是立刻开始了学习!
首先,我先问了deepseek✌,API是什么?
APIanswer
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
3
4
ArrayList<Book> books = new ArrayList<Book>();
books.add(b);
books.set(0 , a); //相当于insert
books.remove(1); //相当于remove

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 无序但查找更快

Java-Basic3
http://example.com/2025/02/11/Java-Basic3/
Author
Yihan Zhu
Posted on
February 11, 2025
Updated on
February 17, 2025
Licensed under