1 第二天,java语言基础
1.1 关键字
1.1.1 什么是关键字
Java中具有特殊含义的单词。
关键字中所有字母都为小写。
1.1.2 Java关键字表及分类
1.2 标识符
1.2.1 什么是标识符。
Java中,起的名字。
0-9,a~z,A~Z,$,_
数字不可以开头
不可以使用关键字。
Java是严格区分大小写的,在起名字的时候要做到见名知意,提高阅读性。
1.2.2 定义标识符有什么规则
包:xxx,小写
类和接口:XxxxXxx,单词首字母大写
方法:xxxXxxx,方法第一个单词首字母小写,从第二个单词起,首字母大写。
变量:xxxXxxx, 第一个单词首字母小写,从第二个单词起,首字母大写
常量:XXX_XXX,大写,多单词之间用下划线分隔
见名知意。
1.3 注释
用于说明解释程序的文字。
注释是一个合格程序员良好的习惯。
代码只是,思想的一种体现形式而已。
写程序之前,应该先写注释。理清思路,步骤。
1.3.1 注释的作用
提高代码的阅读性。
阐述代码的功能,方便以后阅读。
1.3.2 Java中的三种注释
//,单行注释
/*…*/,多行注释
/**…*/,文档注释。会被编译器编译.会被javadoc工具解析,生成一套以网页形式提现的改程序的说明文档。
1.4 常量和变量
1.4.1 什么是常量,以及常量的种类,规则
常量,就是数值保持不变的
整数型常量,所有整数
浮点型常量,所有小数
字符型常量,char,单引号‘’标识
布尔型常量,boolean,只有两个值。true或false
字符串型常量,String,双引号“”,标识
Null常量,null
1.4.2 二进制,八进制,十进制,十六进制之间的转换
二进制中,负数的最高位都是1,整数的最高位都是0
负数二进制,取反再+1
计算机底层都是通过二进制计算的
二进制:满2进1,最高位为1
八进制,满8进1,最高位为7,以0开头
十进制,满10进1,最高位为9
十六进制,满16进1,最高位为15.0~9,A~F,以0x开头
转二进制,短除法。除2,得商。取余数。商继续除2,得商,取余数..重复。直到商为0为止(该方法也适用于8,16进制,只是除数为8,16而已,比较麻烦)
转十六进制,8421,四位一算
转8进制,421,三位一算
进制转换,可以先转换为二进制,然后再转换。
1.4.3 什么是变量,变量的定义规范以及作用
值可变的量。
变量是内存中一个存储空间。该空间用于自己的名字和类型
作用:
可以当存储用,
如果需循环利用也可以使用
变量的作用域:{},大括号内有效
定义变量:变量的类型 变量的名称 = 初始化值。
理解变量就是数学中的未知数。
局部变量:必须手动初始化。
全局变量:有默认初始化。
1.4.4 Java中的数据类型
基本数据类型:四类,八种。
整数型,byte,short,int ,long。默认是Int为32位
浮点型,float,double,默认double
字符型,char
布尔型,boolean
引用数据类型,class,interfacae,数组
注意:String也是一对象。
Java定义的不同数据类型,是因为在内存中存储的大小或方式不同。
基本数据类型,一般放到栈内存中。并且都有各自的存储大小。
引用数据类型,通过new实例化,一般放到堆中。在栈中建立引用
1.4.5 Java中的自动类型转换和强制类型转换
char
byte short int long
float double
单箭头表示自动转换,不会丢失精度
双箭头表示转换会丢失精度
强制类型转换,(转换为所需类型)原类型。
如,将一个float数据12.0232,强制转换为int型
(int)12.0232
强制类型转换,会丢失精度。
1.4.6 转义字符
\,加上特定字符,具有特殊的意义
转义字符:通过\ 来转变后面字母或者符号的含义。
如,
\t,制表符,相当于tab
\b,退格,相当于backspace
\n,回车
\r,换行,windows中相当于\r\n
\?,输出?
1.5 运算符
1.5.1 Java中有哪些运算符,以及优先级,作用
1.5.2 算数运算符
+,-,*,/,%
当进行/(除法),运算时,如果两边都为整书,那么结果将会是整数。(如果有小数,会舍弃小数部分)
1.5.3 关系(比较)运算符
>,<,>=,<=,==,!=
1.5.4 逻辑运算符
&,|,&&,||,^,!
1.5.5 赋值运算符
=,+=,-=,%=,/=
1.5.6 位运算符
>>,<<,>>>,&,|,^,~
1.5.7 位运算
<<,乘2
>>,除2
1.5.1 三目运算符
条件表达式?数值1:数值2
如果表达式为true,则运算结果返回为数值1;如果为false,则运算结果返回为数值2
语句
语句一般以分号结尾’;’
例如:int a = 4;//语句,这条语句表示定义一个整型变量a并且初始值为4。
1.5.2 什么是块
{},括起来的叫做块。块里面可以包含多条语句
1.5.3 什么是语句,以及语句有啥作用
语句叫相当于平常我们语文中的造句。
我们之前学习的内容其实都可以说是语句的一部分。
当我们学习完以上单独的内容之后,就可以造句了。
Java中的语句,比我们语文的造句要简单多了。
1.5.4 If语句
判断语句,有三种形式:
1.if(表达式)
{
语句;
};
表达式的结果,只有true和false两种情况
2.if(表达式)
{
语句1;
}
else
{
语句2;
};
解释:如果表达式为true,则执行语句1;如果表达式的结果为false,则执行语句2
If语句和三目运算符区别,
三目运算符, 1.弊端,通过对表达式的判断,一定要有值的出现;
2.好处,可以写在语句中,简化if else 的代码
3.if(表达式1)
{语句1;}
else if(表达式1)
{语句2;}
else if(表达式3)
{语句3;}
….
else if(表达式n)
{语句n;}
else
{语句n+1;}
else 与距离最近的if配对
1.5.5 Switch语句
选择结构
Swich(key) //表达式的结果为数值 byte,short,int ,char
{
casevalue 1:
语句1;
break;
case value 2:
语句2;
break;
case value 3:
语句3;
break;
default:
语句n;
break;
}
解释,首先得到key的值。然后从第一个case的value开始逐个进行比较。如果key和value相等。则执行对应语。否则执行default。
每个case value,的值不能相等
Switch语句的执行顺序,与语句摆放的先后无关。换言之,当得到key的值之后,总是从第一个case开始执行。当没有case的value与之相等时,执行default
Break语句的作用,在这里是中断语句执行。当找到与之对应的case,执行完语句之后,中断语句的执行。如果不加break,程序则会继续执行下去,一直到遇到break或者执行到最后方才结束。
if和switch语句很像。
具体什么场景下,应用哪个语句呢?
如果判断的具体数值不多,而是符合byte short int char这四种类型。
虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
1.5.6 While语句
循环语句
初始化
While(循环表达式)
{
循环体;
循环结束条件;
}
do
{
循环体;
循环结束条件;
}while(循环表达式);
While,和do—while区别是,do—while不管循环表达式成立与否,都会执行一次。
do—while,while后面的分后不能省略,代表着表达式的结束
1.5.7 For语句
For语句,也是一种循环结构。
For(初始化;循环表达式;循环结束条件) {
循环体;
}
While和do—while中,初始化,得放到外面;
而for可以放到语句中,也可放到外面。区别在于,放到语句里面,当语句执行完后,会释放变量,节约内存。
1.5.8 中断语句
break(跳出);可以放到switch,循环语句中
continue(继续);结束本次执行。继续下次一起执行。一般放到循环语句中
1.6 函数
函数就是定义在类中,具有独立功能的一个小程序。
函数也成语方法。Function
1.6.1 函数的定义
修饰符 返回值函数名(形式参数1,形式参数2….) {
return 返回值;
}
void,返回为空;可以省略return;
定义函数的时候,首先根据函数的功能决定函数的返回值。
其次看是否需要传入未知参数参与运算,确定形参
1.6.2 函数的特点
1. 定义函数可以将代码进行封装
2. 便于对该功能的重复利用
3. 函数只有被调用才会执行
4. 函数的出现提高了代码的复用性
1.6.3 函数的应用(怎么定义函数)
注意:函数中只能调用函数,不能定义函数
定义函数时,函数的结果应该返回给调用者,由调用者进行处理
定义函数,需要知道,两个明确:
1. 明确定义的功能的最后的结果是什么?(决定返回值)
2. 明确在定义该功能的过程中,是否需要未知的变量参与运算?(决定形参)
1.6.4 函数的重载
在同一个类中,允许存在一个以上的同名函数。只要他么参数的个数和参数的类型不一样即可
只与函数的参数列表(参数是有顺序的)有关系)(包括个数),与函数的返回值无关。
函数的名,要有意义。见名知意。增加阅读性。
至于参数的顺序,个数,类型有关
1.7 数组
1.7.1 数组的定义
数组就是一容器,存储同一种类型数据的集合。
好处是,数组中的元素都是有编号的。(数组会自动对元素进行编号,从0到length-1)
格式一:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
如,int[] abc = new int[5];
格式二:
元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3….};
如,int[] abc = new int[]{1,2,3,4,5};
int[] abc = {1,2,3,4,5};//简写
数组的初始化
1.静态初始化:在定义数组时,指定数组的元素。如, int[] abc = new int[]{1,2,3,4,5};
2.动态初始化:先定义好数组,然后再后面初始化。
如,int[] abc = new int[3];
abc[0] = 1;abc[1] = 2; abc[2] = 3;
1.7.2 数组的内存结构
数组在内存中是放在堆中的。数组是一种引用类型
Java中new出来的东西,都是放在堆中
1.7.3 数组操作的常见问题
编译时,只检查语法问题。
运行时,才检查具体逻辑问题。
编译出错差不多就是语法不对,比如你写String str = 'str';这么写语法不对编译就会出错。运行出错是指语法没问题但是逻辑有问题,比如一个方法传进一个String类型的变量str,方法体中有类似于str.equals("str");的语句,但是传进的str是个null,那么那一句就相当于null.equals("str");这肯定会抛空指针异常。
//ArrayIndexOutOfBoundsException:3:操作数组时,访问到了数组中不存在的角标。
//NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
1.7.4 数组常见操作
1. 获取数组中的元素。通常会用到遍历.
2. 获得数组的长度或元素个数。运用数组中的一个属性。数组名.length
3. 获取数组中的最大值和最小值
4. 对给定的数组进行排序
选择排序
冒泡排序
最快排序方式,希尔排序
5. 查找
折半查找
1.7.5 数组中的数组
1.定义格式一:
Int a[][]= new int[3][2];
解释:
定义了三个一维数组,每一个一维数组的长度为2
三个一维数组,分别是,a[0],a[1],a[2]
给第一个维位数组的第一个元素赋值78:a[0][0] = 78
2.定义格式二
Int a[][] = new int[3][];
解释:
定义了三个一维数组,每个一维数组的初始化为null
初始化,
a[0] = new int[3];
a[1] = new int[4];
a[2] = new int[5];
3.定义格式三
Int a[][] = {{1,2,3},{1},{2,3,4,5}};
解释,定义三个一维数组,长度分别为3,1,4
每个一维数组的长度表示为,a[0].length