Java 6 异常
Error和Exception什么是异常
异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等
异常发生在程序运行期间,它影响了正常的程序执行流程
简单分类
检查行异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译中不能简单地被忽略
运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略
错误ERROR:错误不等于异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到
异常体系结构
Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类
在Java API中已经定义了许多异常类吗,这些异常类分为两大类,错误Error和异常Exception
Error
Error类对象有Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关
Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执 ...
Java 5 面向对象
什么是面向对象
面向对象编程(Object-Oriented Programming,OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
三大特性
封装
继承
多态
从认识论角度考虑是先有对象后有类。对象是具体的事物。类,是抽象的,是对对象的抽象
从代码运行角度考虑是先有类后有对象。类是对象的模板
回顾方法的定义Demo
123456789101112131415161718192021package com.oop.demo1;import java.io.IOException;public class Demo01 { public static void main(String[] args) { } public String sayHello() { return "hello,world"; } public void print() { return; } public int ...
Java 4 Java数组
数组的声明和创建
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
123dataType[] arrayRefVar; //首选的方法或dataType arrayRefVar[]; //效果相同,但不是首选方法
Java语言使用new操作符来创建数组,语法如下:
1dataType[] arrayRefVar = new dataType[arraySize];
数组的元素是通过索引访问的,数组索引从0开始。
获取数组长度:
1arrays.length
Demo
123456789101112131415161718192021222324252627package com.zhang.array;public class Demo { //变量的类型 变量的名字 = 变量的值 //数组类型 public static void main(String[] args) { int[] nums; nums = new int[10]; nums[0] = 1; ...
Java 3 方法
什么是方法
Java方法是语句的集合,它们在一起执行一个功能
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样有利于我们后期的扩展。
12345678910111213141516171819202122package com.zhang.method;public class Demo { public static void main(String[] args) { int sum = add(1, 2); System.out.println(sum); test(); } public static int add(int a, int b) { return a + b; } public static void test() { ...
Java 2 Java流程控制
用户交互Scanner
之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Java.util.Scanner是Java5的特征,我们可以通过Scanner类来获取用户的输入
基本语法:
1Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
Demo1
12345678910111213141516171819package com.zhang.scanner;import java.util.Scanner;public class Demo { public static void main(String[] args) { //创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); Sy ...
Java 1 Java基础
注释Java中的注释有三种:
单行注释
多行注释
文档注释
1234567891011121314151617public class Demo { public static void main(String[] args) { //单行注释:只能注释一行文字 // //输出一个Hello,World! System.out.println("Hello,World!"); //多行注释:可以注释一段文字 /* 注释 */ /* 123 123 */ //JavaDoc:文档注释 /** */ /** * @Descrition HelloWorld * @Author */ }}
标识符和关键字Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符
所有的标识符都应该以字母(A-Z或者a-z ...
PE 6 文件数据目录与节表结构
数据目录(Data Directory)数据目录位于 IMAGE_OPTIONAL_HEADER 的末尾,是一个由 IMAGE_DATA_DIRECTORY 结构体数组构成的表。每个数据目录项描述了 PE 文件中某一特定数据结构的偏移和大小。常见的数据目录包括:
IMAGE_DIRECTORY_ENTRY_EXPORT(导出表)
作用:记录模块导出的函数和数据。对于 DLL 来说,这部分内容非常关键,系统及其他模块通过它来调用 DLL 中的接口。
IMAGE_DIRECTORY_ENTRY_IMPORT(导入表)
作用:记录模块依赖的外部函数和数据。通过导入表,操作系统能够在加载时将所需的外部函数地址填入模块的导入地址表。
IMAGE_DIRECTORY_ENTRY_IAT(导入地址表)
作用:保存导入函数的实际地址,加载器在加载时会根据导入表将相应地址写入 IAT,供程序调用时直接使用。
IMAGE_DIRECTORY_ENTRY_RESOURCE(资源表)
作用:存放程序所用的各种资源,如图标、对话框、字符串等。
IMAGE_DIRECTORY_ENTRY_BAS ...
PE 5 NT Optional Header 3
NT Optional Header 字段解析在 PE 文件(Portable Executable)的 IMAGE_OPTIONAL_HEADER 结构中,除了之前介绍的基地址、对齐、版本等字段外,还有一组与程序完整性、加载环境和内存资源管理相关的重要字段。下面依次对这些字段进行说明:
校验和(CheckSum)1DWORD CheckSum; //参考 校验和(驱动)
含义:
该字段存储 PE 文件的校验和,用于验证文件在存储或传输过程中的完整性。
作用:
对于大部分普通的 EXE 或 DLL 文件,校验和字段一般不影响加载过程,很多时候会被置为 0。
驱动程序(.sys 文件)要求校验和必须正确,系统在加载内核驱动时会验证该字段,确保文件未被破坏或篡改。
计算:
校验和通常由编译器或链接器计算,也可以通过专门工具(例如 CheckSumMappedFile API)重新计算校验值。
运行子系统(Subsystem)1WORD Subsystem; //重要 01(驱动) 02(窗口 ...
PE 4 NT Optional Header 2
NT Optional Header 重要字段解析在 NT 头中的 IMAGE_OPTIONAL_HEADER 结构中,包含了一些额外的重要字段(NT additional fields)。这些字段涉及 PE 文件的内存布局、对齐方式、版本信息以及镜像大小等内容,在 PE 文件的加载和运行过程中起着至关重要的作用。本文将详细解析这些字段的含义和用途。
代码与数据基地址12DWORD BaseOfCode; // 代码基地址(RVA)DWORD BaseOfData; // 数据基地址(仅适用于32位 PE)
BaseOfCode:
含义:该字段表示代码段(.text 节)在内存中的相对虚拟地址(RVA)。
作用:帮助加载器确定代码段的起始位置,以便正确映射和执行代码。
BaseOfData:
含义:表示数据段(.data 节)在内存中的相对虚拟地址(RVA)。
作用:用于确定全局变量和静态数据存放的位置,仅适用于 32 位 PE,在 64 位 PE 中该字段已被移除。
主模块基址(ImageBase) ...
PE 3 NT Optional Header 1
NT Optional Header 字段详解在 PE(Portable Executable)格式中,IMAGE_OPTIONAL_HEADER 扮演着非常重要的角色,它提供了操作系统加载程序时所需的关键信息。
Magic 字段123WORD Magic; IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
含义: Magic 字段用于标识可执行文件是32位还是64位。
对于32位 PE 文件,其值为 0x10b(IMAGE_NT_OPTIONAL_HDR32_MAGIC)。
对于64位 PE 文件,其值为 0x20b(IMAGE_NT_OPTIONAL_HDR64_MAGIC)。
作用: 加载器通过检测该字段来判断如何解析后续的可选头结构,从而选择正确的数据结构和加载方式。
链接器版本123//链接器的版本 参考使用的VS的版本BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;
含义: 这两个 ...