一、JAVA基础
1 .环境准备
1.1下载JDK
1.2 配置Path环境
- 建议叫做JAVA_HOME
1.3 JAVA中的数据类型
2. 变量
2.1 变量注意点
- 在同一对花括号中,变量名不能重复。
- 变量在使用之前,必须初始化(赋值)。
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
2.2 变量的三种定义方式
数据类型 变量名 = 初始化值; // 声明变量并赋值
int age = 18;
System.out.println(age);
// 先声明,后赋值(使用前赋值即可)
数据类型 变量名;
变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);
int a = 10, b = 20; // 定义int类型的变量a和b,中间使用逗号隔开
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);
2.3 标识符命名规则
标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名。
Java中标识符的组成规则:
- 由字母、数字、下划线“_”、美元符号“$”组成,第一个字符不能是数字。
- 不能使用java中的关键字作为标识符。
- 标识符对大小写敏感(区分大小写)。
Java中标识符的命名约定:
小驼峰式命名:变量名、方法名
- 首字母小写,从第二个单词开始每个单词的首字母大写。
大驼峰式命名:类名 - 每个单词的首字母都大写。
另外,标识符的命名最好可以做到见名知意
- 例如:username、studentNumber等。
3. 键盘录入
1、导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。
import java.util.Scanner;
2、创建Scanner对象。
Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变
3、接收数据
int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回。
示例:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//接收数据
int a = sc.nextInt();
//输出数据
System.out.println(a);
}
}
二、JAVA基础语法
1. 类型转换
1.1 隐式转换
把数据范围小的变量直接赋值给数据范围大的变量,自动书写即可
double num = 10; // 将int类型的10直接赋值给double类型
System.out.println(num); // 输出10.0
1.2 强制转换
把数值范围大的变量赋值给数值范围小的变量(会造成数据丢失)
double num1 = 5.5;
int num2 = (int) num1; // 将double类型的num1强制转换为int类型
System.out.println(num2); // 输出5(小数位直接舍弃)
2. 运算符
2.1 字符的+操作
char类型:通过ASCⅡ表解码,将得到的数字相加后输出数值
char ch1 = 'a';
System.out.println(ch1 + 1); // 输出98,97 + 1 = 98
char ch2 = 'A';
System.out.println(ch2 + 1); // 输出66,65 + 1 = 66
char ch3 = '0';
System.out.println(ch3 + 1); // 输出49,48 + 1 = 49
算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
-
byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。
-
整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型
-
等级顺序:byte,short,char --> int --> long --> float --> double
2.2 字符串的+操作
将多个字符串链接在一起
System.out.println("大头大头"+ "下雨不愁"); // 输出:大头大头下雨不愁
2.3 自增自减运算符
2.4 赋值运算符
2.5 关系运算符
- 关系运算符的结果都是boolean类型,要么是true,要么是false。
2.6 逻辑运算符
2.7 短路逻辑运算符
-
逻辑与&,无论左边真假,右边都要执行。
-
短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
-
逻辑或|,无论左边真假,右边都要执行。
-
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
3. 流程控制语句
3.1 if语句
格式:
if (关系表达式) {
语句体;
}
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
3.2 switch语句
switch (表达式) {
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
switch语句的break穿透
/*
case穿透是如何产生的?
如果switch语句中,case省略了break语句, 就会开始case穿透.
现象:
当开始case穿透,后续的case就不会具有匹配效果,内部的语句都会执行
直到看见break,或者将整体switch语句执行完毕,才会结束。
*/
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期数:");
int week = sc.nextInt();
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;
}
}
}
3.3 for循环
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
public class ForTest01 {
public static void main(String[] args) {
//需求:输出数据1-5
for(int i=1; i<=5; i++) {
System.out.println(i);
}
System.out.println("--------");
//需求:输出数据5-1
for(int i=5; i>=1; i--) {
System.out.println(i);
}
}
}
3.4 while循环
初始化语句;
while (条件判断语句) {
循环体语句;
条件控制语句;
}
public class WhileDemo {
public static void main(String[] args) {
//需求:在控制台输出5次"HelloWorld"
//for循环实现
for(int i=1; i<=5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------");
//while循环实现
int j = 1;
while(j<=5) {
System.out.println("HelloWorld");
j++;
}
}
}
3.5 dowhile循环
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);
public class DoWhileDemo {
public static void main(String[] args) {
//需求:在控制台输出5次"HelloWorld"
//for循环实现
for(int i=1; i<=5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------");
//do...while循环实现
int j = 1;
do {
System.out.println("HelloWorld");
j++;
}while(j<=5);
}
}
3.6 三种循环的区别
- 三种循环的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
- for循环和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- 死循环(无限循环)的三种格式
- for(;😉{}
- while(true){}
- do {} while(true);
3.7 跳转控制语句
- 跳转控制语句(break)
- 跳出循环,结束循环
- 跳转控制语句(continue)
- 跳过本次循环,继续下次循环
- 注意: continue只能在循环中进行使用!
4.Random
5.1 Random产生随机数
-
导入包
import java.util.Random;
-
创建对象
Random r = new Random();
-
产生随机数
int num = r.nextInt(10);
解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19
5.数组
5.1 数组定义格式
// 数据类型[] 数组名
int[] arr;
double[] arr;
char[] arr;
// 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
// 数据类型[] 数组名 = {元素1,元素2,...};
// 数据类型 数组名[]
int arr[];
double arr[];
char arr[];
5.2 动态初始化
// 数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
5.3 通过索引进行数组访问
数组名[索引];
5.4 数组遍历
public class ArrayTest01 {
public static void main(String[] args) {
//定义数组
int[] arr = {11, 22, 33, 44, 55};
//使用通用的遍历格式
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
}
public class ArrayTest01 {
public static void main(String[] args) {
//定义数组
int[] arr = {11, 22, 33, 44, 55};
//使用增强for遍历
for(int j: arr) {
System.out.println(arr[j]);
}
}
}
5.5数组最大值
package com.itheima.test;
import java.util.Scanner;
public class Test2Array {
/*
需求: 从数组中查找最大值
int[] arr = {12,45,98,73,60};
实现步骤:
1. 假设数组中的第一个元素为最大值
2. 遍历数组, 获取每一个元素, 准备进行比较
3. 如果比较的过程中, 出现了比max更大的, 让max记录更大的值
4. 循环结束后, 打印最大值.
*/
public static void main(String[] args) {
int[] arr = {12,45,98,73,60};
// 1. 假设数组中的第一个元素为最大值
int max = arr[0];
// 2. 遍历数组, 获取每一个元素, 准备进行比较
for(int i = 1; i < arr.length; i++){
// 3. 如果比较的过程中, 出现了比max更大的, 让max记录更大的值
if(arr[i] > max){
max = arr[i];
}
}
// 4. 循环结束后, 打印最大值.
System.out.println("max:" + max);
}
}
6.位运算
6.1 位移运算符
有符号左移运算,二进制位向左移动, 左边符号位丢弃, 右边补齐0
运算规律: 向左移动几位, 就是乘以2的几次幂
有符号右移运算,二进制位向右移动, 使用符号位进行补位
运算规律: 向右移动几位, 就是除以2的几次幂
^ 运算符的特点:一个数, 被另外一个数, 异或两次, 该数本身不变
// 交换a b 的值
public class demo6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);
System.out.println(b);
}
}