Java基础---数据类型与变量、运算符、逻辑控制

一、数据类型与变量

1.1、 字面常量

public class Demo{
public static void main(String[] args){
System.Out.println("hello world!");
System.Out.println(100);
System.Out.println(3.14);
System.Out.println('A');
System.Out.println(true);
System.Out.println(false);
}
}

其中:100、3.14、‘A’、true/false都是常量,将其称为字面常量
字面常量的分类:
① 字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。
② 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
③ 浮点数常量:程序中直接写的小数,比如:3.14、0.49
④ 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’
⑤ 布尔常量:只有两种true和false
⑥ 空常量:null

1.2、数据类型

在Java中数据类型主要分为两类:基本数据类型引用数据类型
基本数据类型有四类八种:

①四类:整形、浮点型、字符型以及布尔型
②八种:

在这里插入图片描述
注意:
●不管是32位系统还是64位系统,int都占4个字节,long都占8个字节
●整形和浮点型都是带有符号的
●整型默认为int型,浮点型默认为double型
●字符串属于引用类型,不在上述类型当中

字符串类型
在Java中使用String类定义字符串类型,比如:

public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2); // s1+s2表示:将s1和s2进行拼接
}

1.3、变量

①概念:
对于经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的

②语法格式:
数据类型 变量名 = 初始值;

int a = 10; // 定义整形变量a,a是变量名也称为标识符,该变量中放置的值为10
double d = 3.14;
char c = 'A';
boolean b = true;
System.Out.println(a);
System.Out.println(d);
System.Out.println(c);
System.Out.println(b);
a = 100; // a是变量,a中的值是可以修改的,注意:= 在java中表示赋值,即将100交给a,a中保存的值就是100
System.Out.println(a);
// 注意:在一行可以定义多个相同类型的变量
int a1 = 10, a2 = 20, a3 = 30;
System.Out.println(a1);
System.Out.println(a2);
System.Out.println(a3);

通过上述方式即可创建一个变量。

注意:一个变量未初始化不能通过编译

1.4、类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。例如:

int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式)强制类型转换(显式)

自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的

1.5 类型提升

① 不同类型的数据混合运算, 范围小的会提升成范围大的。
② 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算。

二、运算符

2.1、算术运算符 (+ - * / %)

int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数

注意:
●都是二元运算符,使用时必须要有左右两个操作数
●int / int 结果还是int类型,而且会向下取整

2.2、增量运算符 (+= -= *= %=)

增量运算符:,该种类运算符操作完成后,会将操作的结果赋值给左操作数。

int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出3
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出2
a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6
a /= 3; // 相当于 a = a / 3
System.out.println(a); // 输出2
a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出2

注意:只有变量才能使用该运算符,常量不能使用

2.3、关系运算符 (>、<、==、!=、>=、<=)

其计算结果是true或false

int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false

注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的,应当写为 (a>3 && a<5)

2.4、逻辑运算符 (&& || !)

运算结果都是boolean类型

int a = 1;
int b = 2;
//1.逻辑与(&&)
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
//2.逻辑或(||)
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
//3.逻辑非(!)
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false

短路求值:&& 和 || 遵守短路求值的规则.

●对于 && , 如果左侧表达式值为 false, 则表达式结果一定是false, 无需计算右侧表达式.
●对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
●& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值

2.5、自增、自减运算符 (++、–)

++是给变量的值加1,–是给变量的值减1

int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3
++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似

注意:
●如果单独使用,【前置++】和【后置++】没有任何区别
●如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1
●只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

三、逻辑控制

3.1、顺序结构

顺序结构比较简单,按照代码书写的顺序一行一行执行

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
aaa
bbb
ccc

如果调整代码的书写顺序, 则执行顺序也发生变化

System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
// 运行结果
aaa
ccc
bbb

3.2、分支结构

① if语句

基本语法:

if(
布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句3
}

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3

悬垂else问题

int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.printlrn("bbb");

if / else 语句中可以不加 大括号 . 但是也可以写语句(只能写一条语句)。 此时 else 是和最接近的 if 匹配。但是实际开发中我们不建议这么写最好加上大括号

② switch语句

基本语法:

switch(表达式){
case 常量值1:
语句1;
break;
case 常量值2:
语句2;
break;
...
default:
内容都不满足时执行语句;
break;
}

执行流程:

① 先计算表达式的值
② 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
③ 当表达式的值没有与所列项匹配时,执行default

3.3、循环结构

①while循环

基本语法格式:

while(循环条件){
循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环.
注意事项

  1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
  2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
  3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行

②for循环

基本语法格式:

for(表达式①;布尔表达式②;表达式③){
表达式④;
}

①表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
②表达式2: 循环条件,满则循环继续,否则循环结束
③表达式3: 循环变量更新方式

③do-while循环

基本语法格式:

do{
循环语句;
}while(循环条件);

先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束

④break

break 的功能是让循环提前结束
示例:找到 100 - 200 中第一个 3 的倍数

int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数,为:" + num);
break;
} 
num++;
} 
// 执行结果
找到了 3 的倍数,:102

执行到 break 就会让循环结束.

⑤continue

continue 的功能是跳过这次循环, 立即进入下次循环
代码示例: 找到 100 - 200 中所有 3 的倍数

int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
} 
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.

3.4、输入输出

①输出到控制台

基本语法

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出

●println 输出的内容自带 \n, print 不带 \n
●printf 的格式化输出方式和 C 语言的 printf 是基本一致的.

②从键盘输入

使用 Scanner 读取字符串/整数/浮点数

import java.util.Scanner; // 需要导入 util 包

Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法
// 执行结果
请输入你的姓名:
张三
请输入你的年龄:
18
请输入你的工资:
1000
你的信息如下:
姓名: 张三
年龄:18
工资:1000.0

使用 Scanner 循环读取 N 个数字,并求取其平均值

Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
while (sc.hasNextInt()) {
int tmp = sc.nextInt();
sum += tmp;
num++;
} 
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
// 执行结果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1

注意事项: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl+ d)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值