Java语法学习

password
icon
AI summary
type
status
date
slug
summary
tags
category
Property
Nov 22, 2024 06:19 AM

1. Java语法


1.1 面向对象

C#一样,Java的所有变量和函数都要定义在class

1.2 内置数据类型

类型
字节数
举例
byte
1(8位)
123(-128~127)
short
2
12345
int
4
123456789
long
8
1234567891011L
float
4
1.2F
double
8
1.2,1.2D
boolean
1
true,,false
char
2
‘A’
(n位数二进制表示范围

1.3 常量

使用final修饰
 

1.4 类型转换

  • 显式转换:
  • 隐式转换:

1.5 输入

  • 方式1,效率较低,输入规模较小时使用
  • 方式2,效率较高,输入规模较大时使用,类似C++的scanf,注意需要抛异常

1.6 输出

  • 方式1,效率较低,输出规模较小时使用
  • 方式2,效率较高,输出规模较大时使用,注意需要抛异常。
 

2. 条件判断

2.1 if-else语句

与c++、Python类似

2.2 switch语句

与c++中类似

2.3 逻辑运算符与条件表达式

3 循环

3.1 while循环

与c++、python类似

3.2 do while循环

与c++、python类似
do while语句与while语句非常相似。唯一的区别是,do while语句限制性循环体后检查条件。不管条件的值如何,我们都要至少执行一次循环。

3.3 for循环

 

4 数组

4.1 初始化

与c++类似
初始化定长数组,长度可以是变量,可以在初始化时赋值

4.2 数组元素的读取与写入

与c++类似

4.3 多维数组

4.4 常用API

  • 属性length:返回数组长度,注意不加小括
  • Arrays.sort():数组排序
  • Arrays.fill(int[] a, int val):填充数组
  • Arrays.toString():将数组转化为字符串
  • Arrays.deepToString():将多维数组转化为字符串 数组不可变长
数组.length不加括号
字符串.length()加括号

5 字符串

5.1 String 类

初始化
只读变量,不能修改,例如
访问String 中的字符串:

常用API:

  • length():返回长度
  • split(String regex):分割字符串
  • indexOf(char c)、indexOf(String str):查找,找不到返回-1
  • equals():判断两个字符串是否相等,注意不能直接用==
  • compareTo():判断两个字符串的字典序大小,负数表示小于,0表示相等,正数表示大于
  • startsWith():判断是否以某个前缀开头
  • endsWith():判断是否以某个后缀结尾
  • trim():去掉首尾的空白字符
  • toLowerCase():全部用小写字符
  • toUpperCase():全部用大写字符
  • replace(char oldChar, char newChar):替换字符
  • replace(String oldRegex, String newRegex):替换字符串
  • substring(a, b): 返回[a, b)的子串

5.2 StringBuilder、StringBuffer

String不能被修改(修改了是创建新的串,速度很慢),如果打算修改字符串,可以使用StringBuilder和StringBuffer。
StringBuffer线程安全,速度较慢;StringBuilder线程不安全,速度较快(算法题一般用这个)。
涉及到字符串往后加可以用这两
常用API:
  • reverse():翻转字符串
 

6. 函数

Java的所有变量和函数都要定义在类中。
函数或变量前加static表示静态对象,类似于全局变量。 静态对象属于class,而不属于class的具体实例。
静态函数中只能调用静态函数和静态变量。
示例:
notion image
 
 

7 类与接口

class与C++、Python类似。

7.1 类

7.1.1 源文件声明规则

一个源文件中只能有一个public类。 一个源文件可以有多个非public类。 源文件的名称应该和public类的类名保持一致。 每个源文件中,先写package语句,再写import语句,最后定义类。

7.1.2 类的定义

public: 所有对象均可以访问 private: 只有自己可以访问
定义链表

7.1.3 类的继承

新的类和原类只有一点点不同,可能只是多了一个新的属性。 每个类只能继承一个类。

7.1.4 类的多态

同一个类的同一个函数可能有不同的行为

7.2 接口

interface与class类似。主要用来定义类中所需包含的函数。
接口也可以继承其他接口,一个类可以实现多个接口。

7.2.1 接口的定义

用来规范某些类必须要实现的函数,方便多人协作

7.2.2 接口的继承

每个接口可以继承多个接口

7.2.3 接口的实现

每个类可以实现多个接口
类实现接口以后,实例可以赋到接口引用上

7.2.4 接口的多态

7.3 泛型

类似于 C++templateJava 的类和接口也可以定义泛型,即同一套函数可以作用于不同的对象类型。 泛型只能使用对象类型,不能使用基本变量类型。
 

8 常用数据结构

8.1 List

接口:java.util.List<>
实现:
  • java.util.ArrayList<>:变长数组,不好删除,删除O(n),访问下标O(1)
  • java.util.LinkedList<>:双链表 添加删除O(1),访问下标O(n)
函数:
  • add():在末尾添加一个元素
  • clear():清空
  • size():返回长度
  • isEmpty():是否为空
  • get(i):获取第i个元素
  • set(i, val):将第i个元素设置为val

8.2 栈

类: java.util.Stack<>
函数:
  • push():压入元素
  • pop():弹出栈顶元素,并返回栈顶元素
  • peek():返回栈顶元素
  • size():返回长度
  • empty():栈是否为空
  • clear():清空
 

8.3 队列

接口:java.util.Queue<>
实现:
  • java.util.LinkedList<>:双链表
  • java.util.PriorityQueue<>:优先队列
默认是小根堆,大根堆写法:new PriorityQueue<>(Collections.reverseOrder()) 函数:
  • add():在队尾添加元素
  • remove():删除并返回队头
  • isEmpty():是否为空
  • size():返回长度
  • peek():返回队头
  • clear():清空

8.4 Set

接口:java.util.Set<K>
实现:
  • java.util.HashSet<K>:哈希表 无序集合,增删改查O(1)
  • java.util.TreeSet<K>:平衡树 有序集合,增删改查O(logn)
函数:
  • add():添加元素
  • contains():是否包含某个元素
  • remove():删除元素
  • size():返回元素数
  • isEmpty():是否为空
  • clear():清空
java.util.TreeSet多的函数:
  • ceiling(key):返回大于等于key的最小元素,不存在则返回null
  • floor(key):返回小于等于key的最大元素,不存在则返回null

8.5 Map

接口:java.util.Map<K, V>
实现:
java.util.HashMap<K, V>:哈希表 java.util.TreeMap<K, V>:平衡树 函数:
  • put(key, value):添加关键字和其对应的值
  • get(key):返回关键字对应的值
  • containsKey(key):是否包含关键字
  • remove(key):删除关键字
  • size():返回元素数
  • isEmpty():是否为空
  • clear():清空
  • entrySet():获取Map中的所有对象的集合
  • Map.Entry<K, V>:Map中的对象类型
  • getKey():获取关键字
  • getValue():获取值
java.util.TreeMap<K, V>多的函数:
  • ceilingEntry(key):返回大于等于key的最小元素,不存在则返回null
  • floorEntry(key):返回小于等于key的最大元素,不存在则返回null
 
上一篇
Java知识库(to 飞书)
下一篇
论文阅读(to Notion)
Loading...