java基础语法
- 一、变量
- 二、数据类型
- 三、标识符
- 四、键盘录入
- 五、判断语句
- 1. 三种格式
- 2. 练习题
- 六、switch语句
- 七、循环
- 八、循环控制语句
- 九、方法
一、变量
1.什么是变量:
- 在程序运行过程中,其值可以发生改变的量
- 从本质上讲,变量是内存中的一块小空间,其值可以在一定范围内变化。
- 变量主要突出一个变字。
2.变量的应用场景
- 商品价格
- 在实际项目中,随时有可能发生改变的数据,就可以用变量进行表示。
- 比如:商品的价格,如下图所示,商品的价格可能随机有可能发生变化,那么价格就需要用变量进行记录。
- 当价格改变的时候,只要修改变量里面记录的值就可以了。
- 商品价格
- 在实际项目中,随时有可能发生改变的数据,就可以用变量进行表示。
- 比如:登录界面中的用户名和密码,如下图所示,每一个用户来登录的时候,输入的用户名和密码都是不一样的。
- 那么在程序中,用户名和密码就可以用变量来进行记录。
- 当不同的用户来登录的时候,就是让这两个变量记录不同的值就可以了。
3.变量的定义格式
- 完整格式:
// 定义变量的同时并赋值 数据类型 变量名 = 初始化值;
- 将定义和赋值分开
数据类型 变量名; 变量名 = 初始化值;// 先定义 double money; // 再赋值(使用前赋值即可) money = 55.5; System.out.println(money);
- 还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。
// 定义int类型的变量a和b,中间使用逗号隔开 int a = 10, b = 20; System.out.println(a); System.out.println(b);// 声明int类型的变量c和d,中间使用逗号隔开 int c,d; c = 30; d = 40; System.out.println(c); System.out.println(d);
4.格式详解
数据类型 变量名 = 初始化值;
- 数据类型:决定了变量以后能存储什么类型的数据
- 变量名:给变量起了个名字,方便以后使用
- 等号:赋值,表示把等号右边的数据赋值给等号左边
- 初始化值:表示现在变量要记录的数据
- 分号:语句的结束,就跟写作文中的句号是一样的
- 举例1:
// 定义一个变量记录年龄 int age = 10;
- 举例2:
// 定义一个变量记录姓名 String name = "zhangsan";
- 举例3:
// 定义一个变量记录身高 double height = 1.93;
二、数据类型
1.Java语言数据类型的分类:
- 基本数据类型
- 引用数据类型
2.基本数据类型的四类八种
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
整数 | byte | 1 | 负的2的7次方 ~ 2的7次方-1(-128~127) |
整数 | short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) |
整数 | int | 4 | 负的2的31次方 ~ 2的31次方-1 |
整数 | long | 8 | 负的2的63次方 ~ 2的63次方-1 |
浮点数 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
浮点数 | double | 8 | 4.9000000e-324 ~ 1.797693e+308 |
字符 | char | 2 | 0-65535 |
布尔 | boolean | 1 | true,false |
3.说明
- e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。
- 在java中整数默认是int类型,浮点数默认是double类型。
4.需要记忆以下几点
- byte类型的取值范围:-128 ~ 127
- int类型的大概取值范围:-21亿多 ~ 21亿多
- 整数类型和小数类型的取值范围大小关系:double > float > long > int > short > byte
5.最为常用的数据类型选择:
- 在定义变量的时候,要根据实际的情况来选择不同类型的变量。
- 比如:人的年龄,可以选择byte类型。
- 比如:地球的年龄,可以选择long类型。
- 如果整数类型中,不太确定范围,那么默认使用int类型。
- 如果小数类型中,不太确定范围,那么默认使用double类型。
- 如果要定义字符类型的变量,那么使用char。
- 如果要定义布尔类型的变量,那么使用boolean
6.定义8种基本数据类型变量
public class Demo1{public static void main(String[] args){// 定义byte类型的变量// 数据类型 变量名 = 数据值;byte a = 10;System.out.println(a);// 定义short类型的变量short b = 20;System.out.println(b);// 定义int类型的变量int c = 30;System.out.println(c);// 定义long类型的变量long d = 12345678987654321L;System.out.println(d);// 定义float类型的变量float e = 66.6F;System.out.println(e);// 定义double类型的变量double f = 88.88;System.out.println(f);// 定义char类型的变量char g = 'a';System.out.println(g);// 定义boolean类型的变量boolean h = true;System.out.println(h);}
}
注意点
- 如果要定义 一个整数类型的变量,不知道选择哪种数据类型了,默认使用int。
- 如果要定义 一个小数类型的变量,不知道选择哪种数据类型了,默认使用double。
- 如果要定义一个long类型的变量,那么在数据值的后面需要加上L后缀。(大小写都可以,建议大写。)
- 如果要定义一个float类型的变量,那么在数据值的后面需要加上F后缀。(大小写都可以)
三、标识符
- 业内大多数程序员都在遵守阿里巴巴的命名规则
- 在线阅读:点击进入
1.硬性要求:必须要这么做,否则代码会报错
- 必须由数字、字母、下划线_、美元符号$组成
- 数字不能开头
- 不能是关键字
- 区分大小写的
2.软性建议:如果不这么做,代码不会报错,但是会让代码显得比较low
3.小驼峰命名法(适用于变量名和方法名)
- 如果是一个单词,那么全部小写,比如:name
- 如果是多个单词,那么从第二个单词开始,首字母大写,比如:firstName、maxAge
4.大驼峰命名法(适用于类名)
- 如果是一个单词,那么首字母大写。比如:Demo、Test
- 如果是多个单词,那么每一个单词首字母都需要大写。比如:HelloWorld
不管起什么名字,都要做到见名知意
5.阿里巴巴命名规范细节
- 尽量不要用拼音。但是一些国际通用的拼音可视为英文单词
- 正确:alibaba、hangzhou、nanjing
- 错误:jiage、dazhe
- 平时在给变量名、方法名、类名起名字的时候,不要使用下划线或美元符号。
- 错误:_name
- 正确:name
四、键盘录入
键盘录入的实际功能Java已经帮我们写好了,不需要我们自己再实现了,而Java写好的功能都放在了Scanner这个类中,所以,我们只要直接使用Scanner这个类就可以了
使用步骤:
- 导包:其实就是表示先找到Scanner这个类在哪
- 创建对象:其实就表示申明一下,我准备开始用Scanner这个类了
- 接收数据:也是真正干活的代码
// 导包,其实就是先找到Scanner这个类在哪
import java.util.Scanner;public class ScannerDemo{public static void main(String[] args){// 创建对象,其实就是申明一下,我准备开始用Scanner这个类了。Scanner sc = new Scanner(System.in);// 接收数据// 当程序运行之后,我们在键盘输入的数据就会被变量i给接收了System.out.println("请输入一个数字");int i = sc.nextInt();System.out.println(i);}
}
五、判断语句
1. 三种格式
- 第一种格式,适用于单个条件的判断
if (关系表达式) {语句体;
}
- 第二种格式,适用于两个条件的判断
if (关系表达式) {语句体1;
} else {语句体2;
}
- 第三种格式,使用与多个条件的判断
if (关系表达式1) {语句体1;
} else if (关系表达式2) {语句体2;
}
…
else {语句体n+1;
}
2. 练习题
需求:键盘录入体重,如果大于150斤,给出超重回应,否则没有任何回应
代码如下:
// 键盘录入体重
Scanner sc = new Scanner(System.in);
System.out.println("请输入体重");
int wine = sc.nextInt();//5
// 对体重进行一个判断即可
if(wine > 150) {System.out.println("小伙子,你超重了!!!");
}
需求:键盘录入一个整数,表示身上的钱。如果大于等于100块,就是自助餐厅。否则,就吃经济实惠的路边摊。
// 键盘录入一个整数。表示身上的钱。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数表示身上的钱");
int money = sc.nextInt();
// 对钱进行判断
if(money >= 100){System.out.println("吃自助餐厅");
}else{System.out.println("路边摊");
}
需求:90-100分为优,80-90分为良,70-80分为中,60-70分为差
//1.键盘录入一个值表示小明的分数
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的成绩");
int score = sc.nextInt();
// 对分数的有效性进行判断
if(score >= 0 && score <= 100){// 有效的分数// 分数进行判断,不同情况执行不同的代码if(score > 90 && score <= 100){System.out.println("优");}else if(score > 80 && score <= 90){System.out.println("良");}else if(score > 70 && score <= 80){System.out.println("中");}else{System.out.println("差");}
}else{// 无效的分数System.out.println("分数不合法");
}
六、switch语句
- 格式
switch (表达式) {case 1:语句体1;break;case 2:语句体2;break;...default:语句体n+1;break;
}
- 执行流程
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
- 小练习
需求:键盘录入星期数,显示今天的减肥活动
周一:跑步周二:游泳
周三:慢走
周四:动感单车
周五:拳击
周六:爬山
周日:好好吃一顿
public class SwitchDemo {public static void main(String[] args) {// 键盘录入一个整数表示星期Scanner sc = new Scanner(System.in);System.out.println("请输入一个整数表示星期");int week = sc.nextInt();// 书写一个switch语句去跟week进行匹配switch (week){case 1:System.out.println("跑步");break;case 2:System.out.println("游泳");break;case 3:System.out.println("慢走");break;case 4:System.out.println("动感单车");break;case 5:System.out.println("拳击");break;case 6:System.out.println("爬山");break;case 7:System.out.println("好好吃一顿");break;default:System.out.println("输入错误,没有这个星期");break;}}
}
- switch的扩展知识
- default的位置和省略情况
- default可以放在任意位置,也可以省略
- case穿透
- 不写break会引发case穿透现象
- switch在JDK17的新特性
int number = 10;
switch (number) {case 1 -> System.out.println("一");case 2 -> System.out.println("二");case 3 -> System.out.println("三");default -> System.out.println("其他");
}
需求:键盘录入星期数,输出工作日、休息日
// 键盘录入星期数
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期");
int week = sc.nextInt();//3
// 利用switch进行匹配
----------------------------------------------------
// 利用case穿透简化代码
switch (week){case 1:case 2:case 3:case 4:case 5:System.out.println("工作日");break;case 6:case 7:System.out.println("休息日");break;default:System.out.println("没有这个星期");break;
}
----------------------------------------------------
// 利用JDK17简化代码书写
switch (week) {case 1, 2, 3, 4, 5 -> System.out.println("工作日");case 6, 7 -> System.out.println("休息日");default -> System.out.println("没有这个星期");
}
七、循环
java中一共有三种循环
- for格式的循环
- while格式的循环
- do…while格式的循环
1.for循环格式
for (初始化语句;条件判断语句;条件控制语句) {循环体语句;
}
格式解释:
- 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
- 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
- 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
- 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
执行流程:
-
执行初始化语句
-
执行条件判断语句,看其结果是true还是false
- 如果是false,循环结束
- 如果是true,继续执行
-
执行循环体语句
-
执行条件控制语句
-
回到2继续
for循环书写技巧:
- 确定循环的开始条件
- 确定循环的结束条件
- 确定循环要重复执行的代码
代码示例
//1.确定循环的开始条件
//2.确定循环的结束条件
//3.确定要重复执行的代码//需求:打印5次HelloWorld
//开始条件:1
//结束条件:5
//重复代码:打印语句for (int i = 1; i <= 5; i++) {System.out.println("HelloWorld");
}
2.while循环格式
while(条件判断语句){循环体;条件控制语句;
}
3.do…while循环
do{循环体;条件控制语句;
}while(条件判断语句);
特点:先执行,再判断
4.三种格式的区别:
-
for和while循环,是先判断,再执行
-
do…while是先执行,再判断
-
当知道循环次数或者循环范围的时候,用for循环
-
当不知道循环次数,也不知道循环范围,但是知道循环的结束条件时,用while循环
八、循环控制语句
1.break:不能单独存在的。可以用在switch和循环中,表示结束,跳出的意思
//需求,小A同学平时能吃5个包子,但是有一天胃口不好,吃完第三个的时候就不吃了
for (int i = 1; i <= 5; i++) {System.out.println("在吃第" + i + "个包子");//吃完第三个的时候就不吃了if(i == 3){break;//结束整个循环。}
}
2.continue:不能单独存在的。只能存在于循环当中, 表示:跳过本次循环,继续执行下次循环
//需求,小A同学平时能吃5个包子,但是有一天第三个包子里面有虫子,第三个包子不吃
for (int i = 1; i <= 5; i++) {//第3个包子有虫子就跳过,继续吃下面的包子if(i == 3){//跳过本次循环(本次循环中,下面的代码就不执行了),继续执行下次循环。continue;}System.out.println("在吃第" + i + "个包子");
}
九、方法
1.方法的格式
public static 返回值类型 方法名(参数) {方法体; return 数据 ;
}
2.格式详解
- 格式解析
- public static :修饰符
- 返回值类型:方法操作完毕之后返回的数据的数据类型
- 如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return
- 方法名:调用方法时候使用的标识
- 参数:由数据类型和变量名组成,多个参数之间用逗号隔开
- 方法体:完成功能的代码块
- return:如果方法操作完毕,有数据返回,用于把数据返回给调用者
- 两个明确
- 明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
- 明确参数:主要是明确参数的类型和数量
- 两个注意
- void类型的方法,直接调用即可
- 非void类型的方法,推荐用变量接收调用
3.方法的重载
-
概念:方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
-
注意点:
- 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
- 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
-
正确范例:
public class MethodDemo {public static void fn(int a) {//方法体}public static int fn(double a) {//方法体}
}public class MethodDemo {public static float fn(int a) {//方法体}public static int fn(int a , int b) {//方法体}
}
- 错误范例
public class MethodDemo {public static void fn(int a) {//方法体}/*错误原因:重载与返回值无关*/public static int fn(int a) { //方法体}
}public class MethodDemo01 {public static void fn(int a) {//方法体}
}
/*错误原因:这是两个类的两个fn方法*/
public class MethodDemo02 {public static int fn(double a) { //方法体}
}