🚇Java语言学习
2023-1-14
| 2024-5-26
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
password
category
Property
May 26, 2024 10:17 AM
icon

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 源文件声明规则

    一个源文件中只能有一个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.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
     

    9 异常处理

    异常处理可以允许我们在程序运行时进行诊断和补救。—— 闫学灿

    9.1 Error与Exception的区别

    Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。此类异常是程序的致命异常,是无法捕获处理的。
    Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。 程序中应当尽可能去处理这些异常。

    9.2 Exception类的继承关系

    9.3 运行时异常和非运行时异常的区别

    运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等, 这些异常是非检查型异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
    非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,这些是检查型异常。一般情况下不自定义检查型异常。
    1. 内置异常类 非检查性异常
    异常 描述 ArithmeticException 当出现异常的运算条件时,抛出此异常。例如,一个整数”除以零”时,抛出此类的一个实例。 ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。 ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常。 ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常。 IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。 IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 IllegalStateException 在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 IllegalThreadStateException 线程没有处于请求操作所要求的适当状态时抛出的异常。 IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。 NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常。 NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。 StringIndexOutOfBoundsException 此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。 UnsupportedOperationException 当不支持请求的操作时,抛出该异常。 检查性异常:
    异常 描述 ClassNotFoundException 应用程序试图加载类时,找不到相应的类,抛出该异常。 CloneNotSupportedException 当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。 IllegalAccessException 拒绝访问一个类的时候,抛出该异常。 InstantiationException 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。 InterruptedException 一个线程被另一个线程中断,抛出该异常。 NoSuchFieldException 请求的变量不存在 NoSuchMethodException 请求的方法不存在 5. 内置异常方法 方法 说明 public String getMessage() 返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。 public Throwable getCause() 返回一个 Throwable 对象代表异常原因。 public String toString() 返回此 Throwable 的简短描述。 public void printStackTrace() 将此 Throwable 及其回溯打印到标准错误流 public StackTraceElement [] getStackTrace() 返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。 public Throwable fillInStackTrace() 用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。 6. 捕获异常
    } 7. 抛出异常 throw: 在函数内抛出一个异常。 throws:在函数定义时抛出一些可能的异常。
    检查型异常必须被捕获或者抛出。
    import java.io.IOException; import java.util.Scanner;
    public class Main {
    } 8. try-with-resources JDK7 之后,Java 新增的 try-with-resource 语法糖来打开资源,并且可以在语句执行完毕后确保每个资源都被自动关闭 。 try 用于声明和实例化资源,catch 用于处理关闭资源时可能引发的所有异常。
    import java.io.*;
    public class Main {
    }
    相关文章 :
  • Java
  • HJ机试题目整理Notion快捷键
    Loading...
    目录