数据类型,变量,分支和循环详解

本文详细介绍了Java中的基本数据类型,包括整型、浮点型、字符型和布尔型,以及变量的定义和命名规范。此外,还讨论了分支结构,如if-else和if-elseif-else,强调了逻辑运算符的短路原则。循环结构部分涵盖了while和for循环,以及循环控制的关键字break和continue。最后,提到了方法的定义和分类。
摘要由CSDN通过智能技术生成

数据类型,变量,分支和循环

1. 基本数据类型和变量
1.1 数据类型概述
整型数据类型,用于存储 整数

数据类型

占用内存空间字节数

数据范围

byte

1

-128 ~ 127

short

2

-32768 ~ 32767

int

4

-2^31 ~ 2^31 -1

long

8

-2^63 ~ 2^63 -1

【注意】使用浮点类型数据存储目标数据内容,注意精度问题和数据后期的变化问题。

数据类型

占用内存空间字节数

数据范围

double

8(64bit)

10^308

float

4

10^38

/*
计算机存储浮点数默认数据类型选择是 double 类型,计算机仅考虑数据的完整性和精度问题,其他的空间占用无所谓。
10.02 ==> double 
	float num1 = 10.02;
按照目前的写法会导致报错,double 类型的数据赋值给 float 类型,存在精度丢失。
*/
float num1 = 10.02F;
float num2 = 10.01F;

float ret = num1 - num2; ==> 0.01F;
float num1 = 10.02F;
float num2 = 10.01F;

// 0.010000229
System.out.println(num1 - num2);

double num3 = 10.02;
double num4 = 10.01;

// 0.009999999999999787
System.out.println(num3 - num4);
字符类型
字符常量是英文单引号包含的单个元素
'A' '中'
'\n' 换行
'\40' 空格

数据类型

占用内存空间字节数

数据范围

char

2

可以存储中文

布尔类型 boolean

数据类型

占用内存空间字节数

数据范围

boolean

1. 占用一个字节

2. 占用四个字节

3. boolean类型数组 每一个布尔类型占用一个 bit 位

true false

1.2 定义变量
变量定义是符合 AJCG 阿里巴巴 Java 代码开发规约
1. 字符使用范围:
	a. 数字 0 ~ 9 
	b. 英文字母 a ~ z A ~ Z
	c. 唯一可以使用的标点符号 _ 下划线
2. 变量定义对应的标识符要求英文字母开头
3. 标识符要求严格区分大小写
4. 标识符没有严格的长度限制,但是会根据实际的开发情况决定标识符的长度。
5. 标识符要求见名知意,动宾结构
	【语义性要求】
	int a,b,c; 不建议,禁止使用
 	payBeizhu 不可以使用
	
	studentAge studentName studentJavaScore studentMathScore
	findAllStudent findStudentById searchStudentUseName updateStudentById
	deleteStudentById sortStudentUsingComparator

6. 标识符命名要求
	a. 驼峰命名法
		小驼峰
			首字母小写,之后的每一个单词首字母大写
			适用于:
				变量,方法名
		大驼峰
			每一个单词首字母大写,
			适用于:
				类名,接口名
	b. 下划线命名法
		所有单词全部大写,使用 _ 下划线分割。
			适用于:
				带有名称的常量

7. 已经被 Java 占用的关键字和保留字不得用于自定义标识符使用
8. 标识符在一定范围内唯一。
9. 包名全小写。
代码案例定义变量
package com.qfedu.a_test;

