Java SE 01(标识符、数据类型、类型转换、变量和常量、运算符、包机制、使用Debugger)
Java SE 01
一、标识符
-
所有标识符都应该以字母(A-Z或者a-z),美元符号($),或者下划线(_)开始
-
不能使用关键字作为变量名或者方法名
-
标识符是大小写敏感的
-
Java可以使用中文作为变量名或类名,一般不推荐这样命名
-
非法标识符举例:123abc, -salary, #abc
二、数据类型
-
Java两大数据类型
基本类型(primitive type): 4类8种
整数型:byte short int long
浮点型:float double
字符型:char
布尔型:boolean
引用类型(reference type) : 可理解为指针变量类型,默认初始值为null
字符串、数组、类、接口、Lambda
注意事项:
- 字符串不是基本类型,而是引用类型
- 浮点数当中默认类型是double,如果一定要使用float类型,需要加一个后缀F,推荐使用大写字母后缀
- 如果是整数,默认类型是int,如果一定要使用long类型,需要加上一个后缀L,推荐使用大写字母后缀
- Java中char类型允许写一个中文字,char cz =' 中';
- char类型不允许写空字符如:'' 不允许写一个以上字符如:'aa'
-
八大基本数据类型举例
//整数 int num1 = 10; byte num2 = 20; short num3 = 30; long nun4 = 30L; //long类型后面要加L //小数:浮点数 float num5 = 50.1F; //float类型后面要加F double num6 = 3.1415926; //字符 char name = 'a'; //字符串String不是关键字,是类 String namea = "Hello"; //布尔值:是和非 boolean flag = true; boolean flag2 = flase;
-
基本数据类型的占用内存大小与数值范围
-
所有的字符本质都是数字
-
ASCII码表: American Standard Code for Information Interchange
-
Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但从128开始包含更多的字符
-
Unicode表(48 - '0', 97 - 'a', 65 - 'A')每个字符占两个字节,数值范围是0-65536(2^16)
U0000-UFFFF
char c1 = '\u0061'; System.out.println(c1); //output: a
字符可以与数字进行强制类型转换
char c1 = 'A'; char c2 = '人'; System.out.println((int)c1);//output:65 System.out.println((int)c2);//output:20154
-
-
整数拓展
二进制0b, 十进制, 八进制0, 十六进制0x
int i = 10; int i2 = 010;//八进制0 int i3 = 0x10;//十六进制0x System.out.println(i);//10 System.out.println(i2);//8 System.out.println(i3);//16
-
浮点数拓展
注意:银行业务数据一般要使用BigDecimal数学工具类
float f = 0.1f; double d = 1.0/10; System.out.println(f == d); //output: false float d1 = 232332332323f; float d2 = d1 + 1; System.out.println(d1 == d2)//output: true //结论: 最好完全使用浮点数进行比较
三、类型转换
Java是强类型的语言,所以有些运算,需要进行类型转换
运算中不同类型先转化为同一类型,然后进行运算
一般 低->高 自动转换 , 高->低 强制转换(注意数值范围,可能会溢出)
低------------------------------------------>高
byte, short, char -> int -> long -> float ->double
类型转换总结
-
不能对布尔值进行转换
-
不能把对象类型转换为不相干的类型
-
把高容量转低容量时,强制转换
-
转换时可能存在内存溢出,或是有精度问题
-
byte/int/short这三种类型都可以发生数学运算,如加法
-
byte/int/short这三种数据类型在运算的时候,都会首先被提升成int类型,然后再计算
在给变量进行赋值的时候,如果右侧表达式当中全是常量,没有任何的变量,那么编译器javac将会直接将若干个常量表达式计算得到结果
short num1 = 10; short a = 5; short b = 8; short result0 = a + b;//Error short result1 = 5 + 8;//Correct! short result3 = 5 + a + b;//Error
-
对于byte/short/char三种类型,如果右侧赋值的数值没有超过范围,则Java编译器会自动隐含地为我们补上(byte) (short) (char)
- 如果右侧没有超出左侧的范围,编译器补上强转
- 如果右侧超过了左侧范围,那么编译器直接报错
int money = 10_0000_0000;//JDK7 新特性,数字间用下划线分隔开好看
int years = 20;//int 数值范围在21亿左右
int total = money*years; //计算时溢出了
long total2 = money*years;//转换前已经存在问题了,两个int相乘
long total3 = money*((long)years);//int*long 无强制是低转高为int>long,long*long
System.out.println(total);//-1474836480
System.out.println(total2);//-1474836480
System.out.println(total3);//20000000000
System.out.println((int)23.7);//output: 23 高转低,损失精度
System.out.println((int)-45.89f);//output: -45 高转低,损失精度
char c = 'a';
int d = c + 1;//低转高,自动转换
System.out.println(d);//output: 98
System.out.println((char)d);//output: b 高转低,强制转换
short num1 = 30;
short num2 = 40;
short sum = num1 + num2;//int->short可能会溢出
int sum = num1 + num2;//int->int
四、变量和常量
变量作用域
- 类变量:要加static该变量是要从属于类的,会随这个类一起存在一起消失,不从属于对象(不用建立对象就可使用)
- 实例变量:一般在类内部在方法外部,实例变量从属于对象(需要建立对象后使用),如果不自行初始化,就是这个类型的默认值(int -> 0, double -> 0.0 , boolean-> false, char-> u0000, 引用类型都是null 如 String -> null)
- 局部变量
public class Variable {
static int allClicks = 0; //类变量
String str = "Hello World"; //实例变量
public void method {
int i = 0; //局部变量
}
}
变量的命名规范
-
适用于变量、方法、类名
-
类成员变量:首字母小写和驼峰原则(除了第一个单词后面的单词首字母大写)
lastName、monthSalary
-
局部变量:首字母小写和驼峰原则
-
常量:字母全是大写和中间要加下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则:Man、GoodMan
-
方法名:首字母小写和驼峰原则:run(), runRun()
常量
-
初始化后不能再改变的值, 也就是不会变动的值
-
可以将常量理解为一种特殊的变量,它的值被设定好后在程序中不允许再被改变
-
final是修饰符与表示类变量的static先后顺序可互换(static也是修饰符,所以也就是修饰符不区分先后顺序)
//final 常量名 = 值;
final double PI = 3.14; //常量名一般用大写字母
五、运算符
逻辑运算符号
//短路运算
int c = 5;
boolean d = (c < 4) && (c++ < 4);//c<4为false,&&后面的部分不再进行运算
System.out.println(d);//output: false
System.out.println(c);//output: c = 5
位运算(效率极高)
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
<<(左移) 每左移一位相当于*2
> > (右移) 每右移一位相当于/2
字符串连接符
int a = 10;
int b = 20;
System.out.println(a+b); //output:30
System.out.println(""+a+b); //output:1020
System.out.println(a+b+"");//output:30
三元运算符
x ? y : z
如果x == true则结果为y,否则为z
int score = 50;
String grade = score<60 ? "fail" : "pass";
System.out.println(grade);//output: fail
六、包机制
-
Idea中的常用快捷键
Ctrl + 鼠标左键点击某个类名如String可查看包内源码
Alt + Enter 对某个类进行错误识别方便导包
-
在每个Java文件中package一定是在import之前的位置
-
一般用公司域名倒置作为包名
-
导包不能将与当前类名(或是Java文件名)相同的包中类导入
-
import xxxxxxx. 相当于导入当前包下的所有类*
七、使用Debugger
-
作用:可以让代码逐行执行,查看代码的执行过程,调试程序中出现的bug
-
使用方式:
在行号的左边,鼠标左键单击,添加断点(每个方法的第一行,或是哪里有bug添加到哪里)
右键,选择Debug执行程序
程序就会停留在添加的第一个断点处
-
执行程序:
idea快捷键
f8:逐行执行程序
f7:进入到方法中
shift+f8:跳出方法
f9:跳到下一个断点,如果没有下一个断点,那么就结束程序
Console:切换到控制台,查看输出情况
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具