文章目录

  • Java标识符命名规则,运算符,分支结构
  • 1. Java标识符命名规则
  • 1.1 命名规则案例
  • 1.2 基于 阿里巴巴Java 开发规约限制 的标识符命名规范
  • 2. 运算符
  • 2.1 算术运算符
  • 2.2 自增自减运算符
  • 2.3 关系运算符
  • 2.4 逻辑运算符
  • 2.5短路原则
  • 2.6运算符小案例
  • 3. 分支结构
  • 3.1 生活场景
  • 3.2 if 分支结构
  • 3.3 if else 分支解构
  • 3.4 if else-if 分支结构


Java标识符命名规则,运算符,分支结构

1. Java标识符命名规则
1.1 命名规则案例
163邮箱,注册邮箱名限制
	6 ~ 18个字符,可使用字母、数字、下划线,需要以字母开头

命名规则分析
	1. 有长度限制
	2. 可用字符限制(字母,数字,下划线)
	3. 起始限制 要求使用字母开头
1.2 基于 阿里巴巴Java 开发规约限制 的标识符命名规范
标识符是什么???
	程序员在代码开发中,可以用于自定义的名称信息,包括变量名,方法名,类名,接口名....

AJCG 标识符命名规范:
	1. 标识符有且只允许使用英文字母(A ~ Z, a ~ z),数字(0 ~ 9), 唯一可以使用的标点符号 下划线( _ ) 
	2. 标识符要求必须使用英文字母开头,不允许使用其他字符
	3. Java 中的标识符严格区分大小写,大写和小写不同!!!
	4. 标识符没有严格长度限制,但是会根据实际情况,限制标识符长度。
	5. 标识符要求做到【见名知意,动宾结构】
		正确案例:
			studentName studentAge studentScore 【见名知意】
			学生姓名     学生年龄     学生成绩
			
			getStudentName setStudentName getStudentAge setStudentAge 【见名知意。动宾结构】
			获取学生姓名     设置学生姓名     获取学生年龄    设置学生年龄
		
		错误案例:
			含糊不清,无法分析,变量名没有明确的语义性,要求变量定义单独成行,一行一个
				int a,b,c,d,e,f,g;
			看似高阶,实则啥也不是
				payBeiZhu 不能出现英文和拼音的混合
				zhiFuBeiZhu 不允许,拼音除专用名词(alibaba,beijing)之外,其他不能使用 
				tsgl1y 绝对不允许,阅读性极差
	6. 标识符要求使用驼峰命名法或者下划线命名法
		驼峰命名法:
			小驼峰
				标识符首字母小写,之后的每一个单词首字母大写,作为区分标记
					studentName studentAge studentScore
					getStudentName setStudentName getStudentAge setStudentAge
				常用于:
					变量名,方法名
			大驼峰
				标识符每一个单词首字母大写
					FirstJava Demo1 Demo2
					ArrayIndexOutOfBoundsException
						数组下标越界异常
					BufferedInputStream
				常用于:
					类名,接口名
					class 之后的名称就是类名,
					
		下划线命名法:
			所有单词字母全部大写,不同的单词之间使用 _ 分割
			JAVA_HOME MAX_VALUE MIN_VALUE MAX_ARRAY_SIZE DEFAULT_CAPACITY
	7. 标识符不得使用已经被 Java 占用的关键字和保留字
		代码中变颜色的内容都不可以用于自定义标识符,例如 int float double
	8. 标识符在一定范围内容唯一
		163邮箱绝对不可能出现两个人账号一样!!!
2. 运算符
2.1 算术运算符
开发中使用的算术运算符:
	+ - * / () = %

开发中使用要求:
	1. 先乘除后加减
	2. 除数不能为 0 
	3. 从左至右基本原则
	4. 有优先级需求,使用括号处理
	5. = 赋值号,将赋值号右侧的数据,赋值给左侧的变量

取余 % :
	小学没有学分数/小数
		10 ÷ 6 = 1 ... 4
		1 是商为结果
		4 为余数
	开发中的取余目标结果就是【余数】,如果按照上面的案例,结果为 4

除以 /:
	Java 规定,如果是整数相除,没有小数,取整!!!
	5 / 2 = 2;

小案例:
	10 / 12 = ?
		结果为 0 
	10 % 12 = ?
		结果为 10
	12 / 10 = ?
		结果为 1
	12 % 10 = ?
		结果为 2
	25 / 3 = ?
		结果为 8
	25 % 3 = ?
		结果为 1
// 算术运算符案例
public class Demo1 {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 20;
		
