Java代码审计基础知识「一」-- java SE基础

Java代码审计基础知识「一」– java SE基础

– 前言 基础知识–打包JAVA

1
2
3
4
Java 分为三个主要版本
Java SE(Java Platform,Standard Edition,Java平台标准版)
Java EE(Java Platform Enterprise Edition,Java平台企业版)
Java ME(Java Platform,Micro Edition,Java平台微型版)

打包JAVA

  • 新建项目–默认下一步

  • 新建一个源码包,例如:com.aq

  • 再新建一个class 类,并添加测试代码

    • 文件点击—>项目结构添加对应的包和类,准备打包jar包
  • 构造工件


1、Java关键字

类别 关键字 说明
访问控制 private 私有的
protected 受保护的
public 公共的
default 默认
类别 关键字 说明
类、方法和变量修饰符 abstract 声明抽象
class
extends 扩充、继承
final 最终值、不可改变的
implements 实现(接口)
interface 接口
native 本地、原生方法(非 Java 实现)
new 创建
static 静态
strictfp 严格浮点、精准浮点
synchronized 线程、同步
transient 短暂
volatile 易失
类别 关键字 说明
程序控制语句 break 跳出循环
case 定义一个值以供 switch 选择
continue 继续
do 运行
else 否则
for 循环
if 如果
instanceof 实例
return 返回
switch 根据值选择执行
while 循环
类别 关键字 说明
错误处理 assert 断言表达式是否为真
catch 捕捉异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
try 捕获异常
类别 关键字 说明
包相关 import 引入
package
类别 关键字 说明
基本类型 boolean 布尔型
byte 字节型
char 字符型
double 双精度浮点
float 单精度浮点
int 整型
long 长整型
short 短整型
类别 关键字 说明
变量引用 super 父类、超类
this 本类
void 无返回值
类别 关键字 说明
保留关键字 goto 是关键字,但不能使用
const 是关键字,但不能使用

2、类、包、方法

1
2
可以对Java类中定义的属性和⽅法及类⾃身进⾏访问控制----规定不同的保护等级: public
protecteddefaultprivate
修饰符 同⼀个类 同⼀个包 ⼦类 整体
Private
default
Protected
Public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.ms08067_01;

public class Parent {
private int f1 = 1;
int f2 = 2;
protected int f3 = 3; // 被protected修饰的变量,可以在同一个包内的子类中访问
public int f4 = 4; // 被public修饰的变量,可以在任意的类中访问
private void fm1() {
System.out.println("in fm1() f1=" + f1);
} // 被private修饰的方法,只能在本类中访问
void fm2() { // 被default修饰的方法,可以在同一个包内的子类中访问
System.out.println("in fm2() f2=" + f2);
}
protected void fm3() {
System.out.println("in fm3() f3=" + f3);
}
public void fm4() {
System.out.println("in fm4() f4=" + f4);
}
}

3、IO流–File类

1
2
File 类代表与平台⽆关的⽂件和⽬录。
File 能新建、删除、重命名⽂件和⽬录,但 File 不能访问⽂件内容本身。如果需要访问⽂件内容本身,则需要使⽤输⼊/输出流
1
2
3
4
5
·~IO流分类
按流向分,输⼊流、输出流
按处理的单位,字节流(8 位的字节)、字符流(16 位的字节)
按流的⻆⾊,节点流:可以从⼀个特定的 IO 设备读/写数据的流,处理流:对⼀个已存在的流
进⾏连接和封装,通过封装后的流来实现数据读/写操作

4、API-String

1
2
3
4
5
常量对象:字符串常量对象是⽤双引号括起的字符序列,例如:"你好""12.97""boy"等。
String类较常⽤构造⽅法:
String(s)
String (char a[]),
String(char a[],int startIndex,int count)
1
2
3
4
5
6
7
8
9
10
11
12
13
~··String类常用方法
--
public boolean startsWith(String s)
public boolean endsWith(String s) :判断当前字符串对象的前缀(后缀)是否是参数s指定的字符串
public int compareTo(String s):按字典序与参数s指定的字符串⽐较⼤⼩
public int compareToIgnoreCase(String s)
public boolean contains(String s):判断当前字符串对象是否含有参数指定的字符串 s
public int indexOf (String s):从当前字符串的头开始检索字符串 s,并返回⾸次出现 s 的位置
indexOf(String s ,int startpoint)
lastIndexOf (String s)
public String substring(int startpoint):获得⼀个当前字符串的⼦串
substring(int start ,int end)
public String trim(): 得到⼀个 去掉前后空格后 的字符串对象
1
2
3
4
5
6
~·· 字符串与基本数据的相互转化
--
public static int parseInt(String s):可以将由“数字”字符组成的字符串
类似地,使⽤java.lang包中的 Byte、Short、Long、Float、Double类调相应的类⽅法可以将
由“数字”字符 组成的字符串,转化为相应的基本数据类型。
强转:⼤转⼩,⼩转⼤⾃动转换
1
2
3
4
5
~··StringBuffer类
--
String s = new String("我爱学习");
StringBuffer buffer = new StringBuffer(“我爱学习”);
buffer.append("伦理与道德");
1
2
3
4
5
6
7
8
9
10
11
12
~··StringBuffer类常⽤⽅法
-
StringBuffer append(String s)  StringBuffer append(int n)
StringBuffer append(Object o)  StringBuffer append(char n)
StringBuffer append(long n),StringBuffer append(boolean n),
StringBuffer append(float n),StringBuffer append(double n),
public chat charAt(int n )
public void setCharAt(int n ,char ch)
StringBuffer insert(int index, String str) :
public StringBuffer reverse()
StringBuffer delete(int startIndex, int endIndex)
StringBuffer replace( int startIndex ,int endIndex, String str)

5、多线程

1
通过实现 Runnable 接⼝、继承 Thread 、使⽤Callable三种⽅式创建线程
1
2
3
4
5
6
7
8
9
// Thread
class q1 extends Thread {
@Override
public void run() {}

// Runnable
class w2 implements Runnable {
@Override
public void run() {}

6、异常处理

java常⻅异常类

运⾏异常类:

异常 描述
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 请求的方法不存在

异常处理⼿段

捕获异常

1
2
使⽤ trycatch 关键字可以捕获异常。try/catch 代码块放在异常可能发⽣的地⽅。try/catch 代码
块中的代码称为保护代码,使⽤ try/catch 的语法如下
单重捕获
1
2
3
4
5
6
7
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
多重捕获
1
2
3
4
5
6
7
8
9
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}

……未完待续


Java代码审计基础知识「一」-- java SE基础
http://aqiao-jashell.github.io/2025/04/15/Java代码审计基础知识「一」-java-SE基础/
作者
CNAQ
发布于
2025年4月15日
许可协议