JavaSE基础语法(2)

继上次的SE基础语法,我们这次学习剩下的部分。

基本数据类型

布尔型(boolean):boolean 类型适于逻辑运算,一般用于程序流程控制。

java语言中boolean 类型数据只允许取值 true 或 false 。

tip:不可以0或非 0 的整数替代false和true,这点和C语言不同。

字符型char: char 型数据用来表示一个单个字符.
char占2字节。
‘’单引号用来表示单个字符,“”双引号用来表示字符串
tip:字符串其实也是由一个一个字符组成的。如:String s=“abc“其实就相当于‘a’'b''c'这样存于计算机底层。

而计算机之所以能够显示字符,是因为底层有个对照表(编码表)
可以涵盖世界上所有书面语的字符。
char运算 char类型是可以运算的因为char在字符编码表中有对应的数值。
在JAVA中,对char类型字符运行时,直接当做对应编码表的整数来 对待。
char c=‘a’+1; 先将’a’提升为int,计算结果98,对应的 字符是b

ASCII码

 在计算机内部,所有数据都使用二进制表示。每一个二进制位(bit)有 0 和 1 两种状 态,因此 8 个二进制位就可以组合出 256 种状态,这被称为一个字节(byte)。一个 字节一共可以用来表示 256 种不同的状态,每一个状态对应一个符号,就是 256 个符 号,从 0000000 到 11111111

