1 论名字的重要性—标识符
程序猿:我有一个程序猿朋友,名字的简写是"gs"
小爪:狗屎?
程序员:我去!他名字叫郭深!
小爪:。。。。。。
1.1 什么是标识符
标识符其实就是名字,比如变量名、类名、方法名等
1.2 标识符的命名规范
由字母、数字、下划线(_)和美元符号($)组成;
不能以数字开头;
区分大小写;
不能是Java中的保留字和关键字
比如:
age、score 、$title
student_name
getName
1.3 关键字
在Java中有特定含义、专门用途的一些标识符称为关键字(keyword),关键字全部小写
abstract | boolean | break | byte | case | catch |
---|---|---|---|---|---|
char | class | const | continue | default | do |
double | else | extends | final | finally | float |
for | goto | if | implements | import | instanceof |
int | interface | long | native | new | package |
private | protected | public | return | short | static |
strictfp | super | switch | synchronized | this | throw |
throws | transient | try | void | volatile | while |
assert | enum |
保留字:没有定义用途,但保留备用,如goto、const
请判断以下标识符是否合法:
HelloWord、username2、user_name、_userName、
$abc_123、public、
2UserName、user#Name、Hello World
2 我的地盘儿我做主—变量
小爪参加“世界开发者大会”,本次开发者大会中,小爪会介绍自己的一些新特性。
作为世界知名人物,小爪入住“程序猿大酒店”的“总统套房”,房间号1024
开完会后,小爪回到房间,甩掉高跟鞋,换上性感的睡衣,开始放飞自我
引子:程序 是用来处理数据的,那么数据存在哪?如何访问?
2.1 什么是变量
首先要明确,变量是用来存储数据的,根据业务需要,存储的数据可能会发生变化。
变量的语法中,包含一些术语:数据类型、变量名、变量的值
变量:保存程序执行过程中的数据
变量名:定义变量的标识符
变量类型:存放的数据类型
变量值:内存单元中装载的数据
变量其实是内存中的一小块区域,可以通过变量名来访问这块区域。
因此,每一个变量使用前必须先声明(定义),然后进行赋值(填充内容),才能使用。
注意:java的变量是区分大小写的,int a和int A 表示两个不同的变量
2.2 变量定义
1) 数据类型 变量名;
变量名 = 对应数据类型的值;
int a;
a = 10;
注意:a = 10中10称为常量值
2)数据类型 变量名 = 对应数据类型的值; (定义变量时直接赋值,推荐写法)
int a = 1024;
注:"=" 表示赋值,变量不赋值,是不能直接使用的,会报错
比如下面代码,定义了变量c,但是没有赋值,打印的时候,直接报错
int c;
System.out.println(c)
2.2 变量分类
1)按变量的数据类型划分
基本类型变量:保存的是真实的数字、字符等数据。
引用类型变量:保存的也是数据,只不过这个数据比较特殊,是对象的引用值(相当于对象的内存地址)
2)按被声明的位置划分(了解)
局部变量:方法或语句块内部定义的变量
全局变量:方法外部、类的内部定义的变量
2.3 命名规范
基本原则:见名知义,不要使用中文拼音,更不要使用拼音的首字母组合
【变量名、方法名】:首字母小写,其余单词首字母大写。这种命名方式也称为小驼峰原则
例如:title,void payTime()
【类名】:首字母大写,其余单词首字母大写。这种命名方式也称为大驼峰原则
例如:class UserManager {}
【包名】:全部小写,用英文的"."隔开
例如:com.glls
【项目名】:全部小写
例如:studentsys
【常量】:全部大写,单词之间用_隔开
例如:public static final int NO_LOGIN_STATUS = 401;
3 数据类型
3.1 基本数据类型
Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,以保证Java程序的可移植性。
数据类型 | 所占空间/bit位 | 可表示的数值范围 |
---|---|---|
byte(字节型) | 8(1个字节) | -128~127 |
short(短整型) | 16(2个字节) | -2^15 ~ 2^15-1 |
int(整型) | 32(4个字节) | -2^31 ~ 2^31-1 |
long(长整型) | 64 (8个字节) | -2^63~ 2^63-1 |
float(单精度) | 32(4个字节) | -3.4E38~3.4E38 |
double(双精度) | 64(8个字节) | -1.7E308~1.7E308 |
char(字符) | 16(2个字节) | 0-65535 |
boolean | true/false |
1)整数类型
byte 字节型 /shor 短整型/int 整型/long长整型
注意:
声明long类型需要加‘l’或‘ L’,如:long l = 3L;
byte b = 97;
short s = 200;
int i = 10000;
long l = 64646413132L;
可以使用二进制值、八进制值、十六进制对整数类型赋值
byte b1 = 0b10;
byte b2 = 010;
byte b3 = 0x10;
int i1 = 0b10;
int i2 = 010;
int i3 = 0x10;
赋值时不能超出该类型的数值范围
byte b = 1000;
2)浮点类型
float/double
浮点数就是我们通常说的小数。
Java浮点类型有两种表示形式:
十进制形式,必须含有小数点,例如:
3.14 314.0 0.314
科学记数法形式,如:
3.14e0 3.14E2 3.14E-1
float f = 10.3f;
double d = 12.3;
double d1 = 12.3e0;
double d2 = 12.3e2;
double d3 = 12.3e-2;
double d4 = 12.3E2;
注意:一般我们提到浮点数默认指的是double型,如要声明float型,则需在数字后面加f或F。
3)字符类型
char
Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示(Unicode是全球语言统一编码)
值可以为英文,也可以为中文
char c = 'A';
char gender= '男';
char类型还可以直接使用数字赋值
char c = 97;
char gender= 22899;
System.out.println(c); // a
System.out.println(gender); // 女
通过unicode编码赋值
char c = '\u4e2d';
System.out.println(c); // 中
char类型还可以使用转义字符赋值
程序猿的魔法棒“\”
程序猿:我想点石成金, \石头 -> 黄金
程序猿:我想变超人, \绿帽子 -> 内裤外穿的绿帽子
Java语言中使用转义符号''来将其后的字符转变为其它含义
一些常见的转义字符
名称 | 描述 | |
---|---|---|
\n | 换行 | 将光标移到下一行的第一格。 |
\t | 水平制表 | 将光标移到下一个水平制表位置。相当于Tab键作用 |
' | 单引号 | 产生一个单引号。 |
" | 双引号 | 产生一个双引号。 |
\ | 斜杠 | 产生一个反斜杠。 |
// \ 在java中有特殊含义,转义符号,这个需要和其他字符配合到一起来用,有特殊的含义
// 转义字符
char c = '\t';
System.out.println(c);
// 输出单引号这个字符
// 单引号在java里有特殊的语法含义,单引号用来括住字符的
// \' 相当于将原来的语法含义去掉,将其转换为普通的单引号字符
char c1 = '\'';
System.out.println(c1);
System.out.println("super\tman");
System.out.println("super\nman");
4)布尔类型
布尔类型的值:true/false (小写)
boolean类型表示真假,一般用于逻辑运算、流程控制
boolean ret = true;
boolean isDel = false;
3.2 类型转换
![img](https://gllspictures.oss-cn-beijing.aliyuncs.com/img/1648005720028-f8864864-bc29-4f4b-9f59-db2001ee981b.png)
类似不同大小的杯子之间互相倒水
1)自动类型转换
取值范围小的会自动转为取值范围大的
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double
byte b = 30;
// 自动类型转换
short s = b;
System.out.println(s);
int i = s;
System.out.println(i);
double d = i;
System.out.println(d);
byte不能转为char;
short,char不能互相转换
byte b = 12;
// 编译报错
char c = b;
short s = 2000;
// 编译报错
char c = s;
2)强制类型转换
取值范围大的转为取值范围小的时,需要进行强制类型转换
基本语法:类型A 变量名 = (类型A)类型B的变量;
如:
long l = 100L;
// 强制转换为int
int i = (int)l;
long l2 = 23456789000L;
// 强制类型转换,数据溢出
int i1 = (int)l;
注意:有可能造成精度降低或数据溢出,使用时要注意
另外,boolean 类型不能转换成任何其它基本数据类型
4 你的数学是体育老师教的吧—运算符
bug国选驸马,引无数程序猿竞折腰。初试题目:
int i = 10;
int j = i++ + i++;
上面代码执行后,i和j的值分别是几?
此题一出,众多程序猿纷纷顿足捶胸,悔不当初。无奈之下,程序猿绿帽子只能求助小爪出手......
4.1 表达式
由变量、数字和运算符组成的式子
表达式都是从左至右计算,返回运算结果,如果有括号,先处理括号里面的内容
4.2 算术运算符
运算符 | 描述 | 示例 |
---|---|---|
+ | 加 | 5 + 5 = 10 |
- | 减 | 5 - 4 = 1 |
* | 乘 | 5 * 3 = 15 |
/ | 除 | 10 / 3 = 3 , 10.0 / 3 = 3.3333333 |
% | 取模(求余) | 10 % 3 = 1, 10.0 % 3 = 1.0 |
++ | 自增(前,后) | ++i,i++ |
-- | 自减(前,后) | --i,i-- |
注意:
有多种类型的数据混合运算时,系统首先将所有数据转换成容量最大的那种数据类型,然后再进行计算。
例如int型和long型运算时,先把int量转成long型后再进行运算。
运算中使用的浮点数常量值,按照double类型进行处理
运算中使用的整数常量值,按照int类型处理
// 算数运算符 + - * / % ++ --
int i = 10;
int i2 = i + 3;
int i3 = (i2 - 5) * i;
System.out.println(i3);
int a = 10;
int b = 3;
// 如果除数和被除数都是整型变量,/ 表示取整(商) 10 / 3 = 3
System.out.println(a / b);
double d = 15.5;
double d2 = 3.0;
// 对于浮点数,/ 数学意义上的除法,得到是小数
System.out.println(d / d2);
System.out.println(d / 3);
// 取余
System.out.println(a % b);
System.out.println(d % 3);
System.out.println("-------------------------------");
// 自增 ++, 每次+1
int m = 10;
m++;
System.out.println(m); // 11
++m;
System.out.println(m); // 12
System.out.println("-------------------------------");
int n = 10;
// ++ 出现在变量后面,后自增
// n++ 这个表达式,先返回n的值(k = 10),然后进行自增的操作
int k = n++;
System.out.println(k); // 10
System.out.println(n); // 11
System.out.println("--------------------------------");
int p = 10;
// ++ 出现在变量前面,前自增
// ++p 这个表达式,先对p进行自增操作(11),然后这个表达式在返回p的值(q = 11)
int q = ++p;
System.out.println(q); // 11
System.out.println(p); // 11
// 自减 --
int r = 10;
r--;
System.out.println(r);
--r;
System.out.println(r);
int r1 = 10;
// int r2 = r1--;
int r2 = --r1;
System.out.println(r2);
自增和自减一般针对整数处理
i++ 与 ++i的区别:
i++ 表示 先返回i的值,再对i进行+1操作
++i 表示 先对i进行+1操作,再返回i的值
4.3 赋值运算符
运算符 | 描述 | 示例 |
---|---|---|
= | 赋值 | a=3; b=2; |
+= | 加等于 | a+=b 相当于 a = a + b |
-= | 减等于 | a-=2; |
*= | 乘等于 | |
/= | 除等于 | |
%= | 模等于 |
int a = 10;
int b = 20;
// a = a + b;
a += b;
System.out.println(a);
// a = a - b
a -= b;
System.out.println(a);
// a = a * 4
a *= 4;
System.out.println(a);
4.4 关系运算符
比较运算符两边的操作数,结果返回boolean类型
运算符 | 描述 | 示例 |
---|---|---|
== | 相等于 | 4==3,返回false |
!= | 不等于 | 4!=3, 返回true |
< | 小于 | |
> | 大于 | |
<= | 小于等于 | |
>= | 大于等于 |
// == 、 != 、 > 、 < 、 >= 、 <=
int age = 30;
// 判断值是否相同
System.out.println(age == 30);
// 不等于 !=
System.out.println(age != 20);
System.out.println(age > 40);
System.out.println(age < 40);
System.out.println(age >= 30);
System.out.println(age <= 10);
4.5 逻辑运算符
程序员绿帽子在小爪帮助下顺利通过初试。复试题目:如果判断指定的年份是否是闰年?
程序员绿帽子毫不犹豫的抱紧了小爪的大腿......最终,绿帽子和bug国公主过上了没羞没臊的生活
温馨提示:能被4整除,但是不能被100整除的年份;或者能被400整除的年份,是闰年
运算符 | 描述 | 示例 |
---|---|---|
&& | 短路与 | 全true返回true,否则false。比如 false && true, 返回false |
|| | 短路或 | 全false时返回false,否则返回true。比如false || true, 返回ture |
! | 逻辑非 | !true, 返回false;!false,返回true |
& | 逻辑与 | 运算结果与&&用法相同 |
| | 逻辑或 | 运算结果与||用法相同 |
&&:表达式的多个条件中,只要有一个为false,整个表达式返回false
||:表达式中的多个条件中,只要有一个为true,整个表达式返回true
&& 与 & 区别:比如a&&b, 如果 表达式a 为 false,则不计算 表达式b;而a&b时,表达式a和b都会计算
|| 与 | 区别:比如a||b,如果 表达式a为true,则不计算表达式b
a | b | a&&b | a||b | !a |
---|---|---|---|---|
true | true | true | true | false |
false | true | false | true | true |
true | false | false | true | false |
false | false | false | false | true |
// 逻辑运算符 针对多个条件进行综合判断 整个判断结果,也是boolean
// 判断一个人是否是高富帅
// 身高 180cm及以上, 个人资产 1千万及以上 , 颜值9分及以上
int height = 182;
int money = 100000000;
int handsome = 10;
// && 短路与 同真为真,有假即假
// 只有所有条件都为true ,返回true
// 只要又一个为false,整个判断结果为false
// 180 >= 180 && 10 >= 10000000 && 9 >= 9
// true && false && true
boolean ret = height >= 180 && money >= 10000000 && handsome >= 9;
System.out.println(ret);
// || 短路或 同假为假,有真既真
// 所有的条件中,只要有一个为true,整个结果就是true
// 所有条件都是false,整个结果false
// 相亲 三个条件里只要满足一个,女方就很满意
boolean ret2 = height >= 180 || money >= 10000000 || handsome >= 9;
System.out.println(ret2);
// ! 逻辑非 真变假 !true=false 假变真 !false = true
// 矮穷挫
boolean ret3 = !(height >= 180 && money >= 10000000 && handsome >= 9);
System.out.println(ret3);
int year = 1996;
boolean ret4 = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
// boolean ret4 = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
System.out.println(ret4);
4.6 三目运算符
? :
基本语法:表达式1 ? 表达式2 : 表达式3
说明:判断表达式1是否成立,如果成立,执行表达式2,否则执行表达式3
int age = 30;
int ret = age > 20 ? 1 : 0;
System.out.println(ret);
// 表达式2和表达式3的运算结果的类型,决定了接收整个表达的返回值的变量的类型
boolean ret2 = age > 50 ? true : false;
System.out.println(ret2);
4.7 位运算符
符号 | 名称 | 英文 | 操作 |
---|---|---|---|
& | 按位与 | AND | 两个运算数为1,则结果为1 |
| | 按位或 | OR | 两个运算数有一个为1,则结果为1 |
^ | 按位异或 | XOR | 两个运算数不同时,则结果为1 |
>> | 右移 | 右移动,左边补0,相当于除以2 | |
<< | 左移 | 左移动,右边补0,相当于乘2 |
int a = 1;
int b = 0;
System.out.println(a & b);
System.out.println(a | b);
System.out.println(a ^ b);
// 左移1位相当于乘以2
// 0000 0001 0000 0010
System.out.println(a << 1);
int c = 4;
// 右移1位相当于除以2
// 0000 0100 0000 0010
System.out.println(c >> 1);
4.8 运算符的优先级
Java中的运算符很多。一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低
注意:优先级不用记,无法确定优先级时,使用小括号即可
附录:
计算机中数据存储单位
位(bit):是计算机存储处理信息的最小单元,每一个bit位的值只能为0或者1
字节(byte):一个字节由8个bit位组成,计算机中是以字节为单位存储数据。不同类型的数据占用的字节数不同
1KB = 1024字节
1MB = 1024KB
1GB = 1024MB
计算机中的二进制
进制就是进位制
二进制表示逢二进一,二进制中只有0、1两个值。
比如,二进制中
1 + 1 = 10
10 + 1 = 11
11 + 1 = 100
计算机中的数据都是以二进制形式保存、运行的。
二进制形式数据的最高位表示符号,最高位如果为0表示正数,最高位为1表示负数
二进制数据可以使用0b开头,如0b10,表示二进制的10
同理:
八进制:
逢八进一,八进制中包含的值为: 0,1,2,3,4,5,6,7。
为了区分,表示八进制数据时,以0开头,如012表示八进制12 ,
十六进制:
逢十六进一,十六进制包含 0-15的值,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f (a表示10,b表示11,以此类推,f表示15)
十六进制值以0x或0X开头,如0x1bf3,
进制转换
二进制与十进制之间的转换
(1)十进制转换为二进制,倒除法
12->1100
35->100011
(2)二进制转换为十进制数
1111- >1 * 2 ^ 3 + 1 * 2 ^ 2 + 1 * 2 ^ 1 + 1 * 2 ^ 0 = 8 + 4 + 2 + 1 = 15
10010-> 1 * 2 ^ 4 + 1 * 2 ^ 1 = 18
(为了方便理解,可对比十进制计算:136 = 1 * 10 ^ 2 + 3 * 10 ^ 1 + 6 * 10 ^ 0 = 100 + 30 + 6)
ascii码表
是英文American Standard Code for Information Interchange的缩写(美国信息交换标准代码)
ASCII码是目前计算机最通用的编码标准