		num1 = num1 + num2; // num1 = 30  num2 = 20
		/*
		【注意】
			代码运行过程中,要求关注变量存储数据变化过程。
			num1 目前数据存储已通过第 7 行代码存储内容变化,结果为 30
			下方代码执行过程中,num1 = 30 num2 = 20 ==> num1 = 30 * 20 
			num1 = 600
		*/
		num1 = num1 * num2; // num1 = 600 num2 = 20
		num1 = num1 - num2; // num1 = 580 num2 = 20
		num1 = num1 / num2; // num1 = 29  num2 = 20
		num1 = num1 % num2; // num1 = 9   num2 = 20
		
		/*
		【注意】
			num2 数据存储内容在整个的运行过程中,没有任何的变化,
			因为 num2 数据存储内容没有被重新赋值
			[结论] 
				变量数据存储内容,有且只有在被赋值的情况下,
				才可以修改
		*/
		
		System.out.println(num1);
		System.out.println(num2);
	}
}
【增强版算术运算符】
	+= -= *= /= %=
int num1 = 10;
int num2 = 20;

num1 = num1 + num2; // num1 = 30 num2 = 20
num1 += num2;       // num1 = 50 num2 = 20

/*
优势:
	1. 简化代码结构,节省代码体量
	2. 自带 buff ,有特殊功能
*/
2.2 自增自减运算符
自增自减运算符格式:	
	++ 自增 ==> 操作的变量数据内容自增 1 
	-- 自减 ==> 操作的变量数据内容自减 1
// 自增自减运算符演示
public class Demo2 {
	public static void main(String[] args) {
		int num = 10;
		
		System.out.println(num);
		
		/*
		自增运算符作用是操作的变量数据存储内容自增 1 
		*/
		System.out.println(num++); // 10
		System.out.println(num);   // 11
		
		System.out.println();
		
		System.out.println(++num); // 12
		System.out.println(num);   // 12
		
		/*
		分析:
			1. 所有的自增操作全部有效,num 数据存储结果原本是 10
			通过该两次 自增操作之后,num 目前数据存储情况为 12
			2. 发现问题
				System.out.println(num++);  为什么结果为 10 
					当前代码运行时,num 数据存储结果为 10,++ 自增操作
					在变量之后,执行流程
						a. 取值目前 num 数据内容参与代码运行,得到数据 10
						b. 代码当前执行完毕之后,num 完成自增操作 num 10 ==> 11
					看到的展示效果为 10 的情况,【先取值后自增】
				
				--------------------------------------------
				
				System.out.println(++num); 为什么结果为 12
					当前代码运行时,num 数据存储结果为 11,++ 自增操作
					在变量之前,执行流程
						a. 首先 num 执行自增操作,num 11 ==> 12
						b. 取值当前 num 数据存储情况,参与代码运行,得到数据 12
					看到的展示效果为 12 的情况,【先自增后取值】
			【总结】
				++ 在变量之前,【先自增后取值】
				++ 在变量之后,【先取值后自增】
				自减操作同理
				
			代码歧义性过大!!!
		*/
	}
}
【语法总结】
	1. 自增自减运算符有且只能操作变量,不可以操作常量!!!
	2. 自增自减运算符在变量之前和变量之后,操作流程不同
		在变量之前,【先操作后取值】
		在变量之后,【先取值后操作】

【使用建议】
	1. 自增自减歧义性过大,代码中尽量减少使用
	2. 如果必要要使用
		a. 单独成行
			int num = 10;
			num++;
			++num;
		b. 使用 += 1 or -= 1 替换 自增自减运算符
			++num or num++ ===> num += 1
			--num or num-- ===> num -= 1	
            [num1 =- num2 相当于 将 - num2 赋值给 num1 ]
            [num1 =+ num2 相当于 将 num2 赋值给 num1]
            Swift iOS开发语言中,已经禁用 自增自减运算符,避免代码歧义,全部使用 += 1 和 -= 1 替换
            提高代码阅读性

【自增自减运算符常用位置】
	1. 循环操作
	2. 面试题
【面试题1】
	int num = 5;
	int ret = num++ * ++num;
	
	
	num = 7
	ret = 35
     /*
     num 初始化数据为 5 自增做了两次
     		自增操作是针对变量操作,自增自减运算符存在,一定会修改对应的变量数据内容
     		目前表达式中的存在 num++ 和 ++num
     		针对于 num 的自增操作执行了 两次
     		所以 num 变量的最终数据存储结果为 7
     		
     ret 的结果是取决于 num 在表达式中的数据提供效果。
     		ret = num++ * ++num;
     		num++ 先取值,后自增 针对于 ret计算表达式的数据提供为 5 
     			num++ 自增后数据存储为 6
     		++num 先自增,后取值
     			++num 针对于 num 数据存储的修改,num 数据存储内容为 7
     			针对于 ret 计算表达式的数据提供为 7
     			
     		ret = 5 * 7 ; ===> 35;
     */
	
