转义字符
\r 表示接受键盘输入,相当于按下回车。
\n 表示换行。
\t 制表符,相当于Table键
\b 退格键,相当于Back Space
\’ 单引号
\’’ 双引号
\\ 表示一个斜跨
整型的形式
1.十进制: 都是以0-9这九个数字组成,不能以0开头。
2.二进制: 由0和1两个数字组成。
3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以ox开始。
八种基本数据类型
整数:byte(8) short(16) int(32) long(64)
小数: float(32) double(64)
布尔: boolean(1)
字符: char(16)
字符串的数据类型是:String 引用数据类型,不属于基本数据类型。
变量的声明
格式1:数据类型 变量名;
格式2: 数据类型 变量名字1 , 变量名字2 ,……变量名字n;
备注:变量名的首字母都一般都是以小写字母开始。
java数据类型的转换
数据类型转换:
小数据类型-------->大数据类型 自动类型转换
大数据类型--------->小数据类型 强制类型转换
强制类型转换的格式:
小数据类型 变量名 = (小数据类型)大数据类型
强制类型转换损失精度!
数据类型转换要注意的细节:
1. 凡是byte、short 、 char数据类型数据在运算的时候都会自动转换成int类型的数据再运算。
2. 两个不同数据类型的数据在运算的时候,结果取决于大的数据类型。
算术运算符
前自增:先自增,后使用。
后自增: 先使用,后自增。
(++i)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式;
(i++)后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增;
运行原理: 因为后自增要使用 到没有+1之前的值,那么jvm会先声明一个变量用于保存没有+1之前的值。
结论:如果运算符在变量的前面,则该变量自增1或者自减1,然后返回的是变量的新值,如果运算符在变量的后面,则变量也会自增或者自减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。
赋值运算符
运算符 | 运算 | 范例 | 结果 |
= | 赋值 | a=3,b=2 | a=3,b=2 |
+= | 加等于 | a=3,b=3;a+=b; | a=5,b=2; |
-= | 减等于 | a=3,b=2,a-=b; | a=1,b=2; |
*= | 乘等于 | a=3,b=2,a*=b; | a=6,b=2 |
/= | 除等于 | a=3,b=2,a/=b; | a=1,b=2; |
%= | 模等于 | a=3,b=2,a%=b; | a=1,b=2 |
比较运算符
运算符 | 运算 | 例子 | 结果 |
== | 相等于 | 4= =3 | false |
!= | 不等于 | 4!= 3 | true |
< | 小于 | 4 < 3 | flase |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
Instanceof | 检查是否是类的对象 | "hello"instanceof String | true |
==用于比较两个基本数据类型数据的时候,比较的是两个变量所存储的值是否一致.
==用于比较两个引用类型变量数据的时候,比较的是两个引用类型变量所记录的内存地址是否一致。
逻辑运算符
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真右边不参与运算。
“ ^ ”异或与“|”或的不同之处是:当左右都为true时,结果为false。
& 与 | 或 ^ 异或 ! 非
移位操作符
位运算符 | ||
运算符 | 运算 | 范例 |
<< | 左移 | 3 << 2 = 12 --> 3*2*2=12 |
>> | 右移 | 3 >> 1 = 1 --> 3/2=1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 反码 | ~6 = -7 |
位运算符的细节 | |
<< | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,空缺位补1。 |
>>> | 被移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 二进制位进行&运算,只有1&1时结果是1,否则是0; |
| | 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; |
^ | 任何相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0
不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1 |
三元运算符
格式
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;如果条件为false,运算后的结果是表达式2;
三元运算符要注意的细节:
使用三元运算符的时候,一定要使用该表达式返回的结果,或者是定义一个变量接收该表达式返回的结果。
运算符的优先级与结合性
If语句常见的错误
如果代码块中只有一条语句的时候,可以省略花括号,但是当花括号将多条语句扩在一起时,花括号就不能在省略。
switch语句特点
- switch语句选择的类型只有四种:byte,short,int , char,String数据类型,String数据类型是从jdk7.0的时候开始支持的。
- switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。
- case之间与default没有顺序。在switch语句中不管代码的顺序如何,永远都是会先判断所有的case,没有匹配的case执行default。case后面跟的数据必须是一个常量。
- switch语句停止的条件:switch语句一旦匹配上了其中的一个case语句,那么就会执行对应的case中的语句代码,执行完毕之后如果没有遇到break关键字或者是结束switch语句的大括号,那么switch语句不会再判断,按照代码的顺序从上往下执行所有的代码。直到遇到break或者是结束switch语句的大括号为止。
函数的格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
{
执行语句;
return 返回值;
}
修饰符: public static
返回值类型: 运行这段程序得出的一个运算结果,结果类型,如果返回值类型为void ,则表示该函数没有返回值。 如果返回值类型为int,那么就是指函数运行完毕后,返回的结果的数据类型为int。
函数名:仅仅是一个标识符,可以随意起名字,但是需要符合标示符的命名规则。而且调用该函数还需要使用函数名。
函数的命名规范: 首单词全部小写,其他单词的首字母大写,其他小写。
形式参数:是一个变量,用于存储调用函数传递进来的实际参数。
实际参数:传递给形式参数的具体数值。
返回值:返回给调用者。
注意: 如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值。(除了返回值类型是void以外)
return 关键字的作用:
1. 返回数据给函数的调用者。
2. 函数一旦执行到了return关键字,那么该函数马上结束。 (能结束一个函数)
注意:一个函数的返回值类型 是void,那么也可以出现return关键字,但是return关键字的后面不能有数据。
break关键字与return关键字的区别:
1.break关键字是结束一个循环。
2.return关键字是结束一个函数。
函数的特点
1、定义函数可以将功能代码进行封装
2、便于对该功能进行复用
3、函数只有被调用才会被执行
4、函数的出现提高了代码的复用性
5、对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数,没有定义函数之前,不能调用函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
函数需要实现功能,那么函数只实现所需功能即可,不要实现不需要的功能。
局部变量与成员变量的区别
局部变量: 如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量。
成员变量: 成员变量就是定义在方法之外类内。
成员变量与局部变量的区别:
- 应用范围
- 成员变量在整个类内都有效,作用是用于描述一类事物的公共属性的。
- 局部变量只在其声明的方法内有效,作用就是提供一个变量给方法内部使用而已。
- 生命周期
1. 成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失
2. 局部变量: 在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域,那么马上从内存中消失。
3. 存储位置
成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理。
局部变量存在栈内存中,当不在使用时,马上就会被释放。
4. 初始值
成员变量,存储在堆中,如果没有赋初值,它有默认值。
局部变量,是没有默认的初始值的,如果要想使用必须要先手动初始化。
函数的重载
- 函数重载的定义:在同一个类中,有一个以上的同名函数,只要函数的参数列表或参数类型不一样即可,与返回值无关, 这些统称为方法的重载。
- 函数的重载存在的原因:为了增强方法的阅读性,优化了程序设计。
- 函数重载的要求:
1. 函数名一致。
2. 形参列表不一致。(形式参数的个数或者是对应的数据类型不一致)
3. 与函数的返回值类型是无关的。
数组
概念 |
同一种类型数据的集合。其实数组就是一个集合容器。 |
数组的好处 |
可以自动给数组中的元素从0开始编号,方便操作这些元素。范围:0~长度-1. |
格式1 动态初始化: |
数据类型[] 变量名 = new 数据类型[元素个数或数组长度]; 示例:int[] arr = new int[5]; |
格式2 静态初始化: |
数据类型[] 变量名 = new 数据类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7}; int[] arr = {3,5,1,7}; |
分析数组: 左边: int[] arr 声明了一个int类型的的数组变量,变量名为arr。 int : 表示该数组容器只能存储int类型的数据。 [] : 这是一个数组类型。 arr : 变量名. 右边:new int[50]; 创建了一个长度为50的int类型数组对象。 new : 创建数组对象的关键字。 int: 表示该数组对象只能存储int类型数据。 []: 表示是数组类型。 50 : 该数组最多能存储50个数据。数组的容量。 |
如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果数据一开始还不太明确,这时候就建议使用动态初始化。
数组中有一个属性可以获取到数组中元素的个数,也就是数组的长度. 数组名.length
数组的常见异常
数组角标越界异常:java.lang.ArrayIndexOutOfBoundsException
空指针异常:java.lang.NullPointerException
原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
二维数组
二维数组:实质就是存储是一维数组。
数组定义:数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素的个数];