一. 关键字: 1).什么是关键字?
被java赋予特定含义的单词
2).特点:
组成关键字的字母全部小写
3).注意事项:
我们在起名字的时候不能使用关键字
二 . 标识符
1).什么是标识符:就是给类,接口,方法,变量起的名字
2).标识符的组成
* 英文大小写字母
* 数字
* $和_
3).注意事项(重点!!!):
1.不能使用关键字
2.不能以数字开头
3.如果你要使用符号,只能使用$和_
4).常见命名规则(重点!!!):
* 包:把包理解成我们的文件夹,一般是公司域名倒着写,com.itheima
* 类或者接口
如果是一个单词,首字母大写
如果是多个单词,每个单词的首字母都大写
* 方法或者变量
如果是一个单词,全部字母小写
如果是多个单词,从第二个单词开始首字母大写
* 常量
如果是一个单词,全部字母大写
如果是多个单词,每个单词之间用_分开
三 . 常量
字面值常量
字符串常量string 用双引号括起来的内容
整数常量 所有整数
小数常量 所有小数
字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母,单个符号
布尔常量 true,false
空常量 null(数组部分讲解)
自定义常量(面向对象部分讲解)
四 . 变量(重点!!!)
1).什么是变量?
在程序执行的过程中,其值可以发生改变
2).为什么有变量?
用来不断的存放同一类型的常量,并可以重复使用
3).变量定义格式
数据类型 变量名 = 变量值;
五 . 1).为什么有数据类型?
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
基本数据类型(四类八种)
整数型
byte 占1个字节 -128到127
short 占2个字节
int 占4个字节
long 占8个字节
浮点型(小数型)
float 占4个字节
double 占8个字节
字符型
char 占2个字节 0-65535
布尔型
boolean 他的值要么是true,要么是false
引用数据类型(面向对象部分讲解)
*** 练习:定义不同数据类型的变量,并输出
2).使用变量的注意事项
* a:作用域问题
* 同一个区域不能使用相同的变量名(我们目前的同一个区域指的就是main方法)
* b:初始化值问题
* 局部变量在使用之前必须赋值
* c:一条语句可以定义几个变量
* int a,b,c...;
六 . 数据类型转换
1).隐式转换
class Test {
public static void main(String[] args) {
byte a = 3;
int b = 4;
//byte + int---->小的数据类型与大的数据类型运算的时候,小的数据类型会自动提升为大的数据类型
int c = a + b;
//b = a + b;
System.out.println(c);
}
}
2).强制转换
class Test {
public static void main(String[] args) {
byte a = 3;//java有优化机制,
int b = 4;
a = (byte)(a + b);//注意:byte需要使用小括号括起来
System.out.println(a);
}
}
七 . 运算符(重点!!!)
1.算术运算符
* 基本的:+, -, *, /, %
关于+:
1).正号
2).进行加法操作
3).字符串的连接符:任何数据类型与字符串相连接都会变成一个字符串
关于/:
获取的是除法操作的商
注意:两个整数相除得到的一定是整数,如果要得到小数,将其中任意一个数变成小数即可
关于%:
方案一:
* 当左边的绝对值小于右边绝对值时,结果是左边
* 当左边的绝对值等于右边或是右边的倍数时,结果是0
* 当左边的绝对值大于右边绝对值时,结果是余数
* %运算符结果的符号只和左边有关系,与右边无关
方案二(推荐方案):
获取的是除法操作的余数,其结果的符号只与左边有关,与右边无关,并且与左边数值的符号相同
Demo:
System.out.println(5 % 2);//1
System.out.println(-5 % 2);//-1
System.out.println(5 % -2);//1
System.out.println(2 % 7);//2
System.out.println(-2 % 7);//-2
System.out.println(2 % -7);//2
注意事项:
任何一个正整数%2的结果不是0就是1,可以用来作为切换条件
* 特殊的:++ --
1).单独使用:放前放后一样
++:对原有的数据+1
--:对原有的数据-1
2).参与运算:放操作数前面,会先运算再赋值,放操作数后面,会先赋值再运算
***算术运算符++和--的练习(重点!!!)
2.赋值运算符
a.基本的:=
把=号右边的数据赋值给左边
int a = 4;
b.特殊的:+=,-=,*=,/=,%=
把运算符左边和右边的数据进行运算,再赋值给左边
3.关系运算符(也叫比较运算符,也叫条件运算符)
==,!=,>,>=,<,<=
注意事项:
1).无论你操作的数据是简单还是复杂,最终得到的结果都是boolean类型
2)."==" 不能写成"="
4.逻辑运算符
1).基本的:&,逻辑与,有false则false
|,逻辑或,有true则true
^,逻辑异或,相同为false,不同为true
!,逻辑非,非false则true,非true则false
2).特殊的:&&,短路与,左边为false,右边不执行,最终结果与&相同
||,短路或,左边为true,右边不执行,最终结构与|相同
八 . 流程控制语句_可以控制程序的执行流程
1.顺序结构
* 从上往下,依次执行
2.选择结构
2.1).if语句
a.格式一
if (比较表达式) {
语句体;
}
执行流程:
1).计算比较表达式的值是true还是false
2).如果是true,则执行语句体
3).如果是false,则不执行语句体
注意事项:
1).比较表达式无论简单还是复杂,其结果都是true/false
2).if语句控制的语句体如果只有一句,大括号可以省略;如果控制的语句体是多条语句,则大括号不可以省略,建议永远不要省略
3).有左大括号就没有分号,有分号就没有左大括号
b.格式二
if (比较表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
1).计算比较表达式的值是true还是false
2).如果是true,则执行语句体1
3).如果是false,则执行语句体2
注意事项:
1).else后面是没有表达式的
**练习一:输出两个数据中的最大值
**练习二:给定一个数据,确定它是奇数还是偶数
c.格式三
if (比较表达式1) {
语句体1;
} else if (比较表达式2) {
语句体2;
} else if (比较表达式3) {
语句体3;
} else if (比较表达式4) {
语句体4;
}
...
else {
语句体n + 1;
}
执行流程:
1).计算比较表达式1的值
如果是true,执行语句体1,整个if语句结束
如果是false,计算比较表达式2的值,如果是true,执行语句体2,整个if语句结束
如果是fasle,计算比较表达式3的值,如果是true,执行语句体3,整个if语句结束
如果所有的比较表达式都为false,则执行else语句,执行语句n + 1,整个if语句结束 如果是false,执行语句体4...
注意事项:
else语句可以省略,但是建议永远不要省略,可以对范围外的错误进行提示
**练习一:获取三个数据中的最大值
2.2).switch语句
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体 n + 1;
break;
}
执行流程:
1).计算表达式的值
2).将表达式的值和case后面的值进行匹配,如果相同就执行对应的语句,否则执行default控制的语句
注意事项:
a.表达式的值:byte,char,short,int,枚举,String
常用的是int,String
b.case后面只能是常量,不能是变量,并且多个case后面的值不能出现相同的
c.default可以省略,建议永远不要省略,因为default可以对不正确的情况给出提示
d.最后一个break可以省略,但是建议永远不要省略,如果其他位置的break省略,会出现case穿透
case穿透
***练习题:给出月份,判断季节(春,夏,秋,冬),分别使用if语句,switch语句完成
3 4 5 --> 春天
6 7 8 --> 夏天
9 10 11 --> 秋天
12 1 2 --> 冬天
switch语句的结束条件:
1).遇到break就结束了
2).执行到switch的右大括号就结束了
3.循环结构
3.1).for循环
a.为什么存在循环?
提高了代码的复用性(重复利用性)
for (初始化表达式; 条件表达式; 循环后的操作表达式) {
循环体;
}
-----------------------------------------------------
初始化表达式;
while(判断条件语句) {
循环体;
控制条件语句;
}
执行流程:
1).执行初始化表达式
2).执行条件表达式,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
3).执行循环体
4).执行循环后的操作表达式
5).回到第2步,继续往下进行
注意事项:for循环结束之后,里面的变量会被释放(重点!!!)
for (int i = 1;i <= 10 ;i++ ){
int b = 0;
System.out.println("i = " + i);
}
//i = 5;//错误: 找不到符号
//b = 2;//错误: 找不到符号
**求和思想(重点!!!)
**练习一:计算水仙花数
**练习二:计算水仙花数的个数,统计思想(重点!!!)
3.2).while循环
初始化表达式;
while(判断条件语句) {
循环体;
控制条件语句;
}
执行流程:
1).执行初始化表达式
2).执行判断条件语句,看起返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
3).执行循环体
4).执行循环后的操作表达式
5).回到第2步,继续往下进行
九 . 循环结构
1).do...while循环
定义格式:
初始化语句;//int i = 1;
do {
循环体语句;
控制条件语句;//i++;
} while(判断条件语句);
执行流程:
1).执行初始化语句
2).执行循环体语句
3).执行控制条件语句
4).执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
5).回到第2步继续向下执行
2).三种循环结构的区别(重点!!!)
a.for循环和while循环必须先判断条件是否成立,条件成立才会执行循环体
b.do...while循环至少执行一次循环体
c.for循环与while循环的区别:
如果你想在循环结束后,继续使用控制条件的那个变量,用while循环
否则,用for循环,不知道使用哪个循环就使用for循环,因为变量及早的从内存中释放,提高了内存的使用效率
3).死循环
* 两种最简单的死循环格式:
while(true) {
}
System.out.println("------------------");
for (; ; ) {
}
十 . 控制跳转语句(重点!!!)
1.break语句
应用场景:switch,循环
大白话:跳出循环
2.continue语句
应用场景:循环
大白话:终止本次循环,继续下次循环
3.return语句
应用场景:结束方法
大白话:结束方法
十 一 .方法(重点!!!)
1.概述
a.为什么需要方法?
提高代码的复用性
案例分析:输出10次HelloWorld,再输出10次HelloWord...
b.什么是方法?
完成特点功能的代码块
2.格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2) {
方法体语句;
return 返回值;
}
方法的格式说明:
a.修饰符:目前我们固定写public static
b.返回值类型:就是该方法需不需要返回一个结果,此处填的是该结果的数据类型,也可以没有,没有就写void
c.方法名:就是合法的标识符,针对方法,如果是一个单词全部字母小写,如果是多个单词,从第二个单词开始首字母大写
d.参数:
形式参数
实际参数
e.参数类型:就是参数的数据类型
f.参数名:就是合法的标识符,针对变量,如果是一个单词全部字母小写,如果是多个单词,从第二个单词开始首字母大写
g.方法体语句:就是完成特定功能的代码
h.return 结束方法
i.返回值,就是执行功能代码后的结果,由return带给调用者
3.如何定义一个方法
1.给什么:给两个int数,int a,int b
2.要什么:要两个int数的和-->return 5-->明确了返回值类型为int
4.注意事项
没有返回值的方法:
public static void add2(int a,int b) {//int a = 2;int b = 3;
int sum = a + b;
System.out.println(sum);
}
有返回值的方法:
public static int add(int a,int b) {//int a = 5;int b = 10;
int sum = a + b;
return sum;
}
方法的调用:
a.单独调用,如:add2(2,3);但是对于有返回值的方法,单独调用没有意义
b.输出调用,如System.out.println(add(5,10));但是对于返回值为void的方法这样使用不可以
c.赋值调用(推荐),如:int s = add(5,10);s中存放的就是调用add方法返回的结果;但是对于返回值为void的方法这样使用不可以
方法的注意事项:
1).方法不调用不执行
2).方法与方法是平级关系,不能嵌套定义
3).方法中定义的参数之间用逗号隔开
4).调用方法的时候不用传递数据类型
5).如果方法有明确的返回值,一定要用return带回一个值
5.方法重载
在同一个类中,方法名相同,参数列表不同,与返回值类型无关
什么是参数列表不同呢?
1).参数个数不同
2).参数个数相同,参数类型不同:如add(int a,int b);add(double a,double b)
3).参数个数相同,参数顺序不同,如add(int a,double b);add(double a,int b)-->不过一般不这么写,因为两个方法功能是一样
**练习:比较两个数据是否相等:
1.两个int数
2.两个double数
十二 . 数组(重点!!!)
1.概述_为什么需要数组?
*为了存储同种数据类型的多个值
*关于数组:
a.数组是用来存储同一数据类型的多个值的集合,可以将数组看成是一个容器
b.数组既可以存储基本数据类型,也可以存储引用数据类型
*数组的定义格式:
数据类型[] 数组名 = new 数据类型[数组长度];
如:
存储基本数据类型:
int[] studnetAges = new int[100];
存储引用数据类型:
String[] studentNames = new String[100];
2.动态初始化
1).什么是初始化?
就是为数组开辟连续的内存空间,并为每个数组元素赋值
2).什么是动态初始化?
只给定数组长度,由系统给出每个元素的初始化值
3).动态初始化格式:
数据类型[] 数组名 = new 数据类型[数组长度];
4).不同数据类型使用动态初始化会有不同的默认值:
整数类型:byte,short,int,long默认初始化值都是0
浮点类型:float,double默认初始化值都是0.0
布尔类型:boolean默认初始化值false
字符类型:char默认初始化值'\u0000'
5).关于直接打印数组名得到的内容的解释:
[I@19bb25a分析:
[代表是数组,几个就代表几维
I代表是int类型
@是固定的
19bb25a代表的是数组的地址值
3.内存分配
a.栈内存:存储局部变量
b.堆内存:存储new出来的数组/对象
c.方法区:面向对象部分讲解
d.本地方法区:和系统相关
e.寄存器:给CPU使用
4.内存图解
**绘图: 一个数组的内存图解
**绘图: 两个数组的内存图解
5.静态初始化
1).什么是静态初始化?
在定义数组的时候,直接为每个数组元素赋值
2).静态初始化格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}
简化格式:
数据类型[] 数组名 = {元素1,元素2,...};
6.数组操作的两个常见小问题
a.数组索引越界异常(ArrayIndexOutOfBoundsException)
产生原因:访问了不存在的索引
b.空指针异常(NullPointerException)
产生原因:数组已经不指向堆内存了,你还用数组名去访问元素
**定义一个数组,分别使用动态初始化和静态初始化存储学生姓名,学生姓名为:张三,李四,王五
****引用数据类型:数组,类,接口,枚举
7.数组的操作
a.遍历:拿到数组中的每一个元素
* 数组的长度:arr.length
* 数组的最大索引:arr.length - 1
b.获取最值
c.反转
|
|