【面试题2】
	int num = 10;
	++(num++)++;
	num = ?
     /*
     语法错误!!
     有小括号先处理括号中的内容
        小括号中数据内容对于整个表达式而言是一个【值/数据】,不是变量!!
        			小括号里面的内容对外的结果不是 num 变量
        自增自减运算符有且只能操作变量,不能操作【常量】,同样无法操作【值/数据】
      */
2.3 关系运算符
判断表达式两端的数据结果是否满足关系运算符需求,对外结果为boolean(true false)
Java中开发使用的关系运算符:
	>  <  >=  <=  =  ==  !=

	public class Demo3 {
	public static void main(String []args) {
	
		
	
		boolean ret = 5 > 2;//ture
		System.out.println(ret);
	
	
		ret = 5 < 2;//false 
		System.out.println(ret);
		
		ret = 5 <= 2;//false 
		System.out.println(ret);
		
		
		ret = (5 == 5)//ture
		System.out.println(ret);
		

		ret = ('A' == 'a'); //false
		System.out.println(ret);
		
		ret = (434 != 434);  //false
		System.out.println(ret);
		
	}

}
2.4 逻辑运算符
条件叠加,多个条件整合成一个完整的条件分析
		    		逻辑运算符运算的最终结果为 boolean 类型
逻辑与
	与 &&
	同真为真,有假【即】假
逻辑或
	或 ||
	有真【即】真,同假为假
逻辑非
	取反 !
	强牛,犟,真变假,假变真
	public class Demo4 {
	public static void mian(String []args) {
			
		boolean  ret = 10 > 2 && 3 < 4;
		System.out.println(ret); //true
		
		
		ret = 18 > 8 || 8 > 19;
		System.out.println(ret); //true
	
		
		ret = !(10 > 5);
		System.out.println(ret); //false
	
	}


}
2.5短路原则
int num = 10;
boolean ret = num > 5 && ++num > 10;

num = ?
ret = ?
/*
结构分析
	&& 同真则真,一假即假
	如果一个逻辑与表达式中出现了一个false 条件,该逻辑与表达式有没有可能成为true??
	 	绝对不可能!!
	 逻辑与表达式,计算机在运行过程中,一旦发先false 条件!!当前逻辑与表达式已经明确结果为false!
	 计算机为节约资源,从false 条件开始,之后的所有表达式不在运行!!
	 
	 
	 
	 【逻辑与短路原则 同真为真,有假【即】假】

*/
      
int num = 10;
boolean ret = num > 5 || ++num > 5;

num = ?
ret = ?
/*
	|| 有真【即】真,同假为假
	
	逻辑或表达式中,如果发现了 ture 条件,之后的所有内容不再执行,节约计算机资源。
    【逻辑或短路原则,有真【即】真,同假为假】

*/
2.6运算符小案例
  1. 完成条件判断书写,判断一个数值是否在 0 ~ 100 之间
int num = 50;
num >= 0 && num <= 100;
//使用逻辑与表达式连接条件,限制当前 num 数据范围在 0 ~ 100

2.完成条件判断书写,判断一个字符是否为数字字符

char ch = '4'; //存储 字符常量 '4' == > 数字字符
ch >= '0' && ch <= '9';
//使用逻辑与表达式连接条件,限制当前 ch 字符数据存储范围是 '0' ~ '9'
//如果操作过程涉及到字符内容,有且只允许使用字符本身

3.完成条件判断书写,判断一个字符是否为大写英文字母

char ch = 'Y';
ch >= 'A' && ch <= 'Z';
  1. 完成条件判断书写,判断一个字符是否为英文字母
