JavaSE笔记-入门基础
初识Java语言什么是计算机编程语言 人类语言:人与人之间用于沟通的一种方式,例如中国人与中国人用普通话沟通,而中国人要和外国人交流,要学习外语 计算机语言:人与计算机之间进行交流和沟通的工具,用于描述计算机所需执行的任务和操作 计算机语言的演变计算机语言的发展历史可以追溯到计算机诞生之初。随着计算机技术的不断进步和发展,计算机语言也经历了多个阶段的演变。 机器语言时代:计算机最早只能理解机器语言,即由0和1组成的二进制代码。但是,编写和理解机器语言代码非常困难且容易出错。 汇编语言时代:为了简化程序员的工作,汇编语言应运而生。汇编语言使用助记符(mnemonics)代替了二进制指令,使得代码更易读写,但仍然需要直接操作底层硬件。 高级语言的出现:20世纪50年代和60年代,高级语言开始出现。这些语言提供了比机器语言和汇编语言更高层次的抽象,使得程序员可以更容易地编写和理解代码。FORTRAN、COBOL、ALGOL等是早期的高级语言。它们大幅度提高了代码的可读性,但仍然需要通过编译器将高级代码转换为机器语言来执行。 C语言的崛起:20世纪70年代,C语言是由贝尔实验室的Denni ...
JavaSE笔记-面向对象
面向对象 Java是一门面向对象设计的语言,对 Java语言来说,一切皆是对象。 面向过程思想什么是过程?过程是指一系列的操作步骤或算法,每个步骤按照特定的顺序执行,直至达到预期的结果。比如现在要制作一杯咖啡,可以将制作咖啡的过程进行分解 研磨咖啡豆:将咖啡豆研磨成粉末状。 加水:将适量的水倒入咖啡壶中。 冲泡咖啡:将咖啡粉末放入滤网中,然后将滤网放入咖啡壶中,倒入热水冲泡。 倒出咖啡:将冲泡好的咖啡倒入杯子中。 加调料:根据个人口味加入糖、牛奶等调料。 什么是面向过程?面向过程是一种基于功能的编程思想,强调了解决问题的步骤和流程,以过程/函数为最小单位,考虑怎么做。 对于一个问题,在面向过程编程中,问题会被划分为多个步骤或函数,每个步骤或函数负责完成特定的功能,函数之间通过参数传递数据进行交互,通过调用函数来实现功能。这种方式更注重解决问题的步骤和流程,将问题划分为多个子任务,并按照一定的顺序执行这些子任务来解决问题。 假如现在有一个问题:如何把大象塞进冰箱?以面向过程的思想解决问题,可能需要以下的步骤: 第一步:打开冰箱门。 第二步:把大象放进冰箱。 第三步:关闭 ...
JavaSE笔记-常用类
Object类Object类简介Object类是所有Java类的根父类,如果在类的声明中未明确使用extends关键字指明其父类,则默认父类为java.lang.Object类,也就是说子类可以使用 Object 的所有方法。 1234567public class Person { ... } // 等价于 public class Person extends Object { ... } Object类的方法 方法 简介 getClass() 获取对象的运行时 class 对象,通常是和 Java 反射机制搭配使用的 hashCode() 返回当前对象的哈希码值。 equals(Object obj) 比较当前对象与指定对象是否相等。 toString() 返回当前对象的字符串表示。 clone() 保护方法,实现对象的浅复制,默认的 clone 方法是浅拷贝。只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常。 notify() ...
JavaSE笔记-异常处理机制
异常概述(1)在Java语言中,将程序运行过程中,由于某些原因导致程序出错,从而结束程序运行,称为“异常” (开发过程中的语法错误和逻辑错误不是异常) (2)在 Java 中一个异常的产生,主要有如下三种原因 异常事件 简介 Error(错误) Java 内部错误发生异常,Java 虚拟机产生的异常,Java虚拟机无法解决的严重问题,一般不编写针对性的代码进行处理例如:JVM系统内部错误、资源耗尽等严重情况 Exception(异常) 因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理例如:空指针访问、数组角标越界、试图读取不存在的文件、网络连接中断等这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常 throw生成 通过 throw 语句手动生成的异常这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息 (3)异常主要分为两种,分别是编译时异常和运行时异常(只要一个异常类的祖先类中有RuntimeException,那么就是运行时异常,否则是编译时异常) 异常分类 简介 编译时异常 是指编译器要求必 ...
JavaSE笔记-集合
Java集合框架概述集合是什么?在Java中,集合是一种用于存储和操作一组对象的容器,定义在java.util包下。 有数组为什么还要有集合?在Java中,数组(Array)是一种固定长度、连续的数据结构,用于保存多个相同类型的对象或数据。数组(Array)在创建时长度就固定,无法动态改变长度,如果需要改变数组的长度,需要通过数组拷贝的方式操作,不太方便。 1int[] array = {1, 2, 3, 4, 5}; 为了解决数组长度固定和操作不便的问题,Java提供了一些集合类用于存储、操作和处理数据集合,这些集合类属于Java集合框架(Collections Framework),相比数组,集合具有以下优势: 动态改变长度:集合的长度是动态可变的,可以根据需要自动扩展或缩小。 提供丰富的操作方法:集合类提供了许多方便的方法来添加、删除、查找、遍历等操作,简化了对集合的操作。 支持泛型:集合类支持泛型,可以在编译时强制类型检查,提高代码的安全性和可读性。 提供迭代器:集合类提供了迭代器(Iterator)来遍历集合元素,可以方便地进行循环操作。 内置算法和排 ...
JavaSE笔记-泛型
泛型概括什么是泛型?Java 泛型(generics)是 JDK 5 中引入的一个新特性,提供了编译时类型安全检测机制,允许在定义类、接口或方法时使用一个标识来表示某个属性的类型、方法的返回值、参数类型 为什么使用泛型?泛型是Java编程语言中的一项重要特性,它提供了以下几个主要的好处和用途: 保证了类型的安全性:使用泛型可以在编译时期捕获类型错误,避免在运行时期出现类型转换异常,减少了因类型不匹配而引起的潜在错误。 避免频繁的类型转换操作:在泛型中,类型转换是隐式的,并不需要显式地进行类型转换,使用泛型可以避免频繁的类型转换操作(装箱、拆箱),从而减少了代码中的冗余部分,使代码更简洁易读 提高了代码的可读性:通过在定义类、接口或方法时使用泛型,能够明确指定类或方法的输入和输出的数据类型,从而使得代码更加具有自描述性 使用案例(1)泛型可以统一集合中的数据类型,提高安全性,减少强制类型转换,不使用泛型时,会出现一些问题 12345678910111213141516171819public class Demo { public static void main(S ...
JavaSE笔记-IO流
IO流简介(1)IO流是一个抽象的概念,可以理解为一段单向的数据序列,是Java实现输入输出的基础 概念 简介 流(Stream) 数据在程序(内存)和数据源(文件)之间经历的路径 输入流(Input) 数据从数据源(文件)到程序(内存)的路径 输出流(Output) 数据从程序(内存)到数据源(文件)的路径 (2)Java把所有的传统的流类型都放到在java.io包下,用于实现输入和输出功能,输入也叫做读取数据,输出也叫做作写出数据 (3)Java的IO模型使用装饰者模式(Decorator),按功能划分流(Stream),您可以动态装配这些流(Stream),以便获得您需要的功能 IO流分类抽象基类Java的IO流共涉及40多个类,实际上非常规则,都是从4个抽象基类派生,派生出来的子类名称都是以其父类名作为子类名后缀,由于抽象基类都是抽象类,本身不能创建实例,但是继承它们的子类有对应的功能 分类 抽象基类 字节输入流 InputStream 字节输出流 OutputStream 字符输入流 Reader 字符输出流 Writer ...
JavaSE笔记-网络编程
网络编程简介什么是计算机网络?计算机网络是将分散在不同地点的计算机设备通过传输介质(如光纤、电缆等)和通信设施(如路由器、交换机等)互连起来的系统。通过网络连接,计算机设备可以进行资源共享和数据传输,包括文件传输、远程登录、电子邮件、网页浏览等。 什么是网络编程?网络编程就是编写程序,使互联网上的两个或多个设备(如计算机)之间进行数据传输。通过网络编程,可以实现客户端和服务器之间的通信,例如Web应用程序中的前端与后端之间的通信,或者两台计算机上的自定义应用程序之间的通信。 怎样实现网络编程? 选择编程语言:首先,选择一种适合网络编程的编程语言。常用的语言包括Java、Python、C++等,它们都提供了网络编程相关的库和API。 确定网络通信协议:根据应用需求,确定使用的网络通信协议,例如TCP/IP协议、HTTP协议等。不同的协议适用于不同的场景,选择与应用需求相匹配的协议。 建立连接:根据所选的编程语言和协议,使用相关的库或API建立网络连接。通常,客户端和服务器之间的网络连接是通过套接字(Socket)来实现的。客户端通过指定目标主机的IP地址和端口号发起连接请求 ...
JavaSE笔记-多线程
多线程相关概念进程与线程一个应用程序,既可以有多个进程,也可以有多个线程,一个进程可以包含多个线程,每个线程相互独立 进程(Process):是一个运行程序的实例 线程(Thread):是程序中的一个执行单元 拿浏览器举例,打开一个浏览器,浏览器是一个进程,浏览器中可以打开很多标签页,每个标签页都是这个浏览器进程的子进程,每个子进程中可以有多个线程来协同完成页面的加载和渲染,比如图片、CSS 和 JS 文件等都是线程来做的 多进程模式:每个进程只有一个线程 多线程模式:一个进程有多个线程 多进程+多线程模式:多个进程,每个进程有多个线程 单核CPU和多核CPU单核CPU和多核CPU是指计算机处理器的核心数量不同。 单核CPU:单核CPU拥有一个物理处理核心,它只能同时执行一个线程。在单核CPU上运行的多个线程实际上是通过CPU调度算法快速切换执行的,由于处理速度非常快,会给用户造成一种貌似同时执行的错觉。但因为只有一个物理核心,所以在同一时间点上只能处理一个线程的指令。 多核CPU:多核CPU拥有多个物理处理核心,可以同时执行多个线程。每个核心都独立地进行指令执行,因此可以同 ...
JavaSE笔记-反射
反射概括反射概念在Java中,反射是一种机制,通过反射,可以在运行时获取类的信息(例如字段、方法、构造函数等),并且可以动态地操作类、对象和成员。 动态地创建和访问对象:使用反射可以实例化一个类的对象,即使在编译时并不知道具体的类名。 动态地调用方法:反射可以在运行时调用一个对象的方法,甚至通过反射来调用私有方法。 获取和设置字段的值:通过反射可以获取和设置对象中的字段的值,即使这些字段是私有的。 获取和操作类、接口、构造函数等:反射还可以获取和操作类的信息,如获取类的注解、实现的接口、父类等。 反射优缺点反射的优点: 动态性:反射使得程序能够在运行时动态地获取和操作类的信息,而不需要在编译期间确定,提高了灵活性和可扩展性 框架工具开发:反射机制为一些框架和工具提供了基础。例如,测试框架可以使用反射来自动化测试对象的属性和方法,而依赖注入框架可以通过反射来自动注入依赖。 反射的缺点: 性能开销:反射机制通常比直接调用代码的方式更慢。由于反射需要在运行时进行类型检查、方法查找等操作,因此会引入一定的性能开销。 安全性问题:反射机制可以绕过访问修饰符(如私有、受保护等),并允许访 ...
JavaSE笔记-注解
注解简介(1)注解(Annotation)是JDK1.5引入的特性,可以用于对代码进行说明 (2)注解其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理,通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息 (3)注解可以像修饰符一样被使用,可用于修饰包,类, 构造器, 方法, 成员变量, 参数, 局部变量的声明,这些信息被保存在注解的“name=value” 对中, (4)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能, 忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如 用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等 (5)未来的开发模式都是基于注解的,注解是一种趋势,一定程度上可以说:框架 = 注解 + 反射 + 设计模式。 (6)JDK8中注解的新特性:可重复的注解、可用于类型的注解。 常见用途 作用 简介 编写文档 通过代码里标识的注解生成文档【生成文档doc文档】 代码分析 通过代码里标识的注解对代码进行 ...
JavaSE笔记-新特性
Lambda表达式(Java8)Lambda表达式Lambda表达式简介Lambda表达式是Java 8引入的一项重要的新特性,主要受到函数式编程思想的影响。函数式编程思想强调的是对数据进行操作的方式,而不关注具体的对象是什么。Lambda表达式可以被理解为一种匿名函数,它基于数学中的λ演算而得名,也可以称为闭包(Closure)。 优点:简化代码,开发迅速,使得函数式编程更加方便。 缺点:代码可读性变差,不容易进行调试。 Lambda表达式语法Lambda表达式由Lambda参数、箭头符号(->)和方法体组成,语法如下 1( paramaters ) -> { 主体部分 } 组成 简介 paramaters Lambda参数列表,可以有零个或多个参数,参数类型可以显式指定,也可以由编译器根据上下文自动推断。如果没有参数,则可以使用空括号()表示;如果只有一个参数,可以省略参数的括号;如果有多个参数,需要使用括号()包裹,并用逗号将参数分隔。 -> 箭头操作符,可理解为“被用于”的意思,用于分隔参数列表与Lambda表达式的主 ...

