ASCII(ASCII American Standard Code for Information Interchange,美国
信息互换标准代码) 上个世纪60年代,美国制定了一套字符编码,对英语字符与
二进制位之间的关系, 做了统一规定。这被称为ASCII码。 ASCII码一共规定
了128个字符的编码,比如空格“SPACE”是32(二进制 00100000),大写
的字母A是65(二进制01000001)。这128个符号(包括32个不 能打印出来的
控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 • 缺点:
不能表示所有字符。

Unicode

包含全球各个国家的语言符号,万国码,兼容ASCII码,这个编号范围从 0x000000 到 0x10FFFF (十六进制),有 110 多万,每个字符都有一个唯一的 Unicode 编号,这个编号一般写成 16 进制,在前面加上U+。
例如:“马”的 Unicode 是U+9A6C。 • Java底层采用unicode编码来
存储字符.
● 随着互联网的兴起,计算机与网络,计算机与计算机之间的通讯急需一
种统一 的 编码方式 来编译和解释 Unicode 编码. 这种 编码方式 就是
我们现在使用最广泛的 UTF-8,所以,UTF-8 是 Unicode 编码的一种具
体实现,它规定了字符转换到二进制编码的一系列规则.
● UTF-8 是一种边长的,用于在文件,传输时使用的具体编码表。最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字 节表示一个符号,根据不同的符号而变化字节长度。

表示英文字母时是1字节,表示中文时是3字节。

基本数据类型转换

● java中可以从任意基本类型转型到另外的基本类型 .
● 例外 : boolean 类型不可以转换为其他的数据类型。
● 转换分为默认转换和强制转换
● 默认转换 :整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以
下原则: 容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排
序为: byte,shor t,char->int->long->float->double byte,short,char之
间不会互相转换,他们三者在计算时首先会转换为int类型 
● 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造
成精 度降低或溢出;使用时要格外注意。
● 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的
那一 种数据类型,然后再进行计算。

总结一下就是,数据转换只有两种情况。

容量小  ---->  容量大    默认会自动转换  byte,short,char-->int。

容量大  ---->  容量小    默认不能进行转换  可以强制类型转换: 可能会出现问题: 数据溢出,精度降低。

如图所示,直接将long类型值带入int类型中显然是不行的,IDEA会报错,这时候我们就要用到强制转换。用上强制转换后就不会报错啦,当然在用强制转换的时候一定要小心可能会造成数据流失。

 

 这里讲一个特殊案例,浮点型转换整数型。

 这里我们会看到,明明上面说的容量小的float转化为大类型long听着没什么问题对吧,可是为什么会报错呢。这就要提起浮点数的存储机制了。

● 在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间。可是为什么4个字节的float型的最大值会大于long型的最大值呢?
● long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。
● 而float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:
● V=(-1)^s * M * 2^E

 ● 浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。
● 其中第1位,符号位,即S。
● 接下来的8位,指数域,即E。
● 剩下的23位,小数域,即M。
● 也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大。

所以看完知识点,这时候再回头看看上面的float转long为什么会出错。由于小数二进制底层存储结构与整数不同  4字节float表示的范围大于8字节long。

运算符

介绍很简单粗暴直接看图就是了。

 这里要提的是自增和自减,这个东西说简单也简单,但你要说它复杂,那他也是有一定复杂程度的。

在单独运算时放在前面和后面都一样。

 在混合运算时,++在后 先运算 后++
                        ++在前面  先++, 后运算。

比较运算符

比较运算符的结果都是boolean型,也就是要么是true,要么是flase。

逻辑运算符:
● &—逻辑与 | —逻辑或 !—逻辑非
● && —短路与 || —短路或 ^ —逻辑异或

这其实就是数学中的一些逻辑运算知识

 ● “&”和“&&”的区别:
● 单&时,左边无论真假,右边都进行运算;
● 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
● “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。

赋值运算符

● 符号:=
● 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原
则进行处 理。
● 扩展赋值运算符: +=, -=, *=, /=, %=

tip:注意不要把“=”和“==”搞混了,两者意思截然不同。

这里给大家提出一个思考题,这个题曾经也是面试工作的一道题。

short s=3;

(1)s=s+2;

(2)s+=2;

其中1,2式有什么区别。其实只要将代码敲一敲试一下,你就会发现1式式错误的而2式是正确的。

因为1式等号右侧s是short类型而2是int类型,所以才会报错。而2式中则会隐式转换为short类型所以不会报错。

条件运算法

  语法:
(条件表达式)? 表达式1:表达式2;
 条件表达式结果为true,运算后的结果是表达式1; 为false,运算后的结果是表达式2;

位运算

日常开发中位运算使用相对较少,但是巧妙的使用位运算可以大量减少运行开销, 优化算法。

举个栗子:

int a=4;

就是0000 0100

<<1的意思就是变成了0000 1000。所以a的值就变成了8。

而>>就是有符号的移动  符号不变的。>>>就是无符号右移  注意负数 移位后,高位补0。

 各种表达式的运算顺序 

这个也是比较需要注意的点,有的时候我们惯性思维会从左向右参与运算,但其实各种运算符也有优先级顺序的。

控制台输入

控制台输入: 在基础语法学习时,交互式的向程序中输入内容,实际程序中是用不到.

● 使用标准输入串System.in 使用Scanner取得一个字符串或一组数字 在新增一
个Scanner对象时需要一个System.in对象,因为实际上还是 System.in在取得
用户输入。
● Scanner的next()方法用以 取得用户输入的字符串; nextInt()将取得的输入字
符串转换为整数类型;
● 同样,nextFloat()转换成浮点型; nextBoolean()转 换成布尔型。
● 例: System.out.print("输入");
Scanner scan = new Scanner(System.in);
String read = scan.next ();
System.out.println("输入数据:"+read);
在使用Scanner对象时,需要在文件头带入 java.util.Scanner; 写法为: import java.util.Scanner;

 If条件语句

               (1)if(条件表达式){  条件成立执行  }
               (2) if(条件表达式){  条件成立执行  }else{  条件不成立执行 }
               (3)if(条件表达式){  条件成立执行  }else if(条件表达式){  条件成立执行 }...
               (4)if(条件表达式){  条件成立执行  }else if(条件表达式){  条件成立执行 }...else{ 所有条件都不成立执行 }

这就是if语句的几种使用情况。

tip:在用if是后面没用大括号的话,有效的作用范围只有紧挨着的一行。

Switch语句

一般用switch能实现的功能,用if else语句都可以实现。

多分支选择语句,根据表达式的值,来执行多个操作中的一个。

switch (表达式){
case value1: 语句序列1;
[break];
…………
case valueN: 语句序列N;
[break];
[default : 缺省语句;]
}

表达式可以是byte、short、int、char、枚举类型。JDK 7以后,可以使用String类型;
case语句后面只能使用常量表达式;
case后的值不能重复;
某个case分支如果没有提供break语句,则继续执行下一个case后的语句;当表达式的值与任一case子句中的值都不匹配时,将执行default后面的语句;如果没有default子句,则程序直接跳出switch语句。

那么if和switc的区别是什么?   什么时候用if   什么时候switch
  即 选项比较固定:,不能进条件比较的时候。

添加break 终止,  是否添加break,根据实际需要而定。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值