public class Demo2 {
	public static void main(String[] args) {
		/*
		num 变量 int 数据类型,但是没有赋值任何的数据
		后期操作过程中,除赋值操作之外,无法参与其他任何
		的代码执行。
		Java 中严格的语法要求,避免【野值】
		int num; 后期使用注意操作
		*/		
		int num = 10;
		System.out.println(num);

		/*
		变量在一定范围以内不可以重复定义。
		 */
		// int num = 10;
		System.out.println(num);

		/*
		10L 告知编译器当前的 常量 10 采用的数据存储方式为 long 类型
		为了更好的满足【数据类型一致化要求】
		 */
		long num2 = 10L;
	}
}
2. 分支结构
2.1 if 结构
if (/* boolean 类型结果表达式 */) {
    // 执行代码内容
}
if (/* boolean 类型结果表达式 */) {
    // if 小括号内容为 true 执行代码内容
} else {
    // if 小括号内容为 false 执行代码内容
}
if (/* 匹配条件 1 */) {
   // 处理方式 1
} else if (/* 匹配条件 2 */) {
   // 处理方式 2
} else if (/* 匹配条件 3 */) {
   // 处理方式 3
} else {
   // 无任何匹配项的处理方式
}
要求和建议
事不过三,不建议连续的三层嵌套结构,阅读性太差
任何时候不允许省略任何一个大括号,哪怕代码仅有一行
常规建议,一个方法最多 80 行,不允许代码中出现过于繁琐的 if 结构
2.2 运算符和案例
算术运算符:
	+ - * / % =
	升级版:
		+= -= *= /= %=

关系运算符:
	> < >= <= != ==
	对外结果为 boolean 类型

逻辑运算符:
	&& 同真为真,有假【即】假
	|| 有真【即】真,同假为假
	!  犟 取反

自增自减运算符:
	++ 
	--
	要求:
		1. 有且只能操作变量
		2. 在变量之前先执行自增自减,再取值操作
		3. 再变量之后先取值操作,再执行自增自减
		4. 语义性较差,再开发中避免复杂使用,推荐使用 += 1 和 -= 1 替换
		5. 自增自减运算符,单独成行!
细节补充
double num1 = 10.5;
double num2 = 2.3;

System.out.println(num1 / num2);
System.out.println(num1 % num2);
/*
4 * 2.3 = > 9.2
10.5 - 9.2 = 1.3
 */
int num = 10;

/*
按照 Java 的语法规则,当前
	num == 10
	10 == num 【墙裂建议】
	实际上结果一致,并且可以有效的防止一定的错误。
	
	num = 10 赋值语句正常操作
	10 = num 赋值语句,但是语法错误,因为常量不可以被赋值。

【注意】
	等值判断,常量在前,变量在后。适用于 == 包括 后期的【方法】 equals
*/
if (num == 10) { // 10 == num
	System.out.println("测试");
}
逻辑与和逻辑或的【短路原则】
重点是关注后期条件的排列关系和对应的操作流程,优化条件罗列。
int num = 10;

boolean ret = num > 15 && ++num > 5;

ret = ?; false
num = ?; 10
/*
逻辑与【短路原则】
	逻辑与 同真为真,有假【即】假
	逻辑与表达式,从第一个 false 条件开始,之后的所有表达式不在运行。
*/

----------------------------------------------------------------
    
int num = 10;

boolean ret = num > 5 || ++num > 5;

ret = ?; true
num = ?; 10
/*
逻辑或【短路原则】
	逻辑或 有真【即】真,同假为假
	逻辑或表达式,从第一个 true 条件开始,之后的所有表达式不在运行。
*/
自增自减运算符面试题
int a = 10;
int b = 5;
int c = 3;

int ret = a++ * ++b - (c-- + b++);

/*
拆掉所有的算术运算符,包括小括号,小括号优先级有且只在自增自减结果提供之后参与。
拆解之后:
    a++ ==> 10
    ++b ==> 6
    c-- ==> 3
    b++ ==> 6
确定每一个自增自减运算符提供的数据之后,恢复原本的运算结构
	10 * 6 - (3 + 6) ==> 60 - 9 ==> 51
*/

ret = 51;
a = 11;
b = 7;
c = 2;
int num = 10;
++(num++);【语法错误 一】
num = ?;

++num--;【语法错误 二】

/*
【语法错误 一】
	1. 自增自减运算符有且只允许操作【变量】
	2. 小括号结果对外是一个【常量】,值,value,数
	代码运行之后的结果:
		++(常量) ==> ++常量 
		语法错误

【语法错误 二】
	1. 自增自减运算符最终提供给表达式的结果是一个常量
	++num ==> 11
	11--; -- 自减运算符,操作的不是一个变量,而是常量数据
	语法错误
*/
if 分支结构演示
/*
rank 分
	1000分 以上 白银
	1200分 以上 黄金
	1400分 以上 铂金
	1600分 以上 钻石
	1800分 以上 大师
	2000分 以上 王者

结构选择:	
	if else if 结构
用户数据提供:
	Scanner 用户从程序外部提供数据的能力和形式。后期使用 前端(HTML页面,APP, 小程序)
用户输入数据合法性判断:
	判断用户提供的数据情况是否满足当前需求
用户输入友好性提示
*/
package com.qfedu.a_test;

