三、java基础
变量与运算符
java程序结构
程序是由程序块组成{},数据类型、变量、运算符、控制流语句。
标识符、关键字和保留字
标识符:用来表示一些元素的名字,比如:变量名、类名、包名。
标识符命名规则:1.标识符必须是以字母开头、下划线(_)、数字、或者美元($)组成
https://m.runoob.com/java/java-basic-syntax.html
变量名
变量时用来存储数据的,在程序运行的过程中它的值是可以变化的,变量可以存放一种数据类型的值,变量的数据类型在声明时需要指定。
作用:
1.变量是程序中数据的临时存放场所
2.保存程序运行时用户输入的数据
3.特定的运算结果
变量的声明
/**
*数据类型 变量名1,变量名2
**/
String account,password;
变量名的赋值
/**
* 变量赋值:
* 第一次给变量赋值叫“初始化”。使用“=”来进行赋值
* 数据类型 变量名 = 数据值
* 程序运行时进行变量的数值的更改,叫做“赋值”
* 数据类型 变量名 = 数据值
* 变量名的访问:
*
**/
public static void main(String[] args) {
String sex = "女";
int age = 18;
String account = "admin";
String password = "admin";
System.out.print(age);
}
常量
在程序运行中往往会存在变量值不会变化的情况,比如圆周率,那么这些值不允许发生变化的变量就会叫常量。
在Java中,常量用final来表示,他也是有数据类型的,语法:
final 数据类型 常量名 = 初始值
注意点:1.常量在声明的时候必须初始化 2.常量在初始化后值不能再更改,否则会引起错误。
final double PI = 3.14;
System.out.print(PI);
基本数据类型
整型
byte 字节型 1个字节(8位二进制) -128~127
short 短整型 2个字节(16位二进制) -2^15 ~ 2^15-1
int 整型 4个字节(32位二进制) -2^31 ~ 2^31-1
long 长整型 8个字节(64位二进制) -263~263-1
浮点型
float 单精度 4个字节
double 双精度 8个字节
十进制:3.14
科学计数法:3.14e2
double d = 12345.6;
float f = 20.3F;
注意:1.带小数的数据默认是double,而非float
2.定义float数据需要后面加“f”,“F”
3.定义长整型数据,可以后面加“l”,“L”
字符数据类型
字符数据类型用于存放单个字符,每个字符占用2个字节,一个字符型数据由单引号括起来,使用char来说明数据类型。
char a = 'a';
字符及其含义
‘a’:字母a
‘中’:汉字中
‘\n’:转义字符表示:换行
‘\t’:tab空格
‘\r’:回车
‘\b’:代表一次退格
// 换行
System.out.print('\n');
// 斜杠
System.out.print('\\');
// 单双引号
System.out.print('\"');
布尔数据类型
boolean,只有两个值:true、false,全部都是小写。
True,False
boolean idOK = true;
boolean flag;
flag = true;
数据类型的转换
自动类型转换:1.两种类型彼此兼容 2.目标类型的却只范围要大于原类型
byte/short/char—>int–>long–>float–>double
强制类型转换:变量= (目标类型) 值
//自动转换
int i1 = 12;
int i2 = 45;
double d1 = (i1 + i2)*1.0;
System.out.println(d1);
// 强制转换
byte b;
int c = 0;
float i = 2.8f;
System.out.println((int)i);
b =(byte)c;
运算符
算术运算符和表达式
+:加运算符
-:减运算符
*:乘运算符
/:除运算符
%:取模运算符
++:自增
–:自减
+:字符串的拼接
/**
* @Author:sng
* @Time:2023/7/24 14:04
* @File:demo02
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo02 {
public static void main(String[] args) {
// 变量初始化
int i = 0;
int a;
// 实现a和i的连接,i进行自增,最终讲值赋值给a
/**
* 变量名++:先用原来的值参与运算,然后再给自己加1
*/
a = i++;
// i = i + 1,i = 1
System.out.println(i);
System.out.println(a);
// a = ++i
/**
* ++变量名:先将自己加1,然后再参与运算
*/
a = ++i;
// i = i + 1, i = 2
System.out.println(i);
System.out.println(a);
// 2 % 3 = 2, 2 + 1 = 3,i = 3
System.out.println(i++ % 3);
// i = 3; i = i + 1 ,i = 4, 4 % 3 = 1
System.out.println(++i % 3);
int m = 0;
int b;
b = m--;
System.out.println("m:"+m);
System.out.println("b:"+b);
b = --m;
System.out.println("m:"+m);
System.out.println("b:"+b);
}
}
赋值运算符和表达式
=:赋值运算符
+=:加简捷赋值运算符
-=:减简捷赋值运算符
*=:乘简捷赋值运算符
/=:除简捷赋值运算符
%=:取模简捷赋值运算符
/**
* @Author:sng
* @Time:2023/7/24 14:24
* @File:demo03
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo03 {
public static void main(String[] args) {
int i = 10;
// i = i + 8; i = 18
i += 8;
i -= 8;
i *= 8;
i %= 8;
System.out.println(i);
}
}
关系运算符和表达式
/**
* @Author:sng
* @Time:2023/7/24 14:28
* @File:demo04
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo04 {
public static void main(String[] args) {
/**
* 常见的比较运算符:> < >= <= == !=
*/
int i = 10;
int j = 16;
boolean b = i != j;
boolean equal = i == j;
System.out.println(b);
}
}
逻辑运算符和表达式
&&:与运算符
||:或运算符
!:非运算符
/**
* @Author:sng
* @Time:2023/7/24 14:36
* @File:demo05
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo05 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
/**
boolean flag = a>b && ++b > c;//两边都不成立:false
boolean flag1 = a<b && ++b > c;//左边成立,右边不成立:false
boolean flag2 = a<b && ++b < c;//两边成立:true
boolean flag3 = a>b & ++b > c;//两边不成立:false
boolean flag4 = a < b & ++b > c;//左边成立,右边不成立:false
System.out.println(b);
System.out.println(flag4);
**/
boolean flag = a<b || ++b > c;//左边成立,右边不成立:true
boolean flag1 = a>b || ++b < c;//左边不成立,右边成立:true
boolean flag2 = a>b | ++b < c;
System.out.println(flag2);
}
}
三目条件运算符
表达式 ? 表达式2:表达式3
/**
* @Author:sng
* @Time:2023/7/24 14:50
* @File:demo06
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo06 {
public static void main(String[] args) {
int a = 10;
int b = 20;
/**
* 当表达式1:a<b,成立的时候,会选择“?”后的第一个作为结果输出,如果不成立,则会选择“?”后面的第二个作为结果输出
*/
boolean flag = a > b?true:false;
System.out.println(flag);
}
}
运算符优先级
/**
* @Author:sng
* @Time:2023/7/24 14:55
* @File:demo07
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
// int m = (a + b) * c;
// int h = b / c * a ;
// System.out.println(h);
/**
* 按操作数多少分为:一元操作符、二元~~、三元操作符
* 算数运算符>关系运算符>逻辑运算符>赋值运算符
*/
boolean m = c > a && b < a ;
System.out.println(m);
}
}
编程题:
1.已知a,b都是整型变量,写出将a,b两个变量中的值互换的程序。
2.给定一个0~1000的整数,求各位数的和。例如345=3+4+5=12
3.华氏温度和摄氏温度互相转换
4.给定一个任意的大写字母A~Z,转换为小写字母。
流程控制语句
分支(选择)结构
if语句
if语句的结构:
(单一)
if(表达式){
执行语句块;
}
表达式是true的时候才会执行语句块。
二选一
if(表达式){
语句块1
}else{
语句块2
}
多选
if(表达式1){
语句块1
}else if(表达式2){
语句块2
}....
else{
语句块n(代表的是除去以上所有的情况外)
}
public class demo01 {
public static void main(String[] args) {
int x = 0;
/**
* 单一条件
*/
/**
if (x != 1){
// x != 1:true
System.out.println("x的值为1");
}
// 无论表达式是否为true,该语句都会执行
System.out.println("x的值不为1");
**/
/**
* 二选一:
* 三目条件运算符:表达式?表达式1:表达式2
*/
if (x != 1){
// 表达式结果为true,就会执行第一个语句块
System.out.println("x的值为1");
}else{
// 表达式结果为true的时候,第二个语句块不执行,结果为flase的时候才执行
System.out.println("x的值不为1");
}
int i = 89;
/**
* 多选
*/
if (i <= 100 && i >= 90){
System.out.println("成绩是A");
}else if (i>=80){
System.out.println("成绩是B");
}else {
System.out.println("成绩是C");
}
}
}
switch
switch语句是从多种情况中选择一个条件(事件)执行。
结构:
switch(表达式){
case 事件名:
语句块;
[break]
...
default:
语句块
}
注意:
1.表达式的类型只能是byte、short、char、int
2.case语句只是一个标号语句,只确定程序的入口
3.事件名只能是常量或者常数,不可以是变量,而且不能重复
4.break是一个可选项,用来结束switch语句的。
public class demo02 {
public static void main(String[] args) {
int n = 1;
int result;
// byte、short、char、int
switch (n){
case 1:
System.out.println("Block A");
result = n;
break;
case 2:
System.out.println("Block B");
result = n * n;
break;
case 3:
System.out.println("Block C");
result = n * n * n;
break;
default:
System.out.println("Block D");
result = 0;
break;
}
System.out.println(result);
}
}
/**
将case语句后的值和表达式的值比较,若相等则从该case语句向下执行;如果没有break语句,则一直执行到switch语句的结束,如果遇到break语句,则结束switch语句的执行
**/
练习题
public class demo03 {
public static void main(String[] args) {
/**
* 使用switch语句实现百分之成绩到成绩等级的转换
* 总分100,转换成满分为10,9分为A,8:B;7:C;6:D;其余为E
* 转换:100/10
*/
int score = 9;
/**
* 虽然switch只能输入int。。。。类型数据,但是只要结果为此类型也是可以的
*/
switch (score / 10){
case 10:
case 9:
System.out.println("成绩等级为A");
break;
case 8:
System.out.println("成绩等级为B");
break;
case 7:
System.out.println("成绩等级为C");
break;
case 6:
System.out.println("成绩等级为D");
break;
default:
System.out.println("成绩等级为E");
break;
}
}
}
循环结构
while语句
while(循环条件){
循环体;
}
![image-20230725100711749](大实训.assets\image-20230725100711749.png)
while语句的代码执行过程:
首先判断循环条件,如果循环条件为true,则执行循环体的代码,然后再判断循环条件,直到循环条件为false的时候,才会停止。
public class demo04 {
public static void main(String[] args) {
int i = 1;
/**
while (i <= 3){
// 循环体
System.out.println(i);
i++;
}
**/
/**
* while的括号中,也就是循环条件的数据类型为布尔类型,成立及执行,不成立就退出
*/
while (i<3){
i++;
System.out.println(i);
}
}
}
练习题:
public class practice02 {
public static void main(String[] args) {
/**
* 计算1~1000的奇数和
*/
int i = 1;
int sum = 0;
while (i <= 1000){
if (i%2 != 0){
sum += i;//sum = sum + i;
}
i++;
}
System.out.println(sum);
}
}
public class practice01 {
public static void main(String[] args) {
/**
* 计算1~10的和:55
*/
int i = 1;
int sum = 0;
while (i <= 10){
sum = sum + i;
i++;
}
System.out.println(sum);
}
}
do…while语句
结构:
do{
循环体;
}while(循环条件);
![image-20230725104055767](大实训.assets\image-20230725104055767.png)
/**
* @Author:sng
* @Time:2023/7/25 10:41
* @File:demo05
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo05 {
public static void main(String[] args) {
/**
* 使用do..while实现求和:1~1000的奇数
*/
int i = 1;
int sum = 0;
do{
if (i%2 != 0){
sum += i;
}
i++;
}while (i <= 1000);
System.out.println(sum);
}
}
do…while的执行流程:
首先执行do里面的循环体,再去判断循环条件,循环条件为true的时候去执行循环体,直到循环条件为false,停止。
for语句
结构:
for(表达式1;表达式2;表达式3){
循环体
}
![image-20230725105144127](大实训.assets\image-20230725105144127.png)
表达式1:用于初始化,一般书写变量初始化的代码(int a = 0),它在for循环里面只会执行一次
表达式2:循环条件,要求必须为布尔类型,如果该条件为空,默认为true
表达式3:迭代语句,是指循环变量变化的语句,一般都是(i++)
/**
* @Author:sng
* @Time:2023/7/25 10:55
* @File:demo06
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo06 {
public static void main(String[] args) {
for (int x = 1;x < 10;x++){
System.out.println(x);
}
}
}
练习题:
/**
* @Author:sng
* @Time:2023/7/25 10:56
* @File:practice03
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class practice03 {
public static void main(String[] args) {
/**
* 使用for循环语句实现求和:1~1000的所有奇数
*/
int sum = 0;
for (int i = 1;i <= 1000;i++){
if (i%2 != 0){
sum += i;
}
}
System.out.println(sum);
}
}
数组
数组是一个或者多个相同类型的数据按照一定的顺序组合成的一种数据类型。
根据数组的维度可以将数组分为:一维数组、二维数组、三维数组
一维数组
数组的声明
语法:数据类型[] 数组名 或者 数据类型 数组名[]
![image-20230725151015655](大实训.assets\image-20230725151015655.png)
数组的创建
1.静态方式创建
语法:数据类型[] 数组名 = {数组元素1,数组元素2…数组元素n}
2.动态方式创建
语法:数据类型[] 数组名 = new 数据类型[数组长度]
数组的初始化
1.数组元素的默认值
数组元素是具有默认值的,对于数字类型,默认值是0,对于字符类型,默认值是’\u0000’,对于布尔类型,默认值是false,对于字符串型,默认值是null。
/**
* @Author:sng
* @Time:2023/7/25 15:05
* @File:demo07
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo07 {
public static void main(String[] args) {
char list[] = new char[3];
System.out.println(list[0]);
String[] lists = {
"张三","李四","王五","赵六"};
System.out.println(lists.length);
int a[] = new int[5];
//如果是数组,index(索引)是从0开始的
System.out.println(a[4]);
//默认是null
String s[] = new String[4];
System.out.println(s[0]);
//默认是false
boolean b[] = new boolean[3];
System.out.println(b[0]);
}
}
2.改变数组元素的默认值
如果数组元素的默认值不满足我们的实际需要,那么我们可以在构建数组的过程中指定数组元素的全部初始值,这个过程也叫数组的初始化。
/**
* @Author:sng
* @Time:2023/7/25 15:25
* @File:demo08
* @Project_Name:JavaProject
* @Product_Name:IntelliJ IDEA
**/
public class demo08 {
public static void main(String[] args) {
int a[]={
1,2,3,4,5};
int b[] = new int[]{
1,2,3};
System.out.println(b.length);
System.out.