Skip to content

1 论名字的重要性—标识符

程序猿:我有一个程序猿朋友,名字的简写是"gs"

小爪:狗屎?

程序员:我去!他名字叫郭深!

小爪:。。。。。。

1.1 什么是标识符

标识符其实就是名字,比如变量名、类名、方法名等

1.2 标识符的命名规范

由字母、数字、下划线(_)和美元符号($)组成;

不能以数字开头;

区分大小写;

不能是Java中的保留字和关键字

比如:

age、score 、$title

student_name

getName

1.3 关键字

在Java中有特定含义、专门用途的一些标识符称为关键字(keyword),关键字全部小写

abstractbooleanbreakbytecasecatch
charclassconstcontinuedefaultdo
doubleelseextendsfinalfinallyfloat
forgotoifimplementsimportinstanceof
intinterfacelongnativenewpackage
privateprotectedpublicreturnshortstatic
strictfpsuperswitchsynchronizedthisthrow
throwstransienttryvoidvolatilewhile
assertenum

保留字:没有定义用途,但保留备用,如goto、const

请判断以下标识符是否合法:

HelloWord、username2、user_name、_userName、

$abc_123、public、

2UserName、user#Name、Hello World

2 我的地盘儿我做主—变量

小爪参加“世界开发者大会”,本次开发者大会中,小爪会介绍自己的一些新特性。

作为世界知名人物,小爪入住“程序猿大酒店”的“总统套房”,房间号1024

开完会后,小爪回到房间,甩掉高跟鞋,换上性感的睡衣,开始放飞自我

引子:程序 是用来处理数据的,那么数据存在哪?如何访问?

2.1 什么是变量

首先要明确,变量是用来存储数据的,根据业务需要,存储的数据可能会发生变化。

变量的语法中,包含一些术语:数据类型、变量名、变量的值

img

变量:保存程序执行过程中的数据

变量名:定义变量的标识符

变量类型:存放的数据类型

变量值:内存单元中装载的数据

变量其实是内存中的一小块区域,可以通过变量名来访问这块区域。

因此,每一个变量使用前必须先声明(定义),然后进行赋值(填充内容),才能使用。

注意:java的变量是区分大小写的,int a和int A 表示两个不同的变量

2.2 变量定义

1) 数据类型 变量名;

变量名 = 对应数据类型的值;

java
int a;
a = 10;

注意:a = 10中10称为常量值

2)数据类型 变量名 = 对应数据类型的值; (定义变量时直接赋值,推荐写法)

java
int a = 1024;

注:"=" 表示赋值,变量不赋值,是不能直接使用的,会报错

比如下面代码,定义了变量c,但是没有赋值,打印的时候,直接报错

java
int c;
System.out.println(c)

img

2.2 变量分类

1)按变量的数据类型划分

基本类型变量:保存的是真实的数字、字符等数据。

引用类型变量:保存的也是数据,只不过这个数据比较特殊,是对象的引用值(相当于对象的内存地址)

2)按被声明的位置划分(了解)

局部变量:方法或语句块内部定义的变量

全局变量:方法外部、类的内部定义的变量

2.3 命名规范

基本原则:见名知义,不要使用中文拼音,更不要使用拼音的首字母组合

【变量名、方法名】:首字母小写,其余单词首字母大写。这种命名方式也称为小驼峰原则

例如:title,void payTime()

【类名】:首字母大写,其余单词首字母大写。这种命名方式也称为大驼峰原则

例如:class UserManager {}

【包名】:全部小写,用英文的"."隔开

例如:com.glls

【项目名】:全部小写

例如:studentsys

【常量】:全部大写,单词之间用_隔开

例如:public static final int NO_LOGIN_STATUS = 401;

3 数据类型

img

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
booleantrue/false

1)整数类型

byte 字节型 /shor 短整型/int 整型/long长整型

注意:

声明long类型需要加‘l’或‘ L’,如:long l = 3L;

java
byte b = 97;
short s = 200;
int i = 10000;
long l = 64646413132L;

可以使用二进制值、八进制值、十六进制对整数类型赋值

java
byte b1 = 0b10;
byte b2 = 010;
byte b3 = 0x10;

int i1 = 0b10;
int i2 = 010;
int i3 = 0x10;

赋值时不能超出该类型的数值范围

java
byte b = 1000;

img

2)浮点类型

float/double

浮点数就是我们通常说的小数。

Java浮点类型有两种表示形式:

十进制形式,必须含有小数点,例如:

3.14 314.0 0.314

科学记数法形式,如:

3.14e0 3.14E2 3.14E-1

java
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是全球语言统一编码)

值可以为英文,也可以为中文

java
char c = 'A';  
char gender= '男';

char类型还可以直接使用数字赋值

java
char c = 97;  
char gender= 22899;
System.out.println(c); // a
System.out.println(gender); // 女

通过unicode编码赋值

java
char c = '\u4e2d';
System.out.println(c); // 中

char类型还可以使用转义字符赋值

程序猿的魔法棒“\”

​ 程序猿:我想点石成金, \石头 -> 黄金

​ 程序猿:我想变超人, \绿帽子 -> 内裤外穿的绿帽子

Java语言中使用转义符号''来将其后的字符转变为其它含义

一些常见的转义字符

名称描述
\n换行将光标移到下一行的第一格。
\t水平制表将光标移到下一个水平制表位置。相当于Tab键作用
'单引号产生一个单引号。
"双引号产生一个双引号。
\斜杠产生一个反斜杠。
java
//    \ 在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");

img

4)布尔类型

布尔类型的值:true/false (小写)

boolean类型表示真假,一般用于逻辑运算、流程控制

java
boolean ret = true;
boolean isDel = false;

3.2 类型转换

img

类似不同大小的杯子之间互相倒水

1)自动类型转换

取值范围小的会自动转为取值范围大的

byte -> short -> int -> long -> float -> double

char -> int -> long -> float -> double

java
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不能互相转换

java
byte b = 12;
// 编译报错
char c = b;

short s = 2000;
// 编译报错
char c = s;

2)强制类型转换

取值范围大的转为取值范围小的时,需要进行强制类型转换

基本语法:类型A 变量名 = (类型A)类型B的变量;

如:

java
long l = 100L; 
// 强制转换为int
int i = (int)l;

long l2 = 23456789000L;
// 强制类型转换,数据溢出
int i1 = (int)l;

注意:有可能造成精度降低或数据溢出,使用时要注意

另外,boolean 类型不能转换成任何其它基本数据类型

4 你的数学是体育老师教的吧—运算符

bug国选驸马,引无数程序猿竞折腰。初试题目:

java
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类型处理

java
// 算数运算符 + - * / % ++ --
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;
*=乘等于
/=除等于
%=模等于
java
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
<小于
>大于
<=小于等于
>=大于等于
java
// == 、 != 、 > 、  < 、  >= 、  <=
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

aba&&ba||b!a
truetruetruetruefalse
falsetruefalsetruetrue
truefalsefalsetruefalse
falsefalsefalsefalsetrue
java
// 逻辑运算符  针对多个条件进行综合判断 整个判断结果,也是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

java
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
java
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码是目前计算机最通用的编码标准

image-20230330192633796