变量、常量和运算符——一个编程小白的Java SE学习日志2【极客BOY-米奇】

前言(转载请说明作者!)2020.2.26


内容导引

学习英语,要从音标,单词,基础语法学起。Java SE同样是门语言,当然它的基本语法的学习是极为重要的。它为你以后流畅正确的编写出代码打下硬性基础。
在本文章中,会引用“身高预测任务”这个一个实例,通过实战操作巩固这些基本语法知识。


最终实战导引

任务:

父亲身高
孩子的预测身高
母亲身高
孩子性别

大致流程:

2.规则
1.告诉
计算机
3.推断/计算

公式模型:
儿子成年身高(cm)=(父亲身高+母亲身高)×1.08÷2;
女儿成年身高(cm)=(父亲身高×0.923+母亲身高)÷2;

PS:当一个或多个表达式组合起来执行时,就形成了算法。


变量和内存

变量就是其中保存的值会发生改变的量。
变量是用于保存数据的存储单元,因保存于其中的数据的值可以改变而得名,变量让Java程序能更加方便的查找和操作数据。

  1. 变量是作为Java程序寻找内存中存放的数据的一个标签。
  2. 变量中存放的数据不同,占用内存空间大小也不同。

数据类型


数据类型的分类

数据类型指明了变量所占用内存的大小。

数据类型
基本数据类型
引用数据类型
整数型
字符型char
2字节/16位
布尔型boolean
1位
浮点型
字节型byte
1字节/8位
短整形short
2字节/16位
长整型long
8字节/64位
整形int
4字节/32位
单精度型float
4字节/32位
双精度型double
8字节/64位
类class
接口interface
对象object
数组

数据类型所占内存位数及取值范围
PS:
\u代表Unicode编码,\u0000、\ufff表示十六进制的Unicode码字符。
并且在Java语言中,数据类型所占用的内存空间和取值范围都是固定的,不会因为平台更改而更改,正因如此,Java语言的可移植能力非常强。


基本数据类型的包装类

引用自博客园(作者:红豆·)

为什么会有基本类型包装类?
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。

基本数据类型(基本类型)包装类(对象类型)
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

使用基本类型定义的变量
会具有默认值,或者赋值给变量的值为null的话,Java就会抛出异常。
这种情况在处理JSP请求数据时经常会遇到。

而使用包装类定义的变量为对象类型的实例变量,如果不赋初值的话,它的值为null,引用时的值也为null,但它也可以接收null这个值,可避免一些异常的发生,还可以使用API提供的一些有用方法。

为何Java还保留基本类型呢?
基本类型定义的变量的值存储在栈里。
对象类型的值存储在堆里。
而栈比堆更加高效。


变量声明、使用

Java是个强类型的语言。
在使用一个变量前,必须先对其进行声明。
声明基本和C语言保持一致。
e.g.1 int outputNumber = 1;
e.g.2 float x,y,z;

特有:
e.g.3 String fatherName = “fool”;//字符串变量

起名规范:

  • 下划线、字母、美元符号开头。
    e.g. _125 , abc , $main
  • 后面跟下划线、字母、美元符号及数字。
    e.g. a123$ , _123aB
  • 虽无长度限制,但不能把名字起的太长,单词长可以考虑采用简写的方式。
    e.g. Internationalization -> i18n
  • 大小写严格区分。
    e.g. ABC与abc是两个不同变量名。
  • 最好使用有具体含义的单词组合。易读、易写、便于程序的维护。
    e.g. fatherName、childHeight、gender

实战实例(赋值并输出)

FatherHeight.java 程序实现

public class FatherHeight{
	public static void main(String[] args){
		//定义double类型的身高并赋值
		double fatherHeight = 1.76d; //d指双精度
		System.out.println("父亲的身高为:"+fatherHeight+"米");
	}
}

目的:初始化父亲的身高fatherHeight变量并赋值,最后输出身高。

常量

格式:final 数据类型 常量名=值;
e.g. final float PI = 3.1415926


整形常量

