day-02 运算符与控制语句

day-02 运算符与控制语句

1 命名规范

标识符的命名要求
1. 见名知意,只能包含数字、字母、下划线、$, 不能以数字开头。一般都是英文单词或者是英文单词的缩写,以及英文的词组或者是词组的缩写,这些缩写要让人看得懂,一看就能知道它要表达的意思
2. 关于类名的命名,类名单词首字母一定要大写,如果有多个单词,每个单词的首字母都要大写
3. 关于变量名的定义以及方法名的定义,要遵循驼峰命名法。即首个单词的首字母要小写,如果是多个单词组成,第一个单词的首字母要小些,其他单词的首字母要大写。如:int studentNum; int sNum; 方法来说,一般要是动词,或者是带动词的短语。比如查数据库,queryById(); queryAll();比如,在javabean中,我们在写get、set方法,get(),set()
public class VarTest01 {
	public static void main(String[] args) {
		//int 3h = 100;
/*
	E:\java基础\day02-1>javac VarTest01.java
	VarTest01.java:3: 错误: 不是语句
					int 3h = 100;
					^
	VarTest01.java:3: 错误: 需要';'
					int 3h = 100;
					   ^
2 个错误
*/
		int $h = 100;
		int _h = 100;
	}

}

2 运算符

算术运算符
	+ - * / % ++ --  
注意,在java中,“+”的使用要注意。因为“+”有拼接字符串的能力。
关于 + :
	除去算术运算中的加法外,它有拼接字符串的能力。在使用的时候一定要小心。
class PlusTest 
{
	public static void main(String[] args) 
	{
		int a = 100;
		int b = 200;
		String str = a + b + 100; // 结果是多少?
		// PlusTest.java:7: 错误: 不兼容的类型: int无法转换为String
        //        String str = a + b + 100; // String 不是基础数据类型,它是引用数据类型
       //                            ^
		System.out.println(str);
	}
}
记住:基础数据类型,小转大,在小的一方的取值范围内,可以自动转换,也叫自动类型转换。大转小,要强转,也叫作强制类型转换。
    
关于拼接:   
class PlusTest 
{
	public static void main(String[] args) 
	{
		int a = 100;
		int b = 200;
		// String str = a + b + 100; // 结果是多少?
		// PlusTest.java:7: 错误: 不兼容的类型: int无法转换为String
        //        String str = a + b + 100; 
        // String 不是基础数据类型,它是引用数据类型,编译时报错
       //                            ^
		//String str = a + b + "100";// 300100
		//String str = "" + a + b + "100"; //结果是多少?100200100
        // 第一步 "" + 100 ---> "100" "100"与100是有本质区别的
        // 第二步 "100" + 200 ---> "100200"
        // 第三步 "100200" + "100" ---> "100200100"
		String str = "100" + a + b;// 结果是多少?100100200
		
		System.out.println(str); 
	}
}
这里有一个java的语法规则:
    赋值语句,x = y 先执行哪边?右边先执行,然后执行左边。
    先执行"=" 右边,在右边又有一个执行顺序,它的顺序是:从左自右执行。运行阶段。
    String str = a + b + 100; 
    String 不是基础数据类型,它是引用数据类型,编译时报错
           编译器先检查等号右边是否构成一个字符串,如果构不成一个字符串,
           那么编译器认为是不兼容的类型,int无法转为String
    String str = a + b + "100";这个编译器会检查等号右边,
           它发现有"+"且其后跟随的是一个字符串,那么这符合字符串的语法,编译通过。
           执行时不会报编译的错误,编译好之后,生成了".class"文件.
           编译通过说明语法上已经没有问题了。
        
关于左值和右值 x = y
        我们说出现在"="左边的叫做左值,右边的叫做右值,即x是左值,y是右值
        我们知道等号右边先执行,为什么?右边要先算出结果,然后给左边赋值。
        那么我们知道了右边一定是一个"值"。那么左边呢?左边是否也是一个"值"呢?
        左边一定是一个"盒子",这个"盒子"需要能够装下右边的"值"。
        在计算机中,"值"一般存放在内存中或者是寄存器中。
        对于我们来说我们不能够直接操作内存,我们操作的是内存的编号。也叫作内存地址。
        所以,左边一定是地址,右边一定是值。
        int a = 100;
        int b = 200;
		int c = a + b;
	    关于上述的赋值语句,我们是这么解读的:
            "="右边是一个整数,其"值"100"="左边是一个变量a,它的类型是intint意味着在内存中有这样一块连续的4Byte
            的内存空间,用来存放整型的数据。这块空间我们不知道在哪里,但它一定存在
            它是由系统分配的,我们无需知道它的具体的地址,我们只给它一个名字
            叫做整型的"盒子"a,有了这两个条件我们就可以将100赋值给a,
            也就是说将100这个"值"可以放入一个容纳得下它的"盒子"中。
            赋值赋值赋值,赋的是"值",我们没有说过这样的概念:赋地址,赋变量?赋值。
		
		a = b;
		      上述语句中,"="右边的是b,b不是一个实实在在的"值",
               这句话对不对?不对!!!!b就是一个实实在在的值,否则,b是什么呢?
               b是装200的盒子吗?这里的b指的是b中存放的内容。
               
