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 $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;
System.out.println(str);
}
}
记住:基础数据类型,小转大,在小的一方的取值范围内,可以自动转换,也叫自动类型转换。大转小,要强转,也叫作强制类型转换。
关于拼接:
class PlusTest
{
public static void main(String[] args)
{
int a = 100;
int b = 200;
String str = "100" + a + b;
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,它的类型是int,
int意味着在内存中有这样一块连续的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;
System.out.println("Hello World!");
}
}
变量b尚未初始化,就说明变量b它不是一个值,或者是说它代表不了一个值。
它只是内存中有一个连续4Byte的内存空间,这个空间怎么赋值给a呢?
比如:我们去银行取钱,我们拿了个装钱的口袋到银行,按道理说银行应该给我们要取的钞票
这时候,银行也给你一个等大的口袋。你敢要吗?这是你想要的吗?
++运算,又叫做自加1
class PlusOne01
{
public static void main(String[] args)
{
int m = 100;
m++;
System.out.println(m);
int n = 200;
++n;
System.out.println(n);
}
}
结论:
① m++ 和 ++m 的结果是一样的,它们所得的结果都是自加了1。
class PlusOne01
{
public static void main(String[] args)
{
int m = 100;
int m1 = m++;
System.out.println(m1);
System.out.println(m);
int n = 200;
int n1 = ++n;
System.out.println(n1);
System.out.println(n);
}
}
结论:(这个结论要记住)
如果++出现在变量的右边,即 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++);
int n = 200;
System.out.println(++n);
}
}
为什么将m++传入到println()函数中,它的值还是100?
思考:C中的函数可以接受参数的,说明函数一定有形式参数。
可以想象:"println()"函数一定有个参数。如果该函数没有形参,它能接受m++吗?不能
我们可以断定,该函数一定有一个参数,这个参数类型是:int类型的。
那么我们现在还原这个函数的原型:
[返回值类型--假设是void]
void println(int arg){}
这时候我们将m++这个实际参数传入方法中,它的过程是这样的:
int m = 100;
int arg = m++;
void println(arg){}
System.out.println(m++);
补充:
关于java语句。
int a = 100; 这是一个语句
a;
100;
这是一个语句吗?不是,它报以下错误:
PlusOne01.java:9: 错误: 不是语句
n;
^
但是,m++;++n;这是一个语句。
扩展的算术运算符:
+= -= *= /= ^= ....
关于"+="
class PlusEq
{
public static void main(String[] args)
{
byte b = 1;
b = b + 1;
System.out.println(b);
}
}
class PlusEq
{
public static void main(String[] args)
{
byte b = 127;
b = 128;
System.out.println(b);
}
}
3 逻辑运算符
逻辑运算符有哪些:
& | ! && || == != <= >=
&: 叫做逻辑与
(表达式1 & 表达式2)--->boolean值 即 true和false对于表示来说也是一个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也要执行。如果表达式1位false,表达式2也会被执行。
&& 逻辑与 (表达式1 && 表达式2),如果表达式1为false,表达式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!");
}
}
}