import java.util.Scanner;

/**
 *
 * @author Anonymous 2023/2/21 11:28
 */
public class Demo4 {
    /*
    rank 分
        1000分 以上 白银
        1200分 以上 黄金
        1400分 以上 铂金
        1600分 以上 钻石
        1800分 以上 大师
        2000分 以上 王者

    结构选择:
        if else if 结构
    用户数据提供:
        Scanner 用户从程序外部提供数据的能力和形式。后期使用 前端(HTML页面,APP, 小程序)
    用户输入数据合法性判断:
        判断用户提供的数据情况是否满足当前需求
    用户输入友好性提示
         */
    public static void main(String[] args) {
        int rank = 0;
        Scanner scanner = new Scanner(System.in);

        // 用户输入提示
        System.out.println("请输入您的 Rank 分:");
        rank = scanner.nextInt();

        /*
         用户输入数据合法性判断
         根据实际情况判断用户提供的数据是否合法,是否满足生活逻辑
         rank 分没有负数
         */
        if (rank < 0) {
            System.out.println("兄弟,你这个 rank 分有问题!!!");
            /*
            不可以进入正常的代码逻辑:
                1. 终止方法运行【合理】
                    return;
                2. 终止程序运行【过分】
             */
            return;
        }

        // 不推荐的形式
        if (rank >= 1000 && rank < 1200) {
            System.out.println("白银");
        } else if (rank >= 1200 && rank < 1400) {
            System.out.println("黄金");
        } else if (rank >= 1400 && rank < 1600) {
            System.out.println("铂金");
        } else if (rank >= 1600 && rank < 1800) {
            System.out.println("钻石");
        } else {
            System.out.println("其他");
        }

        // 推荐形式
        if (rank >= 2000) {
            System.out.println("王者");
        } else if (rank >= 1800) {
            System.out.println("大师");
        } else if (rank >= 1600) {
            System.out.println("钻石");
        } else if (rank >= 1400) {
            System.out.println("铂金");
        } else if (rank >= 1200) {
            System.out.println("黄金");
        } else if (rank >= 1000) {
            System.out.println("白银");
        } else {
            System.out.println("黄铜");
        }
    }
}
2.3 switch - case
switch case 结构支持数据类型一共四个
整数,字符,字符串和枚举
【墙裂推荐】整数和枚举
格式要求:
按照标准的 switch case 结构完成代码,不允许缺少任何的 break ,case
阿里巴巴 Java 开发规约中要求 default 结构不允许省略
switch (变量存储目标数据类型) {
	case 常量1:
		处理方式1;
		break;
	case 常量2:
		处理方式2;
		break;
	default:
		break;
}
3. 循环结构
循环结构对于代码运行性能是比较浪费的,使用循环要考虑以下问题
循环结构选择
循环次数控制
循环终止条件控制
3.1 循环结构有哪些
while (/* 循环判断,循环条件,要求为 boolean 类型 */) {
    // 循环体
}
do {
  // 循环体  
} while (/* 循环判断,循环条件,要求为 boolean 类型 */);
for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件变更 */) {
	// 循环体
}
while 循环适合无限循环,但是有终止条件限制,或者数据解析,文本读取,无法预知数据的长度,但是明确存在终止标记。例如 文本读取 EOF(End Of File -1)
for 循环适合明确数据开始,数据结束已经步进关系的循环情况。
3.2 循环控制的关键字
break 可以用于在满足条件的情况下,终止当前循环。
continue 终止本次循环,直接进入下一次循环,continue 有且只推荐在 for 循环中使用
3.3 课堂练习
1. 1 ~ 150 的和
	解决方案:
		a. for 循环可以解决问题
		b. 高斯求和公式 【数学思维】
