0 基础学 Java (三)变量

码字不易,对你有帮助 点赞/转发/关注 支持一下作者

微信搜公众号:不会编程的程序圆

看更多干货,获取第一时间更新

思维导体


目录


正文


一、 变量

1. 变量的作用域

作用域:该变量能生效的范围, 一般是变量定义所在的代码块 (大括号)。

1-1.java

public class helloWorld{
	
	public static void main(String[] args) {
		
		{
			int a = 10;//a 的作用域只在这个花括号内
		}
		
		System.out.println(a);//不能通过编译
	}
}

1-2.java

public class helloWorld{
	
	public static void main(String[] args) {
		
		int a = 10;
		{
			System.out.println(a);//编译可以通过,因为 a 的作用域是整个 main 方法 
		}
		
		System.out.println(a);
	}
}

2. 变量的命名规则

同 C 语言一样,Java 变量的命名规则:

  • 一个变量名只能包含数字, 字母, 下划线

  • 数字不能开头

  • 变量名是大小写敏感的

注意: 虽然语法上也允许使用 /$命名变量, 但是 不推荐 这样做。

建议:

  • 变量命名要具有描述性, 见名知意

  • 变量名不宜使用拼音(但是不绝对)

  • 变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大

二、 常量

常量不能在程序运行过程中发生修改 。

常量主要有以下两种形式:

Ⅰ:字面值常量

10 // int 字面值常量(十进制)
010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L // long 字面值常量. 也可以写作 10l (小写的L)
1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f // float 字面值常量, 也可以写作 1.0F
true // boolen 字面值常量, 同样的还有 false
'a' // char 字面值常量, 单引号中只能有一个字符
"abc" // String 字面值常量, 双引号中可以有多个字符.

Ⅱ: final 关键字修饰的常量

用 final 修饰的变量建议使用 大写 命名。

final int A = 10;
A = 20;//不能通过编译

用 final 修饰的变量不能再被赋值。

final int A = 10;
a = 10;//即便不改变 a 的值,也不能通过编译

如果一个用 final 修饰的变量没有初始化,那么这个变量是可以被赋值的(但是只能赋值一次)。

final int A;
A = 10;//可以通过编译
final int A;
A = 10;
A = 11;//不能通过编译

进制问题

问题1:将十进制 122 转换为 二进制

方法1:用短除法求 2 进制

方法2:写出权重直接看

问题2:将 2 进制转化为 8 进制 与 16进制

比如 122 的 二进制序列为 0111 1010 (每四位写在一起)

转为 8 进制的方法十分简单,就是先将每三位写在一起:

001 111 010 (如果二进制数不够可以高位补 0)

将每三位二进制数写成 十进制形式(其实并不算是10进制形式,可以这样理解)

010 表示的是 2

111 表示的是 7

001 表示的是 1

172 就是转换后的 八进制数

原理:八进制每一位可以写 0 ~ 7 总共 8 种数,表示 8 种不同情况。3 个 二进制位可以写 000 ~ 111 总共 2 * 2 * 2 = 8 种。

所以,3 个 二进制数 与 1 个 八进制是等价的。

同理:1 个 十六进制数 与 4 个 二进制数是等价的。也可以通过上述方式进行转换。

三、 类型转换

int 和 long/double 相互赋值

int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.

int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过

long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.

double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.

结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.

使用强制类型转换:

int a = 10;
long l = 20;
double d = 1.0;
		
a = (int)l;//可以通过编译
a = (int)d;//可以通过编译

int 与 boolean 相互赋值

int a = 10;
boolean b = true;
b = a; // 编译出错, 提示不兼容的类型
a = b; // 编译出错, 提示不兼容的类型

甚至使用强转都不行:

int a = 10;
boolean b = true;
a = (int)b;

结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值.

int 字面值常量赋值给 byte 类型

byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失

注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内.

结论: 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理.

总结:

  • 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型。
  • 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
  • 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。

四、数值提升

int 和 long 混合运算

int a = 10;
long b = 20;
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过.

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来
接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

byte 和 byte 的运算

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
//Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
//byte c = a + b;
//           ^

结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都
提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误。

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于
4 个字节的类型, 会先提升成 int, 再参与计算。

正确的写法:

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

总结:

  • 不同类型的数据混合运算, 范围小的会提升成范围大的.

  • 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

五、int 与 String 之间的转换

int 转换为 string

int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);

String 转换为 int

String str = "100";
int num = Integer.parseInt(str);

[0 基础学 java ] 系列的代码可以在我的 Github 仓库查看,地址如下:

https://github.com/hairrrrr/Java_SE_EnjoyLearning

欢迎 star !(点一个 star 方便你下回查看)

本系列的教学也可以在 GitHub 观看(GitHub 上看教学的好处是所有文章的目录比较清晰)。


以上就是本次的内容。

如果文章有错误欢迎指正和补充,感谢!

最后,如果你还有什么问题或者想知道到的,可以在评论区告诉我呦,我可以在后面的文章加上你们的真知灼见。

关注我,看更多干货!

我是程序圆,我们下次再见。

发布了65 篇原创文章 · 获赞 226 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_44954010/article/details/104766107
今日推荐