02_Java基本语法(上)变量与运算符

关键字与保留字

官方文档:Java Language Keywords

关键字

abstractcontinuefornewswitch
assert***defaultgotopackagesynchronized
booleandoifprivatethis
breakdoubleimplementsprotectedthrow
byteelseimportpublicthrows
caseenuminstanceofreturntransient
catchextendsintshorttry
charfinalinterfacestaticvoid
classfinallylongstrictfp**volatile
constfloatnativesuperwhile

保留字

  • const
  • goto

标识符

Java 对各种变量、方法和类等要素命名时使用的字符序列称为 标识符

标识符定义规则

  • 由字母、数字、_或$组成
  • 数字不可以开头
  • Java 中严格区分大小写,长度无限制
  • 标识符不能包含空格
  • 不可以使用关键字和保留字,但能包含它们

命名规范

  • 包名:所有字母都小写:xxxyyyzzz
  • 类名、接口名:首字母大写:XxxYyyZzz
  • 变量名、方法名:第一个小写,后面单词首字母大写:xxxYyyZzz
  • 常量名:所有字母都大写:XXX_YYY_ZZZ

注:起名尽量见名知意

变量

变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值

  • 声明变量
    • 语法:<数据类型> <变量名称>
    • 例如:int i
  • 变量的赋值
    • 语法:<变量名称> = <值>
    • 例如:var = 10;
  • 声明和赋值变量
    • 语法:<数据类型> <变量名> = <初始化值>
    • 例如:int var = 10;

变量的分类 - 按数据类型

在这里插入图片描述

变量的分类 - 按声明的位置不同

  • 在方法体外,类体内声明的变量成为成员变量
  • 方法体内部声明的变量成为局部变量

在这里插入图片描述

相同点:都有声明周期

不同点:局部变量除形参外,需显式初始化

整数类型

byte

占用1字节,-128 ~ 127

short

2字节,-2^15 ~ 2^15 -1

int

4字节,-2^31 ~ 2^31-1(约21亿)

long

8字节,-2^63 ~ 2^63-1

注:Java的整型常量默认为int型,声明long型需在后加lL

浮点类型

float

4字节,-3.403E38 ~ 3.403E38

double

8字节,-1.798E308 ~ 1.798E308

注:Java的浮点数常量默认是double型,声明float型,需在后加fF

字符类型

char

2字节,Java中所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或者其他书面语的一个字符。

表现方式:

  • 用单引号括起来的就是一个字符,例如:char c1 = ‘a’;
  • 特殊字符常量,例如:char c2 = ‘\n’;
  • 直接使用Unicode值来表示字符,例如:char c3 = ‘\u545a’;

char类型是可以进行运算的。因为它都对应有Unicode码值。

布尔类型

boolean用来判断逻辑条件,一般用于流程控制

  • if语句
  • while语句
  • do-while语句
  • for语句

boolean类型只允许取值true或false,无null,不可以使用0或非0代替false或true

基本数据类型转换

自动类型转换:容量小的类型自动转换为容量大的数据类型。容量大小排序如下

byte,short,char - int - long - float - double

  • byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
  • boolean类型不能与其他数据类型运算
  • 任何基本数据类型的值和字符串进行连接运算时(+),基本数据类型的值将自动转化为字符串类型
long l1 = 123L;
float f1 = .23f;
float f2 = f1 + l1;
//long l2 = f1 + l1;// 编译报错

字符串类型 String

  • String 不是基本数据类型,属于引用数据类型

  • 使用方式:String str = “abcd”;

强制类型转换

  • 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时加上强制转换符:(), 但可能造成精度降低或溢出,格外注意。
  • 字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可
    以实现把字符串转换成基本类型
String a = "43";
int i = Integer.parseInt(a);

boolean类型不可以转换为其他的数据类型

进制

关于进制

  • 所有数字再计算机底层都是以二进制存在的。
  • 整数有4种表达方式
    • 二进制(binary): 0,1, 以0b或0B开头。
    • 十进制(decimal): 0-9
    • 八进制(octal):0-7 ,以0开头表示。
    • 十六进制(hex): 0-9及A-F,以0x或0X开头

