Java基础语法
关键字:被Java语言赋予特定含义的单词,组成关键字的字母全部小写。
标识符: 就是给类,接口,方法,变量等起名字时使用的字符序列
标识符是由英文字母、数字、_、$组成,数字不能开头,不能是关键子,字母区分大小写。
常见命名规则
包:liuyi,cn.itcast(全小写)
类或者接口:Student,HelloWorld(每个单词的首字母大写)
方法和变量:name,main,studentName(首字母小写,后单词首字母大写)
常量:MAX,STUDENT_MAX_AGE(全大写)
注释
单行注释格式: // 注释文字
多行注释格式: /* 注释文字 */
文档注释格式:/** 注释文字 */
常量、进制和进制转换
常量在程序执行的过程中其值不可以发生改变。有字面值常量;自定义常量之分。
字符串常量 用双引号括起来的内容
整数常量 所有整数 12,23
小数常量 所有小数 12.34,56.78
字符常量 用单引号括起来的内容 ‘a’,’A’,’0’
布尔常量 较为特有,只有true和false
空常量 null(数组部分讲解)
Java针对整数常量提供了4种表现形式
二进制(0b开头)、八进制(0开头)、十进制、十六进制(0x)
变量
变量:在程序执行的过程中,在某个范围内其值可以发生改变的量
变量定义格式:(数据类型 变量名 = 初始化值;)
变量使用注意事项:
作用域:变量定义在哪一级大括号中,哪个大括号的范围就是变量的作用域。相同的作用域中不能定义两个同名变量。
初始化值:没有初始化值不能直接使用;在一行上建议只定义一个变量,可以定义多个,但是不建议
数据类型
类型转换
默认转换
byte,short,char—int—long—float—double
byte,short,char相互之间不转换,他们参与运算首先转换为int类型
强制转换
目标类型 变量名=(目标类型)(被转换的数据);
问题:
1、byte b1=3,b2=4,b; b=b1+b2; b=3+4; 哪句是编译失败的呢?为什么呢?
2、byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
运算符
1:运算:对常量和变量进行操作的过程称为运算。
2:运算符: 对常量和变量进行操作的符号称为运算符
3:操作数:参与运算的数据称为操作数
4:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。
算术运算符
赋值运算符
符号:= , +=,-=, *=, /=, %=(=为基本的赋值运算符,其他的为扩展的赋值运算符)
关系运算符
逻辑运算符
“&”和“&&”的区别:(&&具有短路功能)
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
位运算符
问题:1、请用最有效率的方式写出计算2乘以8的结果
2、请自己实现两个整数变量的交换
三目运算符
格式:(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;如果条件为false,运算后的结果是表达式2;
流程控制语句
分类:顺序结构、选择结构、循环结构
一、顺序语句
依次执行,写在前面的先执行,写在后面的后执行
二、选择语句(if、switch)
if语句有三种格式
1、if(关系表达式) {语句体}
2、if(关系表达式) {语句体1}else{语句体2}
3、if(关系表达式1) {语句体1}else if(关系表达式2){语句体2}else{语句体3}
问题:1、三元运算符的操作都可以使用if语句改进,反之不成立什么时候不成立呢?
答:当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果
switch语句
switch(表达式) {
case 值1: 语句体1;
break;
case值2: 语句体2;
break;
…
default:语句体n+1;
break;
}
注:表达式的取值:byte,short,int,char;JDK5以后可以是枚举;JDK7以后可以是String
三、循环结构(for、while、do…while)
for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句) { 循环体语句; }
while循环语句格式:
while(判断条件语句) { 循环体语句; }
do…while循环语句格式:
do {循环体语句;}while(判断条件语句);
问题:1、请输出一个4行5列的星星(*)图案。
2、在控制台输出九九乘法表。
跳转控制语句(break、continue 、return )
break的使用场景:在switch语句中、在循环语句中,离开使用场景的存在是没有意义的
break的作用:跳出单层循环、跳出多层循环、带标签的跳出(格式:标签名: 循环语句)
continue的使用场景:在循环语句中,离开使用场景的存在是没有意义的
continue的作用:break 退出当前循环,continue 退出本次循环
方法
方法就是完成特定功能的代码块(函数就是方法)
格式:修饰符 返回值类型 方法名(参数类型参数名1,参数类型参数名2…) {
函数体;
return 返回值; }
方法重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载特点:与返回值类型无关,只看方法名和参数列表,在调用时,虚拟机通过参数列表的不同来区分同名方法
数组
数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致。
数组既可以存储基本数据类型,也可以存储引用数据类型。
格式
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
动态初始化 格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例:int[] arr= new int[3];一个int类型的数组,这个数组中可以存放3个int类型的值。
静态初始化 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:int[] arr= new int[]{1,2,3}; 简化的写法int[]arr = {1,2,3};
数组常见错误
数组索引越界:ArrayIndexOutOfBoundsException访问到了数组中的不存在的索引时发生。
空指针异常:NullPointerException数组引用没有指向实体,却在操作实体中的元素时。
二维数组
格式1:数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组,n表示每一个一维数组的元素个数
举例:int[][] arr = new int[3][2];定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素
格式2:数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3]
arr[2] = new int[1];
格式3:数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例:int[][] arr = {{1,2,3},{4,6},{6}};
Java中的内存分配
栈 存储局部变量
堆 存储new出来的东西
方法区 (面向对象部分讲)
本地方法区 (和系统相关)
寄存器 (给CPU使用)