外观
变量及运算符
变量及运算符
变量:相当于方程中的未知数。
作用:临时存储一个值。
操作:读/写
Eclipse中:
// TODO 待办列表
快捷键:
ctrl+d 删除一行。
ctrl+F11 运行。
ctrl+/ 注释当前行(有?的那个)
成员变量
1.声明在类体之内,方法之外。
2.作用范围:与声明位置无关(要求声明在类最前面)整个类中
3.类体中的所有成员(有默认值,数值型为0)
分类:
1.类变量: 类和所有对象共享的,独一份的变量。(static)修饰
2.实例变量:对象特有的,每个对象都不一样。
局部变量
1.声明在代码块内(大括号之间)。
2.作用范围:代码块内,从声明位置到代码块结束。
3.无默认值,需要初始化。
分类:
1.声明在方法中的局部变量。
2.形式参数。
3.块变量(声明在循环结构中)作用于循环中,其范围小于局部变量(方法中声明的)。
变量的操作
1.定义:[权限修饰符] [static / final] 数据类型 变量名[=初始值];
方括号内容可选,当使用static修饰时为类变量使用final修饰表示此变量值不可改变
2.初始化:
局部变量必须初始化
成员变量有默认值。
3.读写(赋值)
局部变量的作用:
1.临时存储(重复利用)
2.空间复用(在多个方法中)
3.时间复用(一个方法中多重使用)
最小知识原则(迪米特法则)
1.使用最小范围存储
优点:安全,效率高。
一个代码块不能满足的范围可适当扩大范围。
成员变量:当变量的预期作用范围超过了1个方法,使用实例变量。
类变量:限制这个变量是独一份。
变量的运算
单目运算
算术运算
//算术运算符: +,-,*,/,%,++,--
关系运算> < >= <= != == (注意是2个等号)
关系运算结果 布尔类型(true,false)
浮点数比较:差值与10E6比较(更加安全,浮点数表示不准确)
逻辑运算
与 或 非 异或
两个操作数必须是布尔类型
真值表 输入A 输入B 非(!A) 与(A & B) (A && B) 或(A | B) (A || B) 异或 (A ^ B) TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE 与(&):全1为1,见0为0
或(|):全0为0,见1为1
异或(^)全1或全0为0,非全0或全1为1
& / |与&& / ||的区别:
1.都可以进行逻辑与运算,运算结果都符合真值表
2.但是双与(&&)是有短路作用。(短路:能确定最总逻辑运算的结果时,后面的代码将不被运行)
短路的应用:防止空指针异常(首先判断对象是否存在再判断是否符合条件)
运算分类
总结
变量的分类:
Java中明确规定: 1、如果是引用型的,比如:String,还有类对象,他们的默认值都是:null; 2、而如果是值类型:double,int,long,float,char等等,他们都是:0; 还有一个,boolean,默认值是:false.
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
**注意1:**如果在一个方法中定义一个变量,不会给其分配默认值,就必须我们来给他初始化,否则将得到编译错误的提示。
注意2:
i++是先让i的值+1;然后在运算,++i是先运算;然后再让i的值+1.
以下列的Java代码为例:
{int i=0; int j=i++;}
{int i=0; int z=++i;}
运算过后,j=0;表明i++是指先把i赋值给j然后再自身加1;运算过后,z=1;表明++i是指先自身加1后赋值给z;总之++号在后面的意思是先赋值然后自身加1;++在前面的是先自身加1后赋值。
“++”是java单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。自增运算符的作用是使变量的值增1。
放在操作元前面的自增运算符,会先将变量的值加1,然后再使该变量参与表达式的运算。放在操作元后面的自增运算符,会先使变量参与表达式的运算,然后再将该变量的值加1。
扩展:
1、比较运算符
比较运算符属于二元运算符,用于程序中的变量之间,变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。当运算符对应的关系成立时,运算的结果为true,否则为false。比较运算符共有6个,通常作为判断的依据用于条件语句中。
2、赋值运算符
赋值运算符以符号“=”表示,它是一个二元运算符(对两个操作数作处理),其功能是将右方操作数所含的值赋给左方的操作数。
代码块
Java中代码块指的是用 {} 包围的代码集合,分为4种:普通代码块,静态代码块,同步代码块,构造代码块
普通代码块:
定义:在方法、循环、判断等语句中出现的代码块
修饰:只能用标签修饰
位置:普通代码块可以出现在方法体内除"()"外的任何地方,包括 方法体,代码块中(即可以嵌套在代码块中)
执行:普通代码依赖方法的执行而执行,按照正常的先后顺序执行
作用:将多行代码封装在一起,实现特定的功能。(有点废话)
注意:无
静态代码块
定义:在类中定义使用static修饰的代码块
修饰:使用static修饰
位置:它不能出现在方法体或者代码块内
执行:在加载类时会先执行静态代码块,且只执行一次,如果有多个静态代码块则按照先后顺序执行
作用:一般用于静态变量的初始化,创建对象前的环境的加载
注意:静态代码块中不能直接访问非静态变量和方法,需要通过类的实例对象来访问
同步代码块
定义:可以简单地认为同步代码块是使用 synchronized 修饰的普通代码块
位置:同普通代码块
执行:同普通代码块
作用:用于多线程环境的同步保护
注意:注意同步代码块使用不当可能会造成“死锁”
构造代码块
定义:在类中定义且没有加任何修饰的代码块
位置:它不能出现在方法体或者其他代码块内
执行:依赖于构造函数的调用而执行
作用:初始化实例变量和实例环境,一般用于提取类构造函数中的公共代码
注意:构造代码块不是在构造函数之前执行的!!!编译器在编译的时候会把构造代码块插入到每个构造函数的最前面!!
构造代码块随着构造函数的执行而执行!!
如果某个构造函数调用了其他的构造函数,那么构造代码块不会插入到该构造函数中以免构造代码块执行多次!
问题
这里书写今日所遇到问题及解决方法 不要忽略小问题,小问题也要记下来。( 勿以善小而不为 )
//前++
int i=10;
System.out.println(i++);
System.out.println(i);
/*输出结果为:
10
11
与预期结果不一样???
*/
//后++
int i=10;
System.out.println(i++);
System.out.println(i);
/*输出结果为:
11
11
*/
自增运算符与其他运算符结合时前++与后++结果不同?
分析:
前++先进行了取值操作然后才对其进行自增操作
而后++先对其进行自增操作然后进行取值操作
吐槽
这里是吐槽部分,内容不限。