Skip to content

变量及运算符

2106字约7分钟

java

2024-10-24

变量及运算符

变量:相当于方程中的未知数。

作用:临时存储一个值。

操作:读/写

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个方法,使用实例变量。

类变量:限制这个变量是独一份

变量的运算

  1. 单目运算

  2. 算术运算

    //算术运算符:  +,-,*,/,%,++,--
  3. 关系运算> < >= <= != == (注意是2个等号)

    关系运算结果 布尔类型(true,false)

    浮点数比较:差值与10E6比较(更加安全,浮点数表示不准确)

  4. 逻辑运算

    与 或 非 异或

    两个操作数必须是布尔类型

    真值表
    输入A输入B非(!A)与(A & B) (A && B)或(A | B) (A || B)异或 (A ^ B)
    TRUETRUEFALSETRUETRUEFALSE
    TRUEFALSEFALSEFALSETRUETRUE
    FALSETRUETRUEFALSETRUETRUE
    FALSEFALSETRUEFALSEFALSEFALSE

    与(&):全1为1,见0为0

    或(|):全0为0,见1为1

    异或(^)全1或全0为0,非全0或全1为1

    & / |与&& / ||的区别:

    1.都可以进行逻辑与运算,运算结果都符合真值表

    2.但是双与(&&)是有短路作用。(短路:能确定最总逻辑运算的结果时,后面的代码将不被运行)

    短路的应用:防止空指针异常(首先判断对象是否存在再判断是否符合条件)

运算分类

image-20210827203036645

总结

变量的分类:

image-20210827201835421

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
*/

自增运算符与其他运算符结合时前++与后++结果不同?

分析:

前++先进行了取值操作然后才对其进行自增操作

而后++先对其进行自增操作然后进行取值操作

吐槽

这里是吐槽部分,内容不限。