计算机、程序和Java概述
经验:问题解决过程中的积累而得到的!
计算机:存储和处理数据的电子设备
中央处理器(Central Processing Unit)
CPU的两个部分:控制单元(control unit) & 算术/逻辑单元(arithmetic/logic unit)
每个计算机都有一个内部时钟,以固定速度发射电子脉冲。脉冲用于控制和同步各种操作的步调。
时钟速度的计量单位:赫兹(Hz) - 1赫兹就是每秒1个脉冲
目前现代计算机速度单位:千兆赫兹(GHz) eg: 1GHz = 1000MHz = 1000 * 100万Hz
计算机内核:实现指令的读取和执行的部分
比特和字节
在计算机中有一系列电路开关而开关存在两种状态:关(off) -> 1 和 开(on)->0
bit: 数据组成最小单位 Byte: 数组组成最基本单位
1bit = 8 Byte (b B K M G T ..)
编码模式是一系列的规则,控制计算机将字符、数字和符号翻译成计算机可以实际工作的数据。
内存(RAM - Random Access Memory)
内存由一个个有序的字节序列组成。
程序和数据在被CPU执行之前必须移动到计算机内存之中。
常见的计算机设备: USB(Universal Serial Bus)、keyboard、mouse、monitor、printer
显示器的质量以屏幕分辨率和点距来决定
点距: 像素之前的距离(毫米) 。 点距越小,显示效果越好!
操作系统
操作系统是计算机内部最重要的程序,管理和控制计算机活动。
多道程序设计(multiprogramming) -> 允许多个程序同时使用CPU
多线程(multithreading) -> 允许单个程序同时执行多个任务
多处理(parallel processing) -> 并行处理任务(宏观并行微观串行)
Java语言特性
- simple、object-oriented、distributed、architecture neutral(体系结构中立的)、portable、high performance、secure、robust
TestDemo.java => javac TestDemo.java
-> TestDemo.class => java TestDemo
【JVM中】
执行具体过程:
- JVM用一个称为类加载器(class loader)的程序将类的字节码加载到内存中
- 加载该类之后,JVM使用一个字节码验证(bytecode verifier)的程序来检验字节码的合法性
程序设计错误
- 语法错误(syntax error) - 编译型错误
- 运行错误(runtime error) - 运行时错误
- 逻辑错误(logic error) - 对业务逻辑掌握不清导致的错误
课后习题
以英里计算平均速度和以公里计算平均速度
假设一个跑步者45分钟30秒内跑了14公里。编写一个程序显示以每小时多少英里为单位的平均速度值。(1英里=1.6公里)
假设一个跑步者1小时40分钟35秒内跑了24英里。编写一个程序显示以每小时多少公里为单位的平均速度值。(1英里=1.6公里)
package ink.baselearn.unit01; /** * ClassName: Demo02 * Function: * Date: 2021/2/8 9:14 上午 * author Wangzhuang2 * version V1.0 * TODO: */ class ConversionUtil { private static final double TIME_CONVERTION_UNIT = 60.0; private static final double DISTANCE_CONVERSION_UNIT = 100.0; private static final double KILOMETER_AND_MILE_CONVERSION_UNIT = 1.6; private ConversionUtil() { } // the conversion of distance /** * mile convert into kilometer * * @param arg the mile */ static double getKilometerFromMile(double arg) { return arg * 1.6; } /** * kilometer convert into mile * * @param arg the kilometer */ static double getMileFromKilometer(double arg) { return arg / 1.6; } // the conversion of time /** * second convert into minute * * @param arg the second */ static double getMinuteFromSecond(int arg) { return arg / TIME_CONVERTION_UNIT; } /** * minute convert into hour * * @param arg the minute */ static double getHourFromMinute(int arg) { return arg / TIME_CONVERTION_UNIT; } /** * second convert into hour * * @param arg the second */ static double getHourFromSecond(int arg) { return arg / TIME_CONVERTION_UNIT / TIME_CONVERTION_UNIT; } static double getEstimatedNum(double arg, int scale) { // reserve scale units return Math.round(arg * (Math.pow(10, scale))) / Math.pow(10, scale); } } public class Demo02 { public static void main(String[] args) { Demo02 demo02 = new Demo02(); String averageSpeedPerHourInMileUnit = demo02.getAverageSpeedPerHourInMileUnit(0, 45, 30, 14); System.out.println("平均速度:" + averageSpeedPerHourInMileUnit); String averageSpeedPerHourInKilometerUnit = demo02.getAverageSpeedPerHourInKilometerUnit(1, 40, 35, 24); System.out.println("平均速度:" + averageSpeedPerHourInKilometerUnit); } String getAverageSpeedPerHourInMileUnit(int hour, int minute, int second, int distanceInKilometerUnit) { double timeInHourUnit = hour + ConversionUtil.getHourFromMinute(minute) + ConversionUtil.getHourFromSecond(second); double distanceInMileUnit = ConversionUtil.getMileFromKilometer(distanceInKilometerUnit); return ConversionUtil.getEstimatedNum(distanceInMileUnit / timeInHourUnit, 2) + " mile/h"; } String getAverageSpeedPerHourInKilometerUnit(int hour, int minute, int second, int distanceInMileUnit) { double timeInHourUnit = hour + ConversionUtil.getHourFromMinute(minute) + ConversionUtil.getHourFromSecond(second); double distanceInKilometerUnit = ConversionUtil.getKilometerFromMile(distanceInMileUnit); return ConversionUtil.getEstimatedNum(distanceInKilometerUnit / timeInHourUnit, 2) + " kilometer/h"; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具