分为十进制整数、八进制整数和十六进制整数三种类型。无二进制整数!

  • 十进制整数:
    e.g. 1234 , -1 , 0
  • 八进制整数:以0开始
    e.g. 83(十进制) -> 0123 , -10(十进制) -> -012

0123(8) -> 1x82+2x81+3x80=64+16+3=83(10)

  • 十六进制整数:以0x/0X开头
    e.g. 291(十进制) -> 0x123 , -18(十进制) -> -0x12

0x123 -> 1x162+2x161+3x160=256+32+3=291

PS:整型常量默认为int类型,占用32位的内存空间。若在整型常量末尾加一个 l/L ,则为长整型常量(Long类型,e.g. 125L , -125l)。


浮点型常量

  • 带小数点型:
    e.g. 0.125 , .125 , 125. , 125.0
  • 科学计数法型(e/E前后必须有数,并且e/E后面必须为整数):
    e.g. 125e3 , 125E3

PS:为了区别单精度浮点型常量和双精度浮点型常量,用 f/F表示单精度浮点常量(float,e.g. 0.125F),用 d/D 表示双精度浮点常量(double,e.g. 0.125D)。如果数值后没有标识精度的字母,则默认为双精度浮点常量。


字符型常量

  • 半角单引号把字符括起来
    e.g. ‘a’ , ‘2’

字符串常量

  • 常用半角双引号括起来的由0个或多个字符组成的字符序列
    e.g. “” , “Java World”

实战实例(求数值数据类型最大/小值)

MaxValue.java 程序实现

public class MaxValue{
	public static void main(String[] args){
		System.out.println("byte型最大值为:"+Byte.MAX_VALUE);
		System.out.println("short型最大值为:"+Short.MAX_VALUE);
		System.out.println("int型最大值为:"+Integer.MAX_VALUE);
		System.out.println("long型最大值为:"+Long.MAX_VALUE);
		System.out.println("float型最大值为:"+Float.MAX_VALUE);
		System.out.println("double型最大值为:"+Double.MAX_VALUE);
	}
}

PS:上述程序可将MAX_VALUE更换为MIN_VALUE,因而求得数值数据类型的最小值。

运算符

算数运算符

算数运算符
单目运算符
双目运算符
三目运算符
+ 取正
- 取负
++ 自增1
-- 自减1
+ 加法
- 减法
* 乘法
/ 除法
% 取余
一个 ?一个 :
e.g. a >b ? true : false

关系运算符

常用于比较大小,运算结果为布尔(boolean)型
成立为true,否则为false

运算符描述可运算的数据类型
>大于int , float , char
<小于int , float , char
==等于所有数据类型
!=不等于所有数据类型
>=大于或等于int , float , char
<=小于或等于int , float , char

逻辑运算符

运算符描述功能
&&简洁与两边都为true,结果为true
如过左边为false,右边就不再进行判断或运算
||简洁或两边都为false,结果为false
如果左边为true,右边就不再进行判断或运算
!取反(非)对感叹号后方进行取反运算
e.g. !1 == false
&非简洁与两边都为true,结果为true
两边都会判断或运算
|非简洁或两边都为false,结果为false
两边都会判断或运算
^异或两侧不同时,结果为true
同为true或false时,结果为false

位运算符

运算符描述功能(运算时两边均换算成二进制数,进行相同位比较)
&按位与均1为1
e.g 0111&0001 == 0001
|按位或有1为0
e.g. 1100|1010 == 1110
~按位取反0变1,1变0
e.g. ~1111 == 0000
^按位异或不同时为1
e.g. 1111^0000 == 1111
二进制的正负转换
正数转负数

例如:byte型常量5的二进制为:

00000101
负数的二进制码为对应正数原码取反再加1

取反:

11111010
再加1
11111011
PS:上述黄色标记的数字(即第一位)代表数值的正负
负数转正数

可逆向思维想:

  1. 看二进制原码第一位是不是为1,为1则代表十进数为负数。
  2. 取原码的反码
  3. 二进制+1,即可得到原二进制原码所对应十进制负数的正数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BOY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值