当前位置: 首页 > news >正文

Java编程的逻辑 (1) - 数据和变量

本系列文章经补充和完善,已修订整理成书《Java编程的逻辑》,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http://item.jd.com/12299018.html


程序大概是怎么回事

计算机就是个机器,这个机器主要由CPU、内存、硬盘和输入输出设备组成。计算机上跑着操作系统,如Windows或Linux,操作系统上运行着各种应用程序,如Word, QQ等。

操作系统将时间分成很多细小的时间片,一个时间片给一个程序用,另一个时间片给另一个程序用,并频繁地在程序间切换。不过,在应用程序看来,整个机器资源好像都归他使,操作系统给他提供了这种假象。 对程序员而言,我们写程序,基本不用考虑其他应用程序,我们想好怎么做自己的事就可以了。

应用程序看上去能做很多事情,能读写文档,能播放音乐,能聊天,能玩游戏,能下围棋 ...... 但本质上,计算机只会执行预先写好的指令而已,这些指令也只是操作数据或者设备。所谓程序,基本上就是告诉计算机要操作的数据和执行的指令序列, 即对什么数据做什么操作。

比如说:

  • 读文档,就是将数据从磁盘加载到内存,然后输出到显示器上
  • 写文档,就是将数据从内存写回磁盘。
  • 播放音乐,就是将音乐的数据加载到内存,然后写到声卡上。
  • 聊天,就是从键盘接收聊天数据,放到内存,然后传给网卡,通过网络传给另一个人的网卡,再从网卡传到内存,显示在显示器上。

基本上,所有数据都需要放到内存进行处理,程序的很大一部分工作就是操作在内存中的数据。

本文主要就说说这个"数据"。(以Java为例)

数据

数据是什么?数据在计算机内部都是二进制,不方便操作,为了方便操作数据,高级语言引入了"数据类型"和"变量"的概念。

数据类型

数据类型用于对数据归类,方便理解和操作,对Java语言而言,有如下基本数据类型:

  • 整数类型:有四种整型 byte/short/int/long,分别有不同的取值范围
  • 小数类型 :有两种类型 float/double,有不同的取值范围和精度
  • 字符类型:char,表示单个字符
  • 真假类型:boolean,表示真假

基本数据类型都有对应的数组类型,数组表示固定长度的同种数据类型的多条记录,这些数据在内存中挨在一起存放。 比如说,一个自然数可以用一个整数类型数据表示,100个连续的自然数可以用一个长度为100的整数数组表示。一个字符用一个char表示,一段文字可以用一个char数组表示。

Java是一个面向对象的语言,除了基本数据类型,其他都是对象类型 ,对象到底是什么呢?简单的说,对象是由基本数据类型、数组和其他对象组合而成的一个东西,以方便对其整体进行操作。

比如说,一个学生对象,可以由如下信息组成:

  • 姓名:一个字符数组
  • 年龄:一个整数
  • 性别:一个字符
  • 入学分数:一个小数

日期在Java中也是一个对象,内部表示为整形long。

就像世界万物的组成,都是由元素周期表中的108个基本元素组成的,基本数据类型就相当于化学中的基本元素,而对象就相当于世界万物。

变量

为了操作数据,需要把数据存放到内存中,所谓内存在程序看来就是一块有地址编号的连续的空间,放到内存中的某个位置后,为了方便地找到和操作这个数据,需要给这个位置起一个名字。编程语言通过变量这个概念来表示这个过程。

声明一个变量,比如 int a其实就是在内存中分配了一个空间,这个空间存放int数据类型,a指向这个内存空间所在的位置,通过对a操作即可操作a指向的内存空间,比如a=5这个操作即可将a指向的内存空间的值改为5。

之所以叫量,是因为它表示的是内存中的位置,这个位置存放的值是可以变化的。

虽然变量的值是可以变化的,但名字是不变的,这个名字应该代表程序员心目中这块内存位置的意义,这个意义应该是不变的,比如说这个变量int second表示时钟秒数,在不同时间可以被赋予不同的值,但它表示的就是时钟秒数。之所以说应该是因为这不是必须的,如果你非要起一个变量名叫age但赋予它身高的值,计算机也拿你没办法。

重要的话再说一遍!变量就是给数据起名字,方便找不同的数据,它的值可以变,但含义不应变。再比如说一个合同,可以有四个变量:

  • first_party: 含义是甲方
  • second_party: 含义是乙方
  • contract_body: 含义是合同内容
  • contract_sign_date: 含义是合同签署日期

这些变量表示的含义是确定的,但对不同的合同,他们的值是不同的。

初学编程的人经常使用像a,b,c,hehe,haha这种无意义的名字,给变量起一个有意义的名字吧!

通过声明变量,每个变量赋予一个数据类型和一个有意义的名字,我们就告诉了计算机我们要操作的数据。

有了数据,怎么对数据进行操作呢?

------------------

未完待续,查看最新文章,敬请关注微信公众号“老马说编程”(扫描下方二维码),深入浅出,老马和你一起探索Java编程及计算机技术的本质。原创文章,保留所有版权。


-----------

更多相关原创文章

计算机程序的思维逻辑 (2) - 赋值

计算机程序的思维逻辑 (3) - 基本运算

计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算

计算机程序的思维逻辑 (5) - 小数计算为什么会出错?

计算机程序的思维逻辑 (6) - 如何从乱码中恢复 (上)?

计算机程序的思维逻辑 (7) - 如何从乱码中恢复 (下)?

计算机程序的思维逻辑 (8) - char的真正含义

 

相关文章:

  • ABP源码分析三十二:ABP.SignalR
  • office2003 安装步骤及注意事项
  • 我的屌丝giser成长记-研一篇(下)
  • 本周活动
  • MapReduce的过程(2)
  • Android 双卡双待识别
  • 房坑
  • 该不该用inline-block取代float? inline和float的区别?
  • hibernate--联合主键--XML
  • 动态素组(ArrayList)
  • cssReset - css初始化
  • KeyMob移动广告聚合平台 开发者赚钱平台
  • Lua非常有用的工具——递归打印表数据
  • C风格字符串
  • UVa 10924-Prime Words
  • hexo+github搭建个人博客
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 「译」Node.js Streams 基础
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • fetch 从初识到应用
  • Fundebug计费标准解释:事件数是如何定义的?
  • golang中接口赋值与方法集
  • iOS编译提示和导航提示
  • JavaScript设计模式之工厂模式
  • PAT A1120
  • PHP CLI应用的调试原理
  • Promise面试题,控制异步流程
  • 从0实现一个tiny react(三)生命周期
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 缓存与缓冲
  • 如何编写一个可升级的智能合约
  • 说说动画卡顿的解决方案
  • ​香农与信息论三大定律
  • (13):Silverlight 2 数据与通信之WebRequest
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (七)Java对象在Hibernate持久化层的状态
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)创业的注意事项
  • (转)视频码率,帧率和分辨率的联系与区别
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net的DataSet直接与SQL2005交互
  • .NET连接数据库方式
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作