char ch = 's';
ch >= 'A' && ch <= 'Z'
ch >= 'a' && ch <= 'z';
//不可能一个英文字母既满足大写,又满足小写!! 
ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z';
(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
/*
以上两个条件都正确!!
	小括号的使用可以认为是一个整体,阅读角度上看,可能优于没有括号的版本
	逻辑与运算符优先级高于逻辑或!无需括号限制优先级和整体性问题

*/

5.完成条件与判断书写,完成闰年条件判断

闰年条件:

  1. 可以被 4 整除,但是不能被 100 整除
  2. 可以除 400 整除
    满足以上任意条件都是润年!!
int year = 2008;
year % 4 == 0;//可以被 4 整除
year % 100 != 0;//不可以被 100 整除

year % 400 == 0;//可以被 400 整除

year % 4 == 0; && year % 100 != 0; || year % 400 == 0;
3. 分支结构
3.1 生活场景
会员等级:
	磊哥超市
		消费满 100 元 黑铁 vip
		消费满 500 元 青铜 vip
		消费满 1000 元 白银 vip
		消费满 3000 元 黄金 vip
		消费满 10000 元 砖石 vip
充值返现
     磊哥超市
        充值 1000 送 100
        充值 2000 送 300
        充值 5000 送 1000
        充值 10000 送 3000
学生成绩等级
       满分100分
        	90 以上 秀儿
        	80 以上 良儿
        	70 以上 中儿
        	60 以上 过儿
        	60 以下 让你爹穿拖鞋来校区
3.2 if 分支结构
//格式
if (/*条件判断*/) {
	//语句体
}
/*
执行流程:
	代码运行判断 if 之后小括号里面的数据是否为 true. 如果为 true 之星1语句体内容, 如果为 false不执行。 不管 if 分支结构中的语句体是否执行 


*/
public class Demo4 {
	public static void main(String []args) {		
		int totalPrice = 88;
		if (totalPrice >= 68) {
			System.out.print("亲爱的贵宾,送你一张停车卷,");			
		}		
		System.out.println("欢迎您下次光临!!!"); 	
	}
}
3.3 if else 分支解构
//格式
if (/*条件判断。boolean true or false */) {
    //true 语句体
} else {
    //false 语句体
}
/*
执行流程:
	代码执行 if else 分支结构, 首先 判断 if 之后小括号中的数据内容判断为 true。 如果为 true 执行 if 大括号对应的 true 语句体,如果为 false 执行 else 大括号对应大括号对应的 false 语句体,执行完毕继续执行后期代码。
	
	世界上最遥远的距离不是我在你面前你不知道我爱你,而是我在 if 里 你在 else 里


*/

public class Demo5 {
	public static void main(String []args) {
					
		int totalPrice = 200;	
		
		if (totalPrice >= 168) {
			
			System.out.println("亲爱的顾客,送一瓶小拉菲");
		} else{
			
			System.out.println("亲爱的顾客,送一瓶健力宝");		
		}
		
		System.out.println("欢迎您下次光临!!");	
			
	}

}
3.4 if else-if 分支结构
//格式
if (/*条件匹配1*/) {
	处理方式1
} else if (/*条件匹配2*/) {
	处理方式2
} else {
	//不满足任何条件匹配的备选处理方式
}
/*
执行流程:
	代码运行 if else-if 分支结构, 自上而下匹配 if 之后下括号里面的条件, 如果发现匹配项,执行对应的处理方式,跳出分支结构,如果没有任何一个 if 条件匹配, 执行 else 中的备选处理方式。
	if else-if 分支结构执行完成,继续执行之后的代码
*/

public class Demo5 {
	public static void main(String []args) {
		
		int totalPrice = 500;
		
		if (totalPrice >= 2000) {
			System.out.println("亲爱的顾客本店送给你了");
		} else if (totalPrice >= 1000) {
			
			System.out.println("亲爱的顾客送你劳斯莱斯1000元抵扣劵");
		} else if (totalPrice >= 500) {
			
			System.out.println("亲爱的顾客送你一包价值两块五的卫龙");
		} else if (totalPrice >= 200) {
			
			System.out.println("亲爱的顾客送你价值100元的商品抵用卷");
		} else {
			
			System.out.println("亲爱的顾客祝你生活愉快");
		}			
	}
}

条件匹配, 执行 else 中的备选处理方式。
if else-if 分支结构执行完成,继续执行之后的代码
*/

public class Demo5 {
public static void main(String []args) {

int totalPrice = 500;
	
	if (totalPrice >= 2000) {
		System.out.println("亲爱的顾客本店送给你了");
	} else if (totalPrice >= 1000) {
		
		System.out.println("亲爱的顾客送你劳斯莱斯1000元抵扣劵");
	} else if (totalPrice >= 500) {
		
		System.out.println("亲爱的顾客送你一包价值两块五的卫龙");
	} else if (totalPrice >= 200) {
		
		System.out.println("亲爱的顾客送你价值100元的商品抵用卷");
	} else {
		
		System.out.println("亲爱的顾客祝你生活愉快");
	}			
}

}