【JAVA】Java开发小游戏 - 简单的2D平台跳跃游戏 基本的2D平台跳跃游戏框架,适合初学者学习和理解Java游戏开发的基础概念
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,
忍不住分享一下给大家。点击跳转到网站
学习总结
1、掌握 JAVA入门到进阶知识(持续写作中……)
2、学会Oracle数据库入门到入土用法(创作中……)
3、手把手教你开发炫酷的vbs脚本制作(完善中……)
4、牛逼哄哄的 IDEA编程利器技巧(编写中……)
5、面经吐血整理的 面试技巧(更新中……)
Java开发小游戏 - 简单的2D平台跳跃游戏
下面是一个使用Java和javax.swing
以及java.awt
库创建的简单2D平台跳跃游戏。这个游戏将包括一个玩家角色,能够左右移动并跳跃。为了简化,我们不会涉及复杂的物理引擎或图形资源管理,而是专注于基础的游戏循环、输入处理和简单的碰撞检测。
项目结构
GamePanel.java
: 游戏的主要面板,包含游戏逻辑。Player.java
: 玩家角色类。Platform.java
: 平台类。Main.java
: 启动游戏的主类。
依赖
此示例仅依赖于Java标准库中的类,因此不需要额外的依赖项。确保你的开发环境已经配置好Java JDK,并且可以编译和运行Java程序。
游戏代码
GamePanel.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;public class GamePanel extends JPanel implements Runnable {// 游戏窗口尺寸private static final int WIDTH = 800;private static final int HEIGHT = 600;// 线程和帧率private Thread gameThread;private boolean running = false;private final int FPS = 60;private final int UPDATE_TIME = 1000 / FPS;// 玩家和平台private Player player;private List<Platform> platforms;// 构造函数public GamePanel() {setPreferredSize(new Dimension(WIDTH, HEIGHT));setBackground(Color.BLACK);setFocusable(true);addKeyListener(new KeyInputHandler());player = new Player(100, HEIGHT - 100, 50, 50, this);platforms = new ArrayList<>();platforms.add(new Platform(0, HEIGHT - 30, WIDTH, 30)); // 地面platforms.add(new Platform(200, HEIGHT - 200, 100, 10)); // 中间平台}// 开始游戏线程public void startGame() {running = true;gameThread = new Thread(this);gameThread.start();}// 游戏循环@Overridepublic void run() {long start, elapsed, wait;while (running) {start = System.nanoTime();update(); // 更新游戏状态repaint(); // 绘制游戏画面elapsed = System.nanoTime() - start;wait = UPDATE_TIME - elapsed / 1_000_000;if (wait < 0) wait = 5;try {Thread.sleep(wait);} catch (Exception e) {e.printStackTrace();}}}// 更新游戏状态private void update() {player.update(platforms);}// 绘制游戏画面@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);player.draw(g);for (Platform platform : platforms) {platform.draw(g);}}// 处理键盘输入private class KeyInputHandler extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {player.keyPressed(e.getKeyCode());}@Overridepublic void keyReleased(KeyEvent e) {player.keyReleased(e.getKeyCode());}}
}
Player.java
import java.awt.*;public class Player {private int x, y, width, height;private int velX, velY;private boolean onGround;private GamePanel gamePanel;// 玩家属性private final int JUMP_STRENGTH = -15;private final int GRAVITY = 1;private final int MAX_FALL_SPEED = 15;private final int SPEED = 5;public Player(int x, int y, int width, int height, GamePanel gamePanel) {this.x = x;this.y = y;this.width = width;this.height = height;this.gamePanel = gamePanel;this.velY = 0;this.onGround = false;}public void update(List<Platform> platforms) {// 水平移动x += velX;// 检测与平台的水平碰撞checkCollisions(platforms, true, false);// 垂直移动(重力)if (!onGround) {velY += GRAVITY;if (velY > MAX_FALL_SPEED) velY = MAX_FALL_SPEED;}y += velY;// 检测与平台的垂直碰撞onGround = checkCollisions(platforms, false, true);}// 检测碰撞private boolean checkCollisions(List<Platform> platforms, boolean horizontal, boolean vertical) {Rectangle playerRect = new Rectangle(x, y, width, height);for (Platform platform : platforms) {Rectangle platformRect = platform.getRectangle();if (horizontal && playerRect.intersects(platformRect)) {if (velX > 0) { // 右移时碰撞x = platformRect.x - width;} else if (velX < 0) { // 左移时碰撞x = platformRect.x + platformRect.width;}velX = 0; // 停止水平移动}if (vertical && playerRect.intersects(platformRect)) {if (velY > 0) { // 下落时碰撞onGround = true;y = platformRect.y - height;velY = 0;} else if (velY < 0) { // 上升时碰撞y = platformRect.y + platformRect.height;velY = 0;}}}return onGround;}// 键盘事件处理public void keyPressed(int keyCode) {if (keyCode == KeyEvent.VK_LEFT) {velX = -SPEED;}if (keyCode == KeyEvent.VK_RIGHT) {velX = SPEED;}if (keyCode == KeyEvent.VK_SPACE && onGround) {velY = JUMP_STRENGTH;onGround = false;}}public void keyReleased(int keyCode) {if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_RIGHT) {velX = 0;}}// 绘制玩家public void draw(Graphics g) {g.setColor(Color.BLUE);g.fillRect(x, y, width, height);}
}
Platform.java
import java.awt.*;public class Platform {private int x, y, width, height;public Platform(int x, int y, int width, int height) {this.x = x;this.y = y;this.width = width;this.height = height;}// 获取平台矩形public Rectangle getRectangle() {return new Rectangle(x, y, width, height);}// 绘制平台public void draw(Graphics g) {g.setColor(Color.GRAY);g.fillRect(x, y, width, height);}
}
Main.java
import javax.swing.*;public class Main {public static void main(String[] args) {JFrame frame = new JFrame("2D Platformer Game");GamePanel gamePanel = new GamePanel();frame.add(gamePanel);frame.pack();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocationRelativeTo(null);frame.setVisible(true);gamePanel.startGame(); // 启动游戏}
}
运行游戏
要运行这个游戏,只需编译并执行Main.java
文件。它会打开一个窗口,显示一个简单的2D平台跳跃游戏,其中你可以控制一个蓝色方块在平台上移动和跳跃。
扩展功能
这个简单的游戏框架可以扩展为更复杂的游戏,例如:
- 添加更多的关卡和平台。
- 实现敌人和障碍物。
- 引入得分系统和生命值。
- 使用图像代替简单的颜色填充来提高视觉效果。
- 实现音效和背景音乐。
- 添加用户界面元素,如开始菜单和暂停按钮。
通过逐步增加新特性,你可以构建出一个更加丰富和有趣的游戏体验。请根据自己的需求调整代码,并考虑使用游戏开发库如LibGDX或LWJGL来实现更高级的功能。
上述代码提供了一个基本的2D平台跳跃游戏框架,适合初学者学习和理解Java游戏开发的基础概念。随着你对游戏开发的理解加深,你可以逐渐添加更多复杂的功能和优化性能。如果你是新手,建议先掌握这段代码的工作原理,然后再尝试添加新的元素。
# <font color=#56aaa>往期文章</font>
[ 第一章:日常_JAVA_面试题集(含答案)](https://wenfeng.blog.csdn.net/article/details/109253627)
[ 第二章:日常_JAVA_面试题集(含答案)](https://wenfeng.blog.csdn.net/article/details/108773049)
 [平安壹钱包JAVA面试官:请你说一下Mybatis的实现原理](https://blog.csdn.net/Feng_wwf/article/details/117460385)
 [Java必备面试-热点-热门问题精华核心总结-推荐](https://blog.csdn.net/Feng_wwf/article/details/116524563)
[ 往期文章大全……](https://blog.csdn.net/Feng_wwf)
**<font color=#c7a>一键三连 ~一键三连~ 一键三连~</font>**
# [更多内容,点这里❤](https://wenfeng.blog.csdn.net/)
相关文章:
【JAVA】Java开发小游戏 - 简单的2D平台跳跃游戏 基本的2D平台跳跃游戏框架,适合初学者学习和理解Java游戏开发的基础概念
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...
C++ constexpr(八股总结)
答:这个关键字用于指示一个变量、函数或者对象可以在编译时求值(即它们是常量表达式)。这意味着当程序编译时,编译器会尝试计算出该表达式的值,而不是在程序运行时计算它,从而提高了程序的性能。 常量表达…...
继承(5)
大家好,今天我们继续来学习继承的相关知识,来看看子类构造方法(也叫做构造器)是如何做的。 1.6 子类构造方法 父子父子,先有父再有子,即:子类对象构选时,需要先调用基类构造方法,然后执行子类的构造方法 ★此时虽然执行了父类的…...
Oracle Dataguard(主库为 RAC 双节点集群)配置详解(1):安装 Oracle11g RAC 双节点集群
Oracle Dataguard(主库为 RAC 双节点集群)配置详解(1):安装 Oracle11g RAC 双节点集群 目录 Oracle Dataguard(主库为 RAC 双节点集群)配置详解(1):安装 Orac…...
基于Matlab的变压器仿真模型建模方法(13):单相升压自耦变压器的等效电路和仿真模型
1.单相升压自耦变压器的基本方程和等效电路 单相升压自耦变压器的接线原理图如图1所示。在建立自耦变压器的基本方程时,仍然把它看成是从双绕组变压器演变而来。在图1中,设节点a到节点b部分的绕组的匝数为,对应于双绕组变压器的原边绕组;节点c到节点a部分的绕组的绕组匝数为…...
ffmpeg 常用命令
更详细请参考ffmpeg手册,下载ffmpegrelease版后在doc中就有,主页面。video filter 参考ffmpeg-filters.html -version -formats -demuxers -protocols -muxers -filters -devices —pix_fmts -codecs -sample_fmts -decoders -layouts -encoders -colors…...
c#集成itext7导出pdf,包含表格
在Nuget解决方案中搜索itext7,进行安装 同时还要安装 itext7.bouncy-castle-adapter。 否则 PdfWriter writer new PdfWriter(pdfOutputPath);执行时会报错unknown PdfException,然后生成一个空白的pdf,且显示已损坏。 捕获异常发现 ex.In…...
STM32-WWDG/IWDG看门狗
WWDG/IWDG一旦开启不能关闭,可通过选项字节在上电时启动硬件看门狗,看门狗计数只能写入不能读取。看门狗启用时,T6bit必须置1,防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗(重置计数器,…...
后台管理系统引导功能的实现
引导是软件中经常见到的一个功能,无论是在后台项目还是前台或者是移动端项目中。 那么对于引导页而言,它是如何实现的呢?通常情况下引导页是通过 聚焦 的方式,高亮一块视图,然后通过文字解释的形式来告知用户该功能的作…...
Flink如何设置合理的并行度
一个Flink程序由多个Operator组成(source、transformation和 sink)。 一个Operator由多个并行的Task(线程)来执行, 一个Operator的并行Task(线程)数目就被称为该Operator(任务)的并行度(Parallel)。即并行度就是相对于Operator来说的。 合理设置并行度可以有效提高Flink作业…...
【JMeter】单接口
1. HTTPS接口 前置准备: 下载被测网站的证书在cmd利用java工具keytool.exe重新生成store证书 先进入存放该程序的盘 使用命令: keytool -import -alias "xxxx.store" -file "D:\xxx.cer" -keystore xx.store 根据提示信任证书 在JMeter菜…...
安科瑞Acrel-1000DP分布式光伏监控系统在浙江安吉成3234.465kWp分布式光伏发电项目中的应用
摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活的布局、更低的建设成本和更高…...
电子应用设计方案87:智能AI收纳箱系统设计
智能 AI 收纳箱系统设计 一、引言 智能 AI 收纳箱系统旨在为用户提供更高效、便捷和智能的物品收纳与管理解决方案,通过融合人工智能技术和创新设计,提升用户的生活品质和物品整理效率。 二、系统概述 1. 系统目标 - 实现物品的自动分类和整理…...
C++泛型编程:多参数函数模版、动态数组类
在多参数函数模版中,有以下几点: 第一点是函数模版支持多个类型参数 第二点是一旦有类型不能推导,就会导致编译失败 第三点是返回值类型无法作为推导依据 其中第二点和第三点,在下面代码中有体现,首先是第三点&…...
点亮一个esp32 的led
最近入了一个ESP32 兄弟们,这玩意还可以,买来肯定是给它点亮啊对吧 我就是点灯侠🎇 😭千万不要不接天线啊,不然你会一直找不到你的wifi 1.点灯第一步你得有IDE Arduino 就是这个绿东西 可是怎么下载安装呢ÿ…...
【计算机视觉】单目深度估计模型-Depth Anything-V2
概述 本篇将简单介绍Depth Anything V2单目深度估计模型,该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比,V2版本通过采用合成图像训练、增加教师模型容量,并利用大规模伪标签现实数据进行学…...
新年感悟:2025年1月7日高铁随想
2025年1月7日,乘坐在从珠海去广州南的C7676高铁上,突然悟明白两个事情。 首先,不管学习任何东西,总结是一个非常关键的经验。以前,总是幻想着能找到一本书,或者一个特别优秀的老师,仅仅通过看看…...
C++ 入门第25天:线程池(Thread Pool)基础
往期回顾: C 学习第22天:智能指针与异常处理-CSDN博客 C 入门第23天:Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天:C11 多线程基础-CSDN博客 C 入门第25天:线程池(Thread Pool)基础 前…...
嵌入式驱动开发详解10(MISC杂项实现)
文章目录 前言MISC设备驱动简介重要结构体API函数MISC实现框架后续参考文献 前言 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱 动,通常嵌套在 platform 总线驱…...
CSS语言的编程范式
CSS语言的编程范式 前言 随着互联网的快速发展,前端开发逐渐演变为一个复杂而多元化的领域。作为前端开发的重要组成部分,CSS(层叠样式表)在网页设计和用户体验中扮演着至关重要的角色。CSS不仅仅是一种样式表语言,更…...
游戏引擎学习第77天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾昨天的 bug 今天我们继续开发进度,进行调试昨天代码的问题,主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏,但我们希望能够处理多层的房间,玩家…...
Python编程实例-机器学习中的Hinge Loss编程实现
机器学习中的Hinge Loss编程实现 文章目录 机器学习中的Hinge Loss编程实现1、机器学习中的损失函数是什么?2、什么是 Hinge Loss?3、Hinge Loss如何工作?4、Hinge Loss的优缺点5、Python语言实现6、总结Hinge Loss(铰链损失)在分类任务中至关重要,广泛应用于支持向量机 …...
算法练习----2025/1/7
题目 计算素数函数f(N)代表素数的个数小于等于N例如 f(17)7 , 因为前7个素数为 2,3,5,7,11,13,17思路 1、首先创建一个布尔类型的数组(Python 中用列表模拟)来标记每个数是否为素…...
【C++】穿越编程岁月,细品C++进化轨迹,深化入门基石(续章)——揭秘函数缺省参数的魅力、函数重载的艺术、引用的奥秘与内联函数的效率
文章目录 一、函数缺省参数二、函数重载三、引用1.引用的概念和定义2.引用的特性3.引用的使用4.const引用5.指针和引用的关系 四、inline内联函数和nullptr1.inline2.nullptr 一、函数缺省参数 缺省参数其实就是默认参数,它是声明或定义函数时为函数的参数指定⼀个缺…...
1/7 Spring三级缓存
首先我们来spring创建bean首先通过反射创建bean原始对象,然后通过 填充里面的属性,然后如果有AOP的话,那么就会创建这个代理对象,最后将代理对象传入这个单例池中 如何解决循环依赖问题的 比如A依赖B,B依赖A 如果在单例池没有找…...
【RK3568笔记】Android修改开机动画
概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式,不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存(压缩方式要求是存储压缩),并将保存的文件名命名为 bootanimation.zip,这个 bootanim…...
牛客网刷题 ——C语言初阶(5操作符)——JZ15 二进制中1的个数
1.题目描述 题目OJ链接 描述 输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。 2.思路 求2进制中1的个数,可以转换为求每一位,1的个数,1&1还是1 所以判断如果该数值&1为真,我们就co…...
Lua语言中常用的字符串操作函数
string.sub(s, i, j) 功能: 截取字符串 s 中从位置 i 到位置 j 的子字符串。 local s "Hello, Lua!" print(string.sub(s, 1, 5)) -- 输出 "Hello" print(string.sub(s, 8, 11)) -- 输出 "Lua!" string.len(s) 功能:将字符串长度…...
SpringBoot 2.6 集成es 7.17
引言 在现代应用开发中,Elasticsearch作为一个强大的搜索引擎和分析引擎,已经成为许多项目不可或缺的一部分。Spring Boot作为Java生态中最受欢迎的微服务框架之一,其对Elasticsearch的支持自然也是开发者关注的焦点。本文将详细介绍如何在S…...
Elasticsearch:搜索相关性
这里写目录标题 一、相关性的概述二、自定义评分策略1、TF-IDF算法2、BM25算法 三、自定义评分策略1、Index Boost:在索引层面修改相关性2、boosting:修改文档相关性3、negative_boost:降低相关性4、function_score:自定义评分5、…...
nlp培训重点-2
1. 贝叶斯公式 import math import jieba import re import os import json from collections import defaultdictjieba.initialize()""" 贝叶斯分类实践P(A|B) (P(A) * P(B|A)) / P(B) 事件A:文本属于类别x1。文本属于类别x的概率,记做…...
Python判断、循环练习
01 02 03...
基于ROS先验地图的机器人自主定位与导航SLAM
2021年学习,当时参加科大讯飞的智能车大赛, 【语音交互启动-teb算法路径规划A*算法自动避障路径最短优化yolo5目标检测视觉结果判断分类终点指定点位自动泊车语音播报。】 【讯飞学院】http://www.iflyros.com/home/ 一、全局路径规划中的地图 栅格地图&…...
计算机网络与服务器
目录 架构体系及相关知识 三层架构: 四层架构: 常见的应用的模式: OSI模型 分层 数据链路层 TCP/IP模型 TCP和UDP都是传输层的协议 TCP三次握手、四次次分手 URL&HTTP协议详解 网址URL 结构化 报文行 报文头 空行 报文体…...
IP查询于访问控制保护你我安全
IP地址查询 查询方法: 命令行工具: ①在Windows系统中,我们可以使用命令提示符(WINR)查询IP地址,在弹窗中输入“ipconfig”命令查看本地网络适配器的IP地址等配置信息; ②在Linux系统中&…...
在 ASP.NET CORE 中上传、下载文件
创建 Web API 来提供跨客户端和服务器的文件上传和下载是常有的事。本文将介绍如何通过 ASP.NET CORE 来实现。 首先在 Visual Studio 中创建空的 Web API 项目,然后选择目标框架 .Net Core 3.1。 创建名为 FileController 的控制器,提供操作文件的接口…...
ETCD未授权测试
一、测试环境搭建 首先拉取etcd镜像 docker pull quay.io/coreos/etcd:v3.3.1 # 查看镜像 docker images创建自定义网络 docker network create --driver bridge --subnet172.16.1.0/16 --gateway172.16.1.1 mynet # 查看网络 docker network ls创建etcd节点 节点1: docke…...
ffmpeg将mp4等文件转mp3
安装ffmpeg 目录 安装ffmpeg macOS Windows 实现方法 Base Golang macOS 在macOS上,你可以使用Homebrew来安装FFmpeg,这是最简单和推荐的方法。以下是具体步骤: 安装Homebrew(如果尚未安装): 打开终端,执行以下命令来安装Homebrew: /bin/bash -c "$(c…...
python学习笔记—15—数据容器之列表
1. 数据容器 列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict) 2. 列表 (1) 定义 tmp_list ["super", "carry", "doinb"] print(f"tmp_list {tmp_list}, tmp_list type is {type(tmp_list)}") tmp_list1 ["doi…...
基于MATLAB的汽车热管理模型构建
一、引言 汽车热管理系统对汽车性能、部件寿命及驾乘体验至关重要。它能确保发动机、电池等关键部件在适宜温度工作。MATLAB 功能强大,为构建高精度热管理模型提供有效途径,助力优化系统设计与控制策略。 二、汽车热管理系统构成 2.1 发动机冷却系统&…...
MySQL的主从复制
MySQL 主从复制详解 MySQL 的主从复制是一种用来实现数据同步的机制,可以将一个 MySQL 实例的数据同步到一个或多个从库(Slave)实例中。它广泛应用于数据备份、高可用架构、读写分离、负载均衡等场景。 1. 主从复制的基本概念 主库ÿ…...
playwright 录制
一、新建项目TestProject3 二、准备swagger 三、开始录制 打开PowerShell 7 (x64) cd D:\xxx\xxx\VS2022Projects\TestProject3\TestProject3\bin\Debug\net8.0 pwsh playwright.ps1 codegen --targetcsharp -b chromium localhost:5252/swagger/index.html #支持的语言 java…...
Azure主机windows2008就地升级十步
Azure上云主机的windows2008系统需要进行就地升级。 按着微软的升级路径:win2008-->win2012-->win2016-->win2022 第一步:创建快照备份,防止升级失败第二步:升级托管磁盘,在VM管理的地方将磁盘升级成托管磁盘…...
MySQL 主从复制 的原理、配置和如何实现 主从灾备
1. MySQL 主从复制原理与工作流程 MySQL 的主从复制本质上是一个 基于事件的日志传输系统。在这个系统中,所有对数据的修改(如 INSERT、UPDATE 和 DELETE)会在 主数据库 上记录到 二进制日志(binlog),然后…...
本地多卡(3090)部署通义千问Qwen-72B大模型提速实践:从龟速到够用
最近在做文本风格转化,涉及千万token级别的文本。想用大模型转写,在线的模型一来涉及数据隐私,二来又不想先垫钱再找报销。本地的7-9B小模型又感觉效果有限,正好实验室给俺配了4卡3090的机子,反正也就是做个推理&#…...
高级数据库系统 复习提纲
第一章 数据库技术的回顾与发展 简述三代数据库的发展历史及其对应特点: 新型数据库在“数据模型”上的创新: 简述数据库和什么相关技术结合,产生了什么新型数据库? 1. 数据库和并行处理技术结合,产生“并行数据库”…...
Python编程实例-特征向量与特征值编程实现
特征向量与特征值编程实现 文章目录 特征向量与特征值编程实现1、什么是特征向量2、特征向量背后的直觉3、为什么特征向量很重要?4、如何计算特征向量?4、特征向量Python实现5、可视化特征向量6、总结线性代数是许多高级数学概念的基石,广泛应用于数据科学、机器学习、计算机…...
十年后LabVIEW编程知识是否会过时?
在考虑LabVIEW编程知识在未来十年内的有效性时,我们可以从几个角度进行分析: 1. 技术发展与软件更新 随着技术的快速发展,许多编程工具和平台不断更新和改进,LabVIEW也不例外。十年后,可能会有新的编程语言或平台…...
第6章——HTTP首部
第六章——HTTP首部 HTTP报文结构 都必有报文首部 HTTP请求报文 HTTP响应报文 HTTP首部字段 ###传递重要信息 首部字段结构 首部字段名:字段值(,字段值,字段值) 首部字段类型 通用首部字段 请求首部字…...
Java多线程
一、线程的简介: 1.普通方法调用和多线程: 2.程序、进程和线程: 在操作系统中运行的程序就是进程,一个进程可以有多个线程 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念; 进程则是执行程序的一次执…...