二进制

Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;
当是long类型时,二进制默认占64位,第64位是符号位

二进制的整数有如下三种形式:

  • 原码:直接将一个数值换成二进制数。最高位是符号位
  • 负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
  • 负数的补码:其反码加1。

计算机以二进制补码的形式保存所有的整数。

  • 正数的原码、反码、补码都相同
  • 负数的补码是其反码+1

为什么要使用补码存储呢?

计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂! 于是
人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正
数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有
减法, 这样计算机运算的设计就更简单了。

在这里插入图片描述

1个字节表示的数字范围为-128~127,为什么会有-128呢,因为+0和-0都表示0,重复了,于是就将-0用来表示-128了。

进制间的转化

10 <=> 2,2 <=> 8,2 <=> 16,10 <=> 8,10 <=> 16

在这里插入图片描述

运算符

  • 算数运算符 + - * /
  • 赋值运算符 =
  • 比较运算符 > <
  • 逻辑运算符 && ||
  • 位运算符 >
  • 三元运算符 A?B:C

算术运算符

  • 如果对负数取模,可以把负号忽略,如:5%-2=1。但被模数是负数则不可忽略。此外取模运算结果不一定为整数。
  • "+"除了字符串相加功能外,还能把非字符串转换为字符串,如:sout(“5+5=” + 5+5);//打印结果是5+5=55

赋值运算符

  • 符号:=
    • 当"="两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理
    • 支持连续赋值 int x = 10 = b;
  • 扩展赋值运算符:+=,-=,*=,/=,%=

思考: +和+=有什么区别?都是用来计算两个数的和,+计算后会产生一个新值,+=计算后直接赋值给之前的参数。

char a = 1;
a = a + 1;//编译报错,因为整数运算默认是返回int类型
a += 1;//正常运行,因为+=会在运算后强制转换类型赋值到a上去

比较运算符

  • 比较运算符的结果都是true/false

  • 区别好=和==

boolean b1 = false;
if(b1 == true) {
    sout("结果为真");
} else {
    sout("结果为假");//输出这个
}
if(b1 = true) {
    sout("结果为真");//输出这个
} else {
    sout("结果为假");
}

逻辑运算符

& 逻辑与 | 逻辑或 ! 逻辑非

&&短路与 ||短路或 ^逻辑异或

异或就是两个不一样就为真,否则为假

  • & 和 &&的区别
    • 单&,左边无论真假,右边都要运算
    • 双&,左边为假,就不在运算右边
// 面试题
class Test{
    public static void main(String[] args){
        boolean x = true;
        boolean y = false;
        short z = 42;
        if((z++==42)&&(y=true))z++;
        if((z=false)||(++z==45))z++;
        System.out.println("z="+z);// 46
    }
}

位运算符

  • 位运算符是直接对整数的二进制进行的运算

  • 没有<<<运算符

运算符运算范例
<<左移3<<2=12 -> 3*2*2=12
>>右移3>>1=1 -> 3/2=1
>>>无符号右移3 >>> 1 = 1 --> 3/2=1
&6 & 3 = 2
|6 | 3 = 7
^异或6 ^ 3 = 5
~取反~6 = -7

三元运算符

  • 格式:(条件表达式)?表达式1:表达式2
  • 表达式1和表达式2为同种类型
  • 三元运算符与if-else的联系与区别
    • 三元运算符可简化if-else语句
    • 三元运算符要求必须返回一个结果
    • if后的代码块可有多个语句
// 获取两个数中的最大数
int num1 = 10;
int num2 = 20;
int max = num1 > num2 ? num1 : num2;
// 获取三个数中的最大数
int num1 = 10;
int num2 = 20;
int num3 = 30;
int max = num1 > num2 ? num1 > num3 ? num1:num3 :num2 > num3 ? num2:num3;

运算符优先级

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值