「Java基础_Day3」基础语法

1 关键字

关键字在定义的时候,全部小写

2 标识符

标识符由「英文大小写、数字、$、_」组成,对于常见的命名格式为:
A:包,全部小写

B:类与接口,每个单词首字母大写

C:方法与变量,首字母小写,从第二个单词开始大写

D:常量,全部大写,多个单词使用_隔开

3 注释

注释分为三类,
A:单行注释 //
B:多行注释 /**/
C:文档注释

4 常量、进制与进制转换

4.1常量

常量被分为两大类,
A:字面值常量

  1. 字符串常量
  2. 整数常量
  3. 小数常量
  4. 字符常量
  5. 布尔常量
  6. 空常量(null)

B:自定义常量

4.2 原码、反码、补码

需要说明:

原码

  • 正数原码的最高位是0;负数的原码最高位是1;

反码

  • 正数的反码与原码相同
  • 负数的反码与原码符号位相同,数值位取反(0变1,1变0)

补码

  • 正数的补码与原码相同
  • 负数的补码在反码的基础上+1

4.3进制转换

进制转换可以分二类,A:「x进制转换到10进制」;B:「10进制到x进制」;C:「x进制转换到x进制」;
A: 基权系数法
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
结果:系数*基数^权次幂之和。

B:短除法
除基取余,直到商为0,余数反转。

C:快速转换法
8421码

5 变量

使用变量的时候要注意的三个问题:
A:作用域
变量定义在哪个大括号内,它就在这个大括号内有效。
并且,在同一个大括号内不能同时定义同名的变量。
B:初始化值
没有初始化值的变量不能直接使用。
你只要在使用前给值就行,不一定非要在定义的时候立即给值。
推荐在定义的时候给值
C:定义格式
a:数据类型 变量名 = 初始化值;
b:数据类型 变量名;
变量名 = 初始化值;

int a;
...
...
a = 5;

6 数据类型和类型转换

6.1 数据类型

Java是强类型语言,数据类型被分为两类

  • 基本数据类型(4类8种)
  • 引用数据类型(类、接口、数组)
基本数据类型占用字节
整数(byte)1
整数(short)2
整数(int)4
整数(long)8
浮点数(float)4
浮点数(double)8
字符(char)2
布尔(boolena)1
  • 整数默认为int型
  • 浮点数默认为double型
  • long型整数需要加L
  • 单精度浮点需要加F

6.2 数据类型转换

  • boolean类型不参与转换
  • 默认转换
    • 从小到大
    • byte,short,char-----int —long—float—double(转换顺序)
    • byte,short,char三者不参与转换
  • 强制转换
    • 从大到小
    • 可能会有精度的损失,一般不建议这样使用。
    • 格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);

为什么float类型4字节,long类型8字节,但是在转换时long会被提升为float?
因为它们底层的存储结构不同,float表示的数据范围比long的范围要大

long2^63-1
float3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

9 思考题

1.两种方式的区别?
A:float f1 = 12.345f;
B:float f2 = (float)12.345;

浮点数默认的精度为double类型,A方法在赋值阶段确定了浮点数为单精度的float类型,B方法进行强制转换,将原本默认的double类型转换为float类型,这个过程损失了精度
2.下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;

有问题,第三句「byte b3 = b1 + b2;」出现问题,
变量相加会参照给定类型,b1,b2为byte类型,相加自动提升为int类型,这时类型冲突报错。
那为什么第四句「byte b4 = 3 + 4;」不报错?
因为3+4为常量,而常量会先把结果计算出来,进行判断是否在byte允许的范围内,在就不报错
第三句「byte b3 = b1 + b2;」b1,b2为变量,不会进行数值允许的判断
3.下面的操作结果是什么呢?
byte b = (byte)130;

粗略看下来这个问题是有问题的,因为byte的范围在-128-127之间,但又是没有问题的,因为强制转换了
计算结果分为三部
(1)计算二进制
130 = 00000000 00000000 000000000 100000102)截取为byte类型
得到:100000103)已知补码求原码(计算机中的计算是针对补码的计算)
		符号位		数值位
补码	1			0000010

反码	1			0000001

原码	1			1111110

所以最终看到的结果为11111110 = -126
4. 连接符号
System.out.println("hello"+'a'+1);  // helloa1 这里的+不是加法运算,而是字符串连接符。
System.out.println('a'+1+"hello"); // 98hello 加法运算(字母与数字相加)
System.out.println("5+5="+5+5); // 5+5=55 这里的+不是加法运算,而是字符串连接符。
System.out.println(5+5+"=5+5");// 10=5+5  +是加法的意思
int a = 100;
int b = 20;

5. 交换a和b数据
方法1:异或法,一个数据对另一个数据位异或两次,该数本身不变。
a = a ^ b;
b = a ^ b; //b = a
a = a ^ b; //a = a ^ b ^ a
方法2:第三个变量
int c = a;
a = b;
b = c;
方法3:变量相加的做法
a = a + b; // 120
b = a - b; // 100
a = a - b; // 20
方法4:一句话搞定
b = (a + b) - (a = b);  // 120 - 20
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值