1 论名字的重要性—标识符
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 我的地盘儿我做主—变量
2.1 什么是变量
首先要明确,变量是用来存储数据的,根据业务需要,存储的数据可能会发生变化。
变量的语法中,包含一些术语:数据类型、变量名、变量的值
变量:保存程序执行过程中的数据
变量名:定义变量的标识符
变量类型:存放的数据类型
变量值:内存单元中装载的数据
变量其实是内存中的一小块区域,可以通过变量名来访问这块区域。
因此,每一个变量使用前必须先声明(定义),然后进行赋值(填充内容),才能使用。
注意:java的变量是区分大小写的,int a和int A 表示两个不同的变量
2.2 变量定义
1) 数据类型 变量名;
变量名 = 对应数据类型的值;
int a;
a = 10;
2)数据类型 变量名 = 对应数据类型的值; (定义变量时直接赋值,推荐写法)
int a = 1024;
注:"=" 表示赋值,变量不赋值,是不能直接使用的,会报错
比如下面代码,定义了变量c,但是没有赋值,打印的时候,直接报错
int c;
System.out.println(c)
2.2 变量分类
1)按变量的数据类型划分
基本类型变量:保存的是真实的数字、字符等数据。
引用类型变量:保存的也是数据,只不过这个数据比较特殊,是对象的引用值(相当于对象的内存地址)
2)按被声明的位置划分(了解)
局部变量:方法或语句块内部定义的变量
全局变量:方法外部、类的内部定义的变量
2.3 命名规范
基本原则:见名知义,不要使用中文拼音,更不要使用拼音的首字母组合
【变量名、方法名】:首字母小写,其余单词首字母大写。这种命名方式也称为小驼峰原则
例如:title,void payTime()
【类名】:首字母大写,其余单词首字母大写。这种命名方式也称为大驼峰原则
例如:class UserManager {}
【包名】:全部小写,用英文的"."隔开
例如:com.qfedu
【项目名】:全部小写
例如: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 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); // 女
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 类型转换
类似不同大小的杯子之间互相倒水
1)自动类型转换
取值范围小的会自动转为取值范围大的
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double
byte不能转为char;
short,char不能互相转换
2)强制类型转换
取值范围大的转为取值范围小的时,需要进行强制类型转换
基本语法:类型A 变量名 = (类型A)类型B的变量;
如:
long l = 100L;
int i = (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 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整除的年份,是闰年
运算符 | 描述 | 示例 |
&& | 逻辑与 | false && true, 返回false |
|| | 逻辑或 | false || true, 返回ture |
! | 逻辑非 | !true, 返回false |
&&:表达式的多个条件中,只要有一个为false,整个表达式返回false
||:表达式中的多个条件中,只要有一个为true,整个表达式返回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);
附录:
计算机中数据存储单位
位(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表示负数
同理:
八进制:
逢八进一,八进制中包含的值为: 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码是目前计算机最通用的编码标准