class TestAsign 
{
	public static void main(String[] args) 
	{

		int a;
		int b;
		a = b;
/*
	TestAsign.java:8: 错误: 可能尚未初始化变量b
					a = b;
						^
*/
		System.out.println("Hello World!");
	}
}
// TestAsign.java:8: 错误: 可能尚未初始化变量b
变量b尚未初始化,就说明变量b它不是一个值,或者是说它代表不了一个值。
    它只是内存中有一个连续4Byte的内存空间,这个空间怎么赋值给a呢?
    比如:我们去银行取钱,我们拿了个装钱的口袋到银行,按道理说银行应该给我们要取的钞票
    这时候,银行也给你一个等大的口袋。你敢要吗?这是你想要的吗?
  • 关于++运算
++运算,又叫做自加1
class PlusOne01 
{
	public static void main(String[] args) 
	{
		int m = 100;
		m++;
		System.out.println(m);// 101
		int n = 200;
		++n;
		System.out.println(n);// 201
	}
}
结论:
    ① m++++m 的结果是一样的,它们所得的结果都是自加了1class PlusOne01 
{
	public static void main(String[] args) 
	{
		int m = 100;
		int m1 = m++;
		System.out.println(m1);// 100
		System.out.println(m);// 101
		int n = 200;
		int n1 = ++n;
		System.out.println(n1);// 201
        System.out.println(n);// 201
	}
}
结论:(这个结论要记住)
    如果++出现在变量的右边,即 m++,"int m1 = m++;"语句中,先执行赋值语句,然后在执行++运算。也就是说++出现在变量右边的时候,优先级低于赋值运算。它与括号没有什么关系,"int m1 = (m++);"的运算法则还是遵循先赋值再自加。这是规定。
    如果++出现在变量的左边,即++m,在"int m1 = ++m;"语句中,先执行自加运算"++",然后再执行赋值"="运算。

class PlusOne01 
{
	public static void main(String[] args) 
	{
		int m = 100;
		System.out.println(m++);// 100 为什么是这样?
		int n = 200;
		System.out.println(++n);// 201
	}
}
为什么将m++传入到println()函数中,它的值还是100?
    思考:C中的函数可以接受参数的,说明函数一定有形式参数。
    可以想象:"println()"函数一定有个参数。如果该函数没有形参,它能接受m++吗?不能
    我们可以断定,该函数一定有一个参数,这个参数类型是:int类型的。
    那么我们现在还原这个函数的原型:
    [返回值类型--假设是void] 
    void println(int arg){}
    这时候我们将m++这个实际参数传入方法中,它的过程是这样的:
         int m = 100;
		int arg = m++; // 这个地方先赋值,再自加,所以最后arg始终是m的本身100.
		void println(arg){}
		System.out.println(m++);// 100 是这样得来的
补充:
    关于java语句。
    int a = 100; 这是一个语句
        a;
		100;
	这是一个语句吗?不是,它报以下错误:
        	PlusOne01.java:9: 错误: 不是语句
					n;
					^
	但是,m++;++n;这是一个语句。
        
扩展的算术运算符:
        += -= *= /= ^= ....
关于"+="
class PlusEq 
{
	public static void main(String[] args) 
	{
		byte b = 1;
		// b += 1;//这个是否等价于b = b + 1;不等价。它等价于b = (byte)(b+1)
		b = b + 1;
		// PlusEq.java:7: 错误: 不兼容的类型: 从int转换到byte可能会有损失
       //         b = b + 1;
       //             ^
		System.out.println(b);//2
	}
}


class PlusEq 
{
	public static void main(String[] args) 
	{
		byte b = 127;
		// 整数型的字面量都默认为int型,
		// 但是在没有超出byte的取值范围之前,它会做自动类型转换,将其转成byte。
		//b += 1;// ---> b = (byte)128;
		b = 128;//?
		System.out.println(b);//-128 
		
		// b += 1;//这个是否等价于b = b + 1;
		//b = b + 1;
		// PlusEq.java:7: 错误: 不兼容的类型: 从int转换到byte可能会有损失
       //         b = b + 1;
       //             ^
		// System.out.println(b);//2
	}
}

3 逻辑运算符

逻辑运算符有哪些:
    & | ! && || == != <= >=
&: 叫做逻辑与
    (表达式1 & 表达式2)--->boolean值 即 truefalse对于表示来说也是一个boolean表达式
    &的运算结果:
    	true & true ---> true 
    	true & false ---> false
		false & false ---> false
		false & true ---> false
    &&: 短路与
    	true && true ---> true 
    	true && false ---> false
		false && false ---> false
		false && true ---> false
&&& 有什么区别? 
         & 逻辑与 (表达式1 & 表达式2),表达式1要执行,表达式2也要执行。如果表达式1false,表达式2也会被执行。
		&& 逻辑与 (表达式1 && 表达式2),如果表达式1false,表达式2不执行
日常用的较多的是&& 因为效率更高一些,但不代表&不用。如果用&&的写法,我们应该怎样写?把出现false概率更大的表达式写在前面。      
        
  |的运算结果:
    	true | true ---> true 
    	true | false ---> true 
		false | false ---> false
		false |  true ---> true 
    ||: 短路或
    	true || true ---> true 
    	true || false ---> true
		false || false ---> false
		false || true ---> true
int a = 100;
int b = 200;
a > b ---false
    
java新特性,编译和运行一体化了。jdk13出来的新特性
E:\java基础\day02-1>java BooleanTest.java 
false
    
   "+=" ==/=== "+ ="
class AndTest 
{
	public static void main(String[] args) 
	{
		int a = 100;
		int b = 200;
		int c = 300;
		if ((a+b) > c & (c-b) == a++)
		{
			System.out.println("Hello World!");
		}
		/*
		System.out.println(a);// 101
		if ((a+b) > c && (c-b) == a++)
		{
			System.out.println("Hello World!");
		}
		System.out.println(a);// 100
		*/
	}
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值