### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构无关、可移植、高性能、多线程和支持动态的网络计算环境。Java的目标之一是让程序员能够“编写一次,到处运行”(Write Once, Run Anywhere, WORA),这得益于其平台无关性的特点。 **1.2. Java的历史** Java的历史可以追溯到1991年,当时Sun Microsystems的一个项目团队开始开发一种名为Oak的新编程语言,旨在用于消费电子设备。由于市场需求变化,Sun将其目标转向了互联网应用,并将Oak重新命名为Java。1995年,随着网络浏览器插件HotJava的发布,Java正式成为了一种广受欢迎的编程语言。之后,Java不断进化和发展,成为企业级应用开发的标准之一。 **1.3. Java的版本** Java主要有两个主要版本:标准版(Java Standard Edition, Java SE)和企业版(Java Enterprise Edition, Java EE)。此外,还有针对移动设备的Java Micro Edition (Java ME)。自2006年起,Java采用代号进行版本管理,如Java 6、Java 7等,目前最新版本为Java 17及以上。每个版本都包含了新特性和改进,以适应不断变化的技术需求。 **1.4. Java的语言特性** Java具有多种特性,包括简单性、面向对象、平台无关性、健壮性、安全性、多线程支持以及动态性。这些特性使得Java不仅易于学习,而且能够构建高度复杂的应用程序。 **1.5. 开发环境搭建与配置** 为了开始Java编程,需要安装Java Development Kit (JDK)。JDK包含了编译器、解释器和其他必要的工具。此外,还可以选择使用集成开发环境(IDE)来简化开发过程。常见的IDE有Eclipse、IntelliJ IDEA等。 **1.6. API帮助文档** Java API文档是Java开发者的重要资源,提供了所有Java标准库的详细说明,包括类、接口、枚举和异常等的使用方法。 **1.7. 集成开发工具** - **1.7.1. 常用的集成开发工具** - Eclipse - IntelliJ IDEA - NetBeans - JDeveloper - Visual Studio Code (通过插件支持) - **1.7.2. Eclipse详解** Eclipse是一款开源的集成开发环境,支持多种编程语言,包括Java。它具有强大的编辑功能、调试工具和扩展能力。 - **1.7.3. Eclipse常用设置** - 工作空间配置 - 编辑器设置 - 构建路径调整 - **1.7.4. Eclipse常用快捷键** - Ctrl + Space (内容辅助) - Ctrl + Shift + O (组织导入) - Ctrl + D (删除行) #### 二、Java语言基础 **2.1. Java主类结构** Java程序通常包含一个main方法作为入口点。例如: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` **2.2. 数据类型** - **2.2.1. 基础数据类型** - 整型:byte、short、int、long - 浮点型:float、double - 字符型:char - 布尔型:boolean - **2.2.2. 类型的转换优先级** - 自动提升:byte → short → char → int → long → float → double - 强制类型转换:需要显式指定类型转换,可能会导致数据丢失。 - **2.2.3. 自动类型转换** - 当两个不同类型的变量相加时,较小的数据类型会被提升到较大的数据类型。 - 例如:`int a = 10; byte b = 2; int c = a + b;` - **2.2.4. 强制类型转换** - 显式地将一个类型的值转换为另一种类型。 - 例如:`int a = 10; byte b = (byte)a;` **2.3. 转义字符** Java支持多种转义字符,如`\n`(换行)、`\t`(制表符)、`\"`(双引号)等,用于在字符串中插入特殊字符。 **2.4. 标识符与关键字** - **标识符**:用于命名变量、类、方法等。应遵循一定的命名规则,如不能以数字开头、区分大小写等。 - **关键字**:Java中的保留字,用于表示特定的操作或控制结构,如`class`、`public`、`static`等。 **2.5. 变量与常量** - **2.5.1. 常量** - 使用`final`关键字定义不可变的变量。 - 通常用全大写字母表示。 - **2.5.2. 变量** - 定义变量时需要指定数据类型。 - 变量可以在任何作用域内声明,但只能在其声明的作用域内访问。 **2.6. 运算符** - **2.6.1. 赋值运算符与算数运算符** - `=`用于赋值 - `+`、`-`、`*`、`/`、`%`用于算术运算 - **2.6.2. 关系运算符** - `<`、`>`、`<=`、`>=`、`==`、`!=`用于比较两个值之间的关系。 - **2.6.3. 逻辑运算符** - `&&`、`||`、`!`用于逻辑判断。 - **2.6.4. 位运算符** - `&`、`|`、`^`、`~`、`<<`、`>>`、`>>>`用于位级别的操作。 - **2.6.5. 条件运算符** - `?:`三元运算符,根据条件表达式的值返回不同的结果。 - **2.6.6. 运算符的优先级** - Java中的运算符有不同的优先级,如乘法优先于加法。 **2.7. 条件语句** - **2.7.1. if语句** - 单分支结构,根据条件执行相应的代码块。 - **2.7.2. ifelse语句** - 双分支结构,如果条件成立则执行if块,否则执行else块。 - **2.7.3. If……elseif……else语句** - 多分支结构,根据多个条件执行不同的代码块。 - **2.7.4. 嵌套的if语句** - 在一个if语句中嵌套另一个if语句,实现更复杂的条件判断。 - **2.7.5. switch分支结构** - 根据变量的值执行不同的代码块,适用于多个条件的情况。 **2.8. 循环语句** - **2.8.1. while循环** - 当条件为真时重复执行代码块。 - **2.8.2. do…while循环** - 至少执行一次循环体,然后根据条件决定是否继续循环。 - **2.8.3. for循环结构及执行顺序** - 初始化、条件判断、更新三个部分依次执行。 - **2.8.4. 增强for循环(foreach)** - 用于遍历数组或集合,语法更简洁。 - **2.8.5. break关键字** - 用于提前退出循环。 - **2.8.6. continue关键字** - 用于跳过当前循环的剩余部分,直接进入下一次循环。 - **2.8.7. return关键字** - 用于从方法中返回值并结束该方法的执行。 - **2.8.8. 多重循环** - 在一个循环中嵌套另一个循环,实现更加复杂的迭代操作。 **2.9. 数组** - **2.9.1. 什么是数组** - 数组是一种基本的数据结构,用于存储相同类型的一系列元素。 - **2.9.2. 数组的应用** - 存储和操作一系列同类型的数据。 - **2.9.3. 使用Arrays类操作数组** - 提供了多种方法来操作数组,如排序、查找等。 - **2.9.4. 数组常用算法** - 排序算法:冒泡排序、快速排序等。 - 查找算法:二分查找等。 - **2.9.5. 多维数组** - 数组的数组,用于存储二维或多维数据。 **2.10. 代码注释与代码规范** - **代码注释** - 单行注释:`//` - 多行注释:`/* */` - 文档注释:`/** */` - **代码规范** - 遵循统一的编码风格,如命名规则、缩进等。 - 保持代码清晰易读,合理使用空行和空白字符。 #### 三、面向对象 **3.1. 类和对象** - **3.1.1. 类和对象的关系** - 类是对象的模板,对象是类的具体实例。 - 对象具有状态(属性)和行为(方法)。 - **3.1.2. 类** - 定义了一组共同属性和方法的模板。 - **3.1.3. 对象(万物皆对象)** - 具体的实例,由类创建而来。 - **3.1.4. 属性和方法** - 属性用于描述对象的状态。 - 方法用于描述对象的行为。 - **3.1.5. 成员变量(属性)和局部变量** - 成员变量定义在类中,可以在整个类的方法中使用。 - 局部变量定义在方法中,仅在该方法的作用域内有效。 - **3.1.6. 构造方法** - 特殊的方法,用于初始化对象的状态。 - **3.1.7. 方法重载** - 同一个类中可以有多个同名方法,只要它们的参数列表不同即可。 - **3.1.8. 迭代与递归** - 迭代通过循环实现。 - 递归通过方法自身调用实现。 - **3.1.9. 访问修饰符** - `public`、`protected`、`private`、`default`,用于控制类、属性和方法的访问级别。 - **3.1.10. this关键字的使用** - 指向当前对象的引用。 - **3.1.11. static关键字的使用** - 用于定义静态变量或方法,不依赖于对象实例存在。 - **3.1.12. final关键字的使用** - 用于定义不可修改的变量或方法。 - **3.1.13. 类的初始化加载顺序** - 类加载时,首先初始化静态变量,然后初始化非静态变量,最后执行构造方法。 **3.2. 封装** - **封装**是指隐藏对象的实现细节,只暴露必要的接口。封装提高了代码的安全性和可维护性。 **3.3. 继承extends** - **3.3.1. super关键字** - 用于访问父类中的方法或属性。 - **3.3.2. Object** - 所有Java类的根类,提供了一些基本的方法如toString()、equals()等。 **3.4. 重写** - **3.4.1. 方法重写的规则** - 必须是在子类中重写父类的方法。 - 方法名、参数列表和返回类型必须完全相同。 - 访问修饰符不能比父类更严格。 - **3.4.2. 重载与重写** - 重载发生在同一个类中,方法名相同但参数列表不同。 - 重写发生在子类与父类之间,方法名、参数列表和返回类型必须相同。 **3.5. 多态** - **3.5.1. 多态的优点** - 提高代码的可复用性。 - 提升程序的灵活性。 - **3.5.2. 多态存在的必要条件** - 继承:存在父类和子类。 - 重写:子类重写了父类的方法。 - 上转型:子类对象以父类引用类型出现。 - **3.5.3. 转型** - `向上转型`:子类对象引用父类类型。 - `向下转型`:父类对象引用子类类型,需要进行类型检查。 **3.6. 抽象abstract** - **3.6.1. 抽象类** - 包含抽象方法的类称为抽象类,不能被实例化。 - 抽象方法没有方法体,子类必须实现所有的抽象方法。 - **3.7. 接口Interface** - **3.7.1. 接口特性** - 接口定义了一组方法签名,没有实现细节。 - 接口可以被多个类实现,实现接口的类必须实现其中的所有方法。 - **3.7.2. 接口的声明interface** - 使用`interface`关键字声明接口。 - **3.7.3. 接口的实现implements** - 类实现接口时,需要使用`implements`关键字。 - **3.7.4. 使用原则** - 接口用于定义行为规范。 - 实现接口的类必须提供具体实现。 - **3.7.5. 抽象类和接口** - 抽象类可以包含实现细节,接口只定义方法签名。 - 类只能继承一个抽象类,但可以实现多个接口。 **3.8. 内部类** - **3.8.1. 为什么要使用内部类?** - 内部类可以更好地访问外部类的成员变量和方法。 - 可以创建与外部类关联更紧密的类。 - **3.8.2. 内部类的特性** - 内部类可以访问外部类的私有成员。 - 内部类本身可以是抽象的或具体的。 - **3.8.3. 内部类的分类** - 成员内部类 - 局部内部类 - 静态内部类 - 匿名内部类 - **3.8.4. 内部类的使用** - 创建内部类的实例时,需要先创建外部类的实例。 **3.9. 面向对象设计** - **3.9.1. 面向对象设计的七大原则** - 单一职责原则:一个类只负责一项职责。 - 开闭原则:对扩展开放,对修改关闭。 - 里氏替换原则:子类可以替换父类出现在父类能够出现的任何地方。 - 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象。 - 接口隔离原则:客户端不应该依赖它不需要的接口。 - 迪米特法则:一个对象应该对其他对象有尽可能少的了解。 - 合成复用原则:尽量使用合成/聚合的方式,而不是使用继承。 - **3.9.2. 面向对象设计的三大优势** - 可复用性:通过封装、继承和多态提高代码的复用性。 - 可维护性:良好的设计有助于降低维护成本。 - 扩展性:容易添加新的功能而不会影响现有代码。 #### 四、Java异常及异常处理机制 **4.1. 关键字** - `try`:用于包裹可能抛出异常的代码块。 - `catch`:用于捕捉并处理异常。 - `finally`:无论是否发生异常都会执行的代码块。 - `throw`:手动抛出异常。 - `throws`:声明方法可能抛出的异常。 **4.2. 什么是异常** 异常是指程序在运行过程中发生的错误或意外情况,它可以被捕获和处理,从而避免程序崩溃。 **4.3. 什么是异常处理** 异常处理是一种机制,用于识别和响应运行时错误。Java的异常处理机制主要包括try-catch-finally语句和throws声明。 **4.4. 异常的分类** - **编译时异常**(Checked Exceptions):必须在编译时处理的异常。 - **运行时异常**(Runtime Exceptions):在运行时发生的异常,通常由程序逻辑错误引起。 **4.5. Java中常见的异常** - `NullPointerException`:试图访问空对象的成员。 - `ArrayIndexOutOfBoundsException`:数组索引越界。 - `IOException`:输入输出操作相关的异常。 - `ClassNotFoundException`:找不到类。 **4.6. 使用try-catch-finally捕获异常** ```java try { // 可能抛出异常的代码 } catch (Exception e) { // 异常处理 } finally { // 清理资源 } ``` **4.7. 使用throws声明异常** 当方法可能抛出异常但不想在该方法中处理时,可以使用`throws`关键字声明。 ```java public void divide(int a, int b) throws ArithmeticException { int result = a / b; } ``` **4.8. 使用throw抛出异常** 手动抛出异常时,使用`throw`关键字。 ```java if (a == 0) { throw new ArithmeticException("除数不能为零"); } ``` **4.9. 自定义异常** 可以通过继承`Exception`类或其子类来创建自定义异常。 ```java public class MyException extends Exception { public MyException(String message) { super(message); } } ``` **4.10. 类Exception的常用方法** - `getMessage()`:获取异常消息。 - `printStackTrace()`:打印异常堆栈跟踪。 - `getCause()`:获取导致此异常的原始原因。 **4.11. 异常处理原则** - 尽量避免抛出异常。 - 不要忽略异常,总是进行适当的处理。 - 使用异常来处理异常情况,而不是控制流。 #### 五、设计模式 **5.1. 什么是模式** 设计模式是解决特定问题的通用解决方案。它不是完成任务的具体代码,而是指导如何解决问题的模板。 **5.2. 设计模式分类** - **5.2.1. 创建型模式** - 单例模式:确保一个类只有一个实例。 - 工厂模式:提供创建对象的接口。 - 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口。 - 建造者模式:将一个复杂对象的构建与其表示分离。 - 原型模式:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 - **5.2.2. 结构型模式** - 适配器模式:将一个类的接口转换成客户希望的另一个接口。 - 桥接模式:将抽象与实现分离,使它们可以独立变化。 - 装饰器模式:动态地给一个对象添加一些额外的职责。 - 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 - 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。 - 外观模式:为子系统中的一组接口提供一个一致的界面。 - 享元模式:运用共享技术有效地支持大量细粒度的对象。 - **5.2.3. 行为型模式** - 策略模式:定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。 - 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 观察者模式:定义了对象间的一种一对多的依赖关系。 - 命令模式:将一个请求封装为一个对象,从而使用户可用不同的请求来参数化对象。 - 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 - 迭代器模式:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。 - 中介者模式:定义一个中介对象来封装一系列的对象交互。 - 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 - 状态模式:允许一个对象在其内部状态改变时改变它的行为。 - 访问者模式:表示一个作用于某对象结构中的各元素的操作。 - 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 **5.3. 单例模式** - **5.3.1. 什么是单例模式** - 单例模式确保一个类只有一个实例,并提供一个全局访问点。 - **5.3.2. 简介** - 单例模式的核心是构造函数私有化,同时提供一个静态方法获取唯一实例。 Java是一门功能强大且灵活的编程语言,具有丰富的特性和广泛的应用领域。通过对Java基础知识的学习,开发者能够掌握如何使用Java来开发高质量的软件产品。无论是初学者还是有经验的开发者,都能够从Java的基础知识中获得有价值的见解。
剩余48页未读,继续阅读
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 一个简单的实用脚本工具资源
- 基于Carsim与Matlab Simulink联合仿真的线控转向容错控制模型,旨在提高四轮电动汽车转向系统的可靠性和容错性
- 毕业设计开题答辩指南来了
- Python气象绘图-风场所使用的风场数据(v)
- Python气象绘图-风场所使用的风场数据(u)
- BIC光子晶体在动量空间的偏振拓扑特性远场偏振态计算 PhysRevLett.124.153904 COMSOL 仿真六边形光子
- Comsol 二维水力压裂相场模型 含参考文献
- 基于Cruise平台搭建整车部件等动力学模型,基于MATLAB Simulink平台完成整车控制策略的建模,策略模型具备再生制动
- lunwen复现-基于领域相似度的复杂网络节点重要度评估算法 编写程序代码matlab 复现算法仿真
- c#联合opencvsharp开发的视觉源码程序 包含模板匹配,找线找圆,预处理等功能 全部源码,包含图像显示控件,绘制roi