2. 需要通过代码展示 1 ~ 100 中所有的偶数。
	解决方案:
		a. 常规的开发思维
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sout(i);
            }
        }

		b. 基于生活,数学习惯分析的代码内容
        for (int i = 2; i <= 100; i += 2) {
            sout(i);
        }
 
 3. 逢七过 100以内
 	 与 7 无关的数:
 	 	【当前操作条件判断次数过多,性能较差】
 	 	if (i % 7 != 0 && i % 10 != 7 && i / 10 != 7) { 
 	 		sout(i)
 	 	} else {
 	 		sout(过)
 	 	}
 	 
 	 与 7 相关的数:
 	 	【性能较好】
 	 	if (i % 7 == 0 || i / 10 == 7 || i % 10 == 7) {
 	 		sout(过)
 	 	} else {
 	 		sout(i)
 	 	}
4. 方法
4.1 方法的基本格式
权限修饰符 是否静态 返回值类型 方法名(形式参数列表) { 方法体 }
核心: 形式参数列表,返回值类型
4.2 方法分类
方法分析,关注后期的 Lambda 表达式,Stream 流,方法引用
★有参数有返回值 
	最常用的模式,在开发中非常友好,方便代码操作

无参数无返回值
	一般为测试方法,展示方法,内置方法。
	
无参数有返回值
	生产者方法
	
有参数无返回值
	消费者方法
4.3 案例代码
package com.qfedu.a_test;

/**
 * 方法注意事项:
 *      1. Java 中所有的方法平级,不允许出现一个方法内部定义一个新的方法。
 *      2. 目前演示代码采用的方法为【public 修饰 static 标注的 静态方法】
 *
 *
 * @author Anonymous 2023/2/21 15:39
 */
public class Demo6 {
    public static void main(String[] args) {
        /*
        调用方法要求:
            1. 需要明确方法名
            2. 需要提供小括号,Java 中区分变量和方法的最大的区别就是 ()
            3. 需要提供方法所需实际参数
         */
        test();

        // 提供的实际参数类型和方法所需参数类型一致,严格遵守【数据类型一致化要求】
        printIntValue(10);

        int ret = giveMeFive();
        System.out.println("方法返回值结果:" + ret);

        int sum = sumOf(10, 20);
        System.out.println("两数之和:" + sum);
    }

    // 文档注释的目的,是为了在后期开发中,可以快速看到当前方法的注释内容
    // 提示方法的功能
    /**
     * 无参数无返回值方法,当前方法没有返回值和参数,无需告知当前
     * 方法的调用者,该方法的相关返回值和参数信息,只需要告知调用者
     * 当前方法的作用。
     *
     * 测试方法
     */
    public static void test() {
        System.out.println("无参数无返回值方法演示");
    }

    /*
     @param parameter 解释当前参数的用意,特征,数据需求和解释
     方法声明中的形式参数列表对应的【参数名】就是一个可以在
     方法中使用的【局部变量】
     */
    /**
     * 在控制台展示调用者提供的 int 类型数据
     *
     * @param num 用户提供的 int 类型数据内容
     */
    public static void printIntValue(int num) {
        System.out.println("用户提供的数据:" + num);
    }

    /*
     @return 解释当前返回值内容,类型,情况,分析,结果,特征。。。
     Java 中的方法有且只有一个返回值,数据类型要求一致化
     */
    /**
     * 返回一个 int 类型数值 5
     *
     * @return 返回值是一个 int 类型常量 5
     */
    public static int giveMeFive()  {
        /*
        return 关键字:
            1. return 可以将关键字之后的数据返回到方法之外,要求
                关键字之后的数据类型和方法声明返回值类型一致
            2. 结束当前方法运行。
         */
        return 5;
    }

    // 【重要】

    /**
     * 计算返回调用者提供的两个 int 类型数据内容
     *
     * @param num1 用户提供的 int 类型数据
     * @param num2 用户提供的 int 类型数据
     * @return 计算两个 int 类型之和最终的结果内容
     */
    public static int sumOf(int num1, int num2) {
        return num1 + num2;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中分头背带裤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值