查看“核心技术:基本程序设计结构”的源代码
←
核心技术:基本程序设计结构
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:JavaCore]] == 数据类型 == {| class="wikitable" ! 类型 !! 存储需求 !! 默认值 !! 取值范围 |- ! colspan="4"| 整型 |- | int | 4字节 | 0 | -2 147 483 648 - 2 147 483 647 # Integer.MIN_VALUE=-2147483648 # Integer.MAX_VALUE=2147483647 |- | short | 2字节 | 0 | -32 768 - 32767 # Short.MIN_VALUE=-32768 # Short.MAX_VALUE=32767 |- | long | 8字节 | 0L | -9 223 372 036 854 775 808 - 9 223 372 036 854 775 807 # Long.MIN_VALUE=-9223372036854775808 # Long.MAX_VALUE=9223372036854775807 |- | byte | 1字节 | 0 | -128 - 127 # Byte.MIN_VALUE=-128 # Byte.MAX_VALUE=127 |- ! colspan="4"| 浮点 |- | float | 4字节 | 0.0f | 大约 +- 3.402 823 47E+38F(有效位数为6、7位) # Float.MIN_VALUE=1.4E-45 # Float.MAX_VALUE=3.4028235E38 |- | double | 8字节 | 0.0d | 大约 +- 1.797 693 134 862 315 70E+308(有效位数为15位) # Double.MIN_VALUE=4.9E-324 # Double.MAX_VALUE=1.7976931348623157E308 |- ! colspan="4"| 字符 |- | char | 2字节 | 'u0000' | \u0000 - \uffff |- ! colspan="4"| 布尔 |- | boolean | 1位 | false | <nowiki>true | false</nowiki> |} * 常量“Double.POSITIVE_INFINITY”、“Double.NEGATIVE_INFINITY”、“Double.NAN”分别表示“正无穷大”、“负无穷大”、“NaN(不是一个数字)”; === 取值范围 === * 整数用原码,负数用补码表示 以int为例,在java中占4字节,即32位: # 其中第一位为符号位(0正,1负) # 所以负数范围为:-2^31 = -2147483648 # 整数的范围为:2^31-1 = 2147483647 (减去全为0时的情况,0无正负) 即:-2147483648 - 2147483647 (-2^31 — 2^31-1) === 关于0.2 + 0.1 不等于 0.3 === 使用自然类型计算小数的时候,会出现:“0.2+0.1=0.30000000000000004”,而“0.1+0.6=0.7”的情况: :[[File:小数计算1.jpg|800px]] :[[File:小数计算2.jpg|800px]] 其原因如下:<br/> <pre> 计算机存储、计算或者展示,都需要转换2进制。 在现实世界中,数字主要有整数和小数两种,整数包括正整数、负整数以及零。 计算机中表示整数的方式有很多,如原码、反码以及补码等。 在计算机中存储的整数则分为有符号数和无符号数。 对于无符号数,采用哪种编码方式都无所谓,对于有符号数的编码方式,常用的是补码。 那么,一个十进制数字想要获得其二进制的补码,需要先通过一定的算法得到他对应的原码。 </pre> # 十进制整数转换为二进制,可以采用“除2取余,逆序排列”,或者xxx法(列出“...128,64,32,26,8,4,2,1”,根据十进制数在对应位置1或0); # 十进制小数转换为二进制:则采用“乘2取整,顺序排列”的方法; 如,0.625的二进制转换如下:<br/> [[File:0.625的二进制.jpg|600px]] <br/> 而0.1的二进制:<br/> [[File:0.1的二进制.jpg|600px]] <br/> 可以得知:0.1的二进制转换中出现了无限循环的情况,也就是(0.1)10 = (0.000110011001100…)2,而不能把0.1转换为确定的二进制数<br/> 即'''计算机无法用二进制精确的表示0.1'''<br/> <pre> IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现) </pre> 但仅是用近似值表示小数,并非真实值,如果使用float、double等类型进行小数计算,仍然会丢失数值。并没有解决问题。<br/> 所以:为了解决这样的精度问题,Java中提供了'''BigDecimal'''来进行精确运算。 * BigDecimal 并不是Java的数据类型,而是一个Java对象! == 变量 == * 变量名:以字母开头,并由字母和数字构成的序列;(字母包括:'A'-'Z'、'a'-'z'、'_'、'$'、'ä') * 不能使用java保留字作为变量名; * 变量名对大小写敏感; === 常量 === * java 中利用关键字“final”指示常量;(表示变量只能被赋值一次) * 习惯上,常量名使用全大写; * 如果需要某个常量在一个类的多个方法中使用,则将其设置为类常量,用“static final”修饰; == 运算符 == 常用运算: # “+”:加 # “-”:减 # “*”:乘 # “/”:除 # “%”:取余(取模) * 使用“stricfp”关键字标记的方法、类,其中的所有指令都要使用严格的浮点计算;【?没用过】 === 数学函数与常量 === * 使用java.lang.Math * 如果要得到一个完全可预测的结果,应该使用“StrictMath”【?】 Math 类中提供了各种数学函数: # 平方根:“double y = Math.sqrt(x);” # 幂运算:“double y = Math.pow(x, a);” # 三角函数: #: Math.sin #: Math.cos #: Math.tan #: Math.atan #: Math.atan2 # 指数函数、自然对数、以10为底的对数: #: Math.exp #: Math.log #: Math.log10 # 常量π、e的近似值:(近似值!) #: Math.PI #: Math.E === 数值类型间的强制转换 === # 如果其中一个为double,则另一个会被转换为double; # 否则,如果如果其中一个为float,则另一个会被转换为float; # 否则,如果如果其中一个为long,则另一个会被转换为long; # 否则,两操作数都会被转换为int; === 强制类型转换 === 强制类型转换(cast):用于类似由double向int、float这类,可能会丢失信息的转换。<br/> 如: <syntaxhighlight lang="java"> double x = 9.997; int nx = (int)x; </syntaxhighlight> 如果需要对浮点数进行舍入运算,以便得到最接近的整数,则用“Math.round”(其返回值为long): <syntaxhighlight lang="java"> double x = 9.997; int nx = (int)Math.round(x); </syntaxhighlight> === 关系运算 === # “<”:小于 # “>”:大于 # “<=”:小于等于 # “>=”:大于等于 # “&&”:逻辑与 # “||”:逻辑或 # “!”:逻辑非 # “?:”:三目运算 * “&&”、“||”是按照“短路”方式来求值的(即:如果第一个操作数能确定表达式的值,则不再计算第二个表达式) *: 如:“expression1 && expression2”:如果“expression1”为false,则不再计算“expression2” *: 如:“expression1 || expression2”:如果“expression1”为true,则不再计算“expression2” === 位运算 === # “&”:and # “|”:or # “^”:xor(亦或,相同为真,相异为假) # “~”:not # “>>”:右移 # “<<”:左移 # “>>>”:用0填充高位 * 这些运算符,按照位模式处理;(把操作数的二进制数,按照从右至左,对每一位进行运算) * 移位运算符的右操作数要完成模32的运算(若左操作数为long,则右操作数模64)【???what???】 *: 如:“1<<35”等同于“1<<3”或8() *: 【猜测:对于4字节(32位)的类型来说,位移超过了32位,就会从另一侧出来(就像转动一个环?)】 === 枚举类型 === 枚举类型:用于取值在一个有限的集合范围内。 定义: <syntaxhighlight lang="java"> enum Size{SMALL, MEDIUM, LARGE, EXTRA_LARGE}; </syntaxhighlight> 声明: <syntaxhighlight lang="java"> Size s = Size.MEDIUM; </syntaxhighlight> == 字符串 == == 输入输出 == == 流程控制 == == 大数值 == == 数组 ==
返回至“
核心技术:基本程序设计结构
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息