目录
一、变量与内存
1、变量的概念
变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用, 该区域的数据可以在同一类型范围内不断变化。
用现实生活中的酒店来比喻:
我们将内存的空间比喻成酒店的空间。
我们在内存中声明了一个变量,是不是就相当于在酒店中要了一个房间。
我们定义一个变量的类型,是不是就相当于在要这个房间的时候,我们要选择是单人间还是双人间还是其他类型的房间。
我们在给这个变量类型起名,是不是就相当于在选好了房间类型后,给的这个房间的门牌号,要不然你怎么去找。
我们给这个变量赋值,是不是就相当我们入住了选好的房间。
2、变量的定义
数据类型分为基本数据类型和引用数据类型,引用数据类型有类(class)、接口(interface)、数组、字符串(String)等,基本数据类型有布尔型(boolean)、字符型(char)、数值性【整数类型(byte、short、int、long)、浮点类型(float、double)】
声明格式有三种:
1)、先声明后赋值
2)、声明并赋值
3)、一次声明多个变量
注意:局部变量必须先声明变量并赋值才可以使用;
3、内存的单位
内存存储单位:bit(位)t < Byte(字节) < KB < MB < GB < TB < PB < EB等等很多。
单位转换机制:8bit = 1 字节;1024字节 = 1KB,除了位和字节不一样,剩下的转换都是1024进一位的
谈谈二进制位的推算(十进制换算二进制)
1字节 = 二进制中的八位,在二进制中则表示为:0000 0000
举例:
数字1:占内存一个字节,在二进制中则表示为:0000 0001
数字2:占内存一个字节,在二进制中则表示为:0000 0010
数字3:占内存一个字节,在二进制中则表示为:0000 0011
数字4:占内存一个字节,在二进制中则表示为:0000 0100
........依次类推
二、Java变量的数据类型
1、基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
整数类型
这里解释中文意思:byte(中文意思为:字节)、short(中文意思为:短的)、int是integer的缩写(中文意思为:整数)、long(中文意思为:长的),所以想要真的当一个编码大佬一定要学好英语。
注意:每个变量类型都有其取值范围如果超出了就会报错
正常取值范围
在long类型中当我们取值一个大于int的值时会发生什么呢,如下图所示:
这是为什么呢?明明给long值赋的值在其取值范围内呀!为什么会报错呢?
原来呀在Java中,通常整数类型的值默认都是int类型的,嗯?你说什么时候是默认?看下图:
那这个和long类型有什么关系呢?
在Java中因为默认值为int,所以其申请的内存空间是int类型的空间,小于int的取值范围时没有关系,但是当大于int的取值范围时,就会出错。那么我们一定要存一个大值怎么办,那就是在long值得后面加上L,这个L是不分大小写的,但是如果写小写的话,会容易看成1,所以一般都是大写。当我们加了L后,就表示让计算机帮忙将两个int大小的空间合在一起来存值。
小数类型
这里解释中文意思:float(中文意思为:浮点型)、double(中文意思为:双重的),单从字面意思来看,我们都可看出float为单精度的小数、double为双精度小数。我们可以这样认为,双精度小数比单精度小数更精确
我们来测试一下float这个变量类型
怎么会报错呢?原来在定义float的时候需要给值得后面加上f
那么为什么要加f呢?这是因为在Java中小数类型的值默认为:double类型的,加f是为了让计算机认为我这个类型是单精度的float。另外f也不区分大小写,大写小写都可以根据自己喜好。
单精度float(有效小数位为:7位)如下图所示:
双精度double(有效小数位为:16位)一般小数位16位完全够用了。
布尔数据类型
boolean(中文意思为:布尔型),该类型变量的取值只有两个true和false代表真或假,有很多妙用。
单个字符类型
char(character的缩写中文意思为:字符),即存储单个字符的变量类型
那么char值可不可以赋值数字呢?看下图:
我们发现给char赋值86,控制台竟然输出的是个大写V,这是为什么呢?
在这里就不得不提一下ASCII编码了,那么什么时ASCII编码?
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。
在ASCII编码中每个字符
2、引用数据类型
在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。比如:
类(class)
数组(array)
字符串(String)
....
别的先不说,我们现在只说String类型
String (字符串数据类型)
String类型是一个可以储存多个字符的字符串
严格来说String是有范围的,但你在常规使用中根本达不到这一目标
String 数据类型可以储存任何字符,并且其首字母必须大写;
注:在数据类型中,数字类型和布尔类型在赋值时,无需加别的符号;char数据类型在赋值时,要加英文版单引号,String数据类型赋值时,要加英文版双引号
3、数据类型转换
java中整数类型默认的int类型;小数类型默认的double;
自动类型转换:小转大,则为自动类型转换,但需要注意的是,这里说的是数字类型之间的转换
当大类型转换小类型时,程序不会自动转换
这时候就要我们手动加格式转换了
强制类型转换:大转小,前提条件为:大的类型的值必须在小的类型的取值范围中,另外小数类型转换整数时,会丢失精度,即小数位会去掉只保留整数。
三、Java标识符规范及注释使用
1、变量名规则
变量名规则是在Java中必须如此操作才可正常运行程序
1)、变量名的首字母必须以字母、下划线(_)、美元符($)开头。
2)、组成部分包含字母、数字、下划线(_)、美元符($)组合而成。
3)、变量名不可以与Java中的关键字重叠
2、变量名规范
变量名规范则是在Java编程领域来说是一种大众化认可,接受的一种书写规范。这可以让我们的代码看起来更通俗和简便。
1)、当多个字母组合在一起时的变量第一个单词的首字母小写,第二个单词的首字母大写。
2)、变量名语义化,如上图看到dogName就可以想到,这是一个小狗的姓名。
3)、杜绝使用下划线与美元符作为变量名的开头
4)、想成为一个大牛级别的程序员,必须克服自己不使用汉语拼音来命名。
3、Java中的注释
1)、单行注释://
2)、多行注释/* */
3)、文档注释/** */
四、Java的运算符
1、算数运算符
注:算数运算符操作数必须是数值类型。
分为一元运算(只有一个操作数)、二元运算(有两个操作数,运算符在两个操作数之间)
一元运算符
"++"和"--"运算符,只允许用于数值类型的变量,不允许用于表达式中;"++"和"--"可以用于数值变量之前或者之后;
两处使用差别:
"++"和"--":再同一行代码中,放在操作数的前方时,优先对操作数做+1或-1操作,后再执行别的操作。
"++"和"--":再同一行代码中,放在操作数的后方时,先执行别的操作,后再执行+1或-1操作。
二元运算符
在算数运算符中, "+ ", "- ", "* ", "/ "完成加减乘除四则运算,%是求两个操作数相除后的余数。运算规则和数学运算基本相同,在算数运算中,计算时按照从左向右的顺序计算,乘除和求余优先于加减,不同的是,程序中的乘运算符不可省略,在数学中可写为 "y=2x "而程序中必须写为 "y=2*x "。
注:当两个类型为数值类型+号放在中间则成为运算符
2、关系运算符
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean类型)的数值。
判断相等的符号是两个等号,而不是一个等号,在java程序里一个等号为赋值,两个等号为判断相等,这个需要特别小心。比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。
3、逻辑运算符
逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。
对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。 所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。 对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。 所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
对于!运算来说,结果为true的则为false,结果为false的则为true。
具体操作如下图所示:
4、位运算符
位运算是以二进制位为单位进行的运算,也就是说,会把十进制数先转换为二进制进行运算;
比如20 从十进制转换成二进制则为:10100
比如1001011 从二进制转换成十进制则为:75
左移(<<)
栗子:int数据类型占四个字节(byte),一个字节占8位(bit),也就是说一个int占32位
int i = 10;的话转成二进制为:00000000 00000000 00000000 00001010
i << 2值为: 00000000 00000000 00000000 00101000
在将00000000 00000000 00000000 00101000转为十进制为40;
那么i << 2的计算结果为40
规律:值为10的话
向左位移2位,则2的2次方等于4,4在乘以10得到最终结果40;
向左位移3位,则2的3次方等于8,8在乘以10得到最终结果80;
栗子:int数据类型占四个字节(byte),一个字节占8位(bit),也就是说一个int占32位
int i = 25;的话转成二进制为:00000000 00000000 00000000 00011001
i >> 2值为: 00000000 00000000 00000000 00000110
在将00000000 00000000 00000000 00000110转为十进制为6;
那么i >> 2的计算结果为6
规律:值为10的话
向右位移2位,则2的2次方等于4,10在除以4得到最终结果2,小数位去掉,因为你的值类型为整数;
向右位移3位,则2的3次方等于8,10在除以8得到最终结果1,小数位去掉,因为你的值类型为整数;
按位与(&)
只有两个操作数对应位同为1时,结果为1,其余全为0.
栗子:
int类型的25&30转成二进制
25为:11001
30为:11110
值为:11000,转为十进制:24
按位或(|)
只有两个操作数对应位同为0时,结果为0,其余全为1.
栗子:
int类型的25&30转成二进制
25为:11001
30为:11110
值为:11111,转为十进制:31
异或(^)
当运算符两边不同的时候结果为1,两边相同的时候结果为0 这就是传说中的同性相杀,异性相吻。
栗子:
int类型的25^30转成二进制
25为:11001
30为:11110
值为:00111,转为十进制:7
验证结果如下图所示
五、拓展与练习
1、小拓展
1)、既然有输出语句,那么输入语句怎么写呢?
在Java中的util包下提供了一个Scanner类,可以用来接收控制台的信息。
首先我们先要导包:import java.util.Scanner;
创建对象:Scanner in = new Scanner(System.in)
接收语法为:int number = in.nextInt();
其他类型接收:
double age = in.nextDouble();
String age = in.next();
2)、“+”符号有几重身份呢?
只要链接了至少一个字符串的时候它就是连接符如:
System.out.println(“数字:”+5); 输出结果为 数字:5
如果链接的是一个数字类型的值时,那么他就是运算符如:
System.out.println(5+5); 输出结果为10
2、机试题
1:某娱乐场所一人266元,老人95折,会员卡9折,儿童半价,用代码输出每个人的价格
2:计算商品价格,如下图所示
3:输出超市订购单,如下图所示.积分计费规则为每100元为3积分