java学习笔记(基础篇)—变量与表达式
一:局部变量和实例变量
定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,然后使用的规则。
作用域:指它的存在范围,只有在这个范围内,程序代码才能访问它。 变量的生命周期是指从一个变量被创建并分配内存空间开始,到这个变量被销毁并清除其所占用内存空间的过程。
局部变量(参数变量也可以看成是局部变量):
1)位置:定义在方法中或者在方法中的{} 2)使用:先赋值后使用 3)作用域:定义的方法中或者定义的{}中 4)生命周期:从变量的定义到方法调用结束
局部变量的例子:
public void method1() {
int a
= 0;
{ int b
= 0;
b
= a
;
}
b
= 20;
}
实例变量:
1)位置:定义方法外,类里面 2)使用:系统会进行默认初始化 3)作用域:作用于整个类 4)生命周期:从对象创建的时候到gc回收内存结束
实例变量的例子:
class Test {
private int n1
=0;
private int n2
=0;
public int add() {
int result
= n2
+ n2
;
return result
;
}
}
二:操作符:
操作符能与相应类型的数据组成表达式,来完成相应的运算。
a)数学运算操作符
+数据类型值相加或字符串连接;
System
.out
.println(1+2+"a");
System
.out
.println(1+2.0+"a");
System
.out
.println(1+2.0+"a"+true);
System
.out
.println("a"+1+2);
System
.out
.println(1+"a"+2);
/整除, 如操作数均为整数,运算结果为商的整数部分
int a1
=12/5;
int a2
=13/5;
int a3
=-12/5;
int a4
=-13/5;
int a5
=1/5;
double a6
=-12/5;
double a7
=-12/5.0;
%取模操作符, 如操作数均为整数,运算结果为商的整数部分
int a1
=1%5;
int a2
=13%5;
double a3
=1%5;
double a4
=12%5.1;
int a1
=12/5;
int a2
=13/5;
int a3
=-12/5;
int a4
=-13/5;
int a5
=1/5;
double a6
=-12/5;
double a7
=-12/5.0;
%取模操作符, 如操作数均为整数,运算结果为商的整数部分
int a1
=1%5;
int a2
=13%5;
double a3
=1%5;
double a4
=12%5.1;
b) 赋值操作符:
= : int x
=0,i
=1,j
=1;
*=: 这里的
"*="由操作符
"*"和
"="复合而成,它等价于 a
=a
*b
,这种 复合操作符能使程序变得更加简洁。
/=: a
/=b 等价于 a
=a
/b
;
%=: a
%=b 等价于 a
=a
%b
;
注意:
+=和
+的区别
如
:short a
=0;
int b
=123456;
a
+=b
;和a
=a
+b
;的区别
:
+=系统会进行隐式的数据类型转换,向
=左边的数据类型进行转换。
a
+b会向数据类型高的类型转换
c) 比较操作符
>大于
>= 大于等于
< 小于
<= 小于等于
以上操作符只适用于整数类型和浮点数类型;
int a
=1,b
=1;
double d
=1.0;
boolean result1
= a
>b
;
boolean result2
= a
<b
;
boolean result3
= a
>=d
;
boolean result4
= a
<=b
;
instanceof:
判断一个引用类型所引用的对象是否是一个类的实例。该操作符左边是一个对象,右边是一个类名或接口名。形式如下:
如:String str
="hello"
System
.out
.println(str
instanceof String);
System
.out
.println(str
instanceof Object);
System
.out
.println(str
instanceof Student);
java.lang.Object是所有类的父类, 每一个类都会默认继承Object 子类是一个父类 是is a的关系
d)相等操作符
== 等于 != 不等于 既可以是基本类型,也可以是引用类型: 基本数据类型比较是真正的数值 引用类型比较的是地址,如果要比较引用类型真正的数据使用equals
如:
int a
=1,b
=1;
System
.out
.println(a
==b
);
如:String s1
="hello";
String s2
="hello";
String s3
=new String("hello");
String s4
=new String("hello");
System
.out
.println(s1
==s2
);
System
.out
.println(s3
==s4
);
System
.out
.println(s1
==s3
);
System
.out
.println(s3
.equals(s4
));
e) 移位操作符,针对二进制操作
算术右移位运算,也称做带符号右移位运算。最高为补符号位。
> 逻辑右移位运算,也称为不带符号右移位运算。
> << 左移位运算,也称为不带符号左移位运算。
f) 位运算操作符
&: 与运算,运算规则为:
1&1->1, 1&0->0, 0&1->0, 0&0->0;
|: 或运算,运算规则为:
1|1->1, 1|0->1, 0|1->1, 0|0->0;
^: 异或运算,运算规则为:
1^1->0, 1^0->1, 0^1->1, 0^0->0;
两个值相同为
0,不同为
1;
~ : 取反运算
, ~1->0, ~0->1;
例如:
8>>2====>8/2^2=2
8:0000...00001000
0000.........10 ====>2
8>>>3=====>8/2^3=1
8:0000...00001000
00000000.000001=====>1
8<<2======>8*2^2=32
8:0000...00001000
000000000100000======>32
1&1=1 1&0=0 0&0=0
1|1=1 1|0=1 0|0=0
1^1=0 1^0=1 0^0=0
~1=0
~0=1
8&2=0 8|2=10 8^2=10
~8=
~2=
1010
10===>第三位置
1===>14
10===>第二位清
0===>8
10===>第一位置反
===>11
10===>输出相应的二进制
f) 逻辑操作符
短路操作符
: 如果能根据操作左边的布尔表达式就能推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式;
&&:左边的布尔表达式的值为
false, 整个表达式值肯定为
false,
此时会忽略执行右边的布尔表达式。
||:左边的布尔表达式的值为
true, 整个表达式值肯定为
true,
此时会忽略执行右边的布尔表达式。
if(条件
1&&条件
2){}
if条件
1为假,不会执行条件
2
if条件
1为真,会执行条件
2
if(条件
1||条件
2){}
if条件
1为真,不会执行条件
2
if条件
1为假,会执行条件
2
g) 条件操作符
布尔表达式
? 表达式
1 : 表达式
2
如果布尔表达式的值为
true,就返回表达式
1的值
,否则返回表达式
2的值。
int score
= 61;
String result
= score
>=60?"及格":"不及格";
h
)++,--
前
++与后
++
前
--与后
--
int a
=10;
b
=++a
=====>a
=11,b
=11,先计算,后赋值
b
=a
++ =====>a
=11,b
=10,先赋值,后计算
System
.out
.println("a:"+a
+" b:"+b
);
三.数据类型的转换
1)基本数据类型转换
隐式的数据类型转换:精度小的数据给精度大的数据
强制(显式)的数据类型转换:
(type
)精度大的数据给精度小的数据
System
.out
.println((int)(char)(byte)-1);
数据类型在转换的时候注意:
a
)如果将精度小的数据转为精度大的数据时。
如果转之前是有符号数,在前面补符号位
如果转之前是无符号数,在前面补
0
b
)如果将精度大的数据转为精度小的数据时。
从低位窃取位数
2)引用数据类型转换
隐式的数据类型转换:子类转换父类
强制(显式)的数据类型转换:父类转换子类
String str
="hello";
Object o
=str
;
String str2
=(String
)o
;