定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,而后使用的规则。java
做用域:指它的存在范围,只有在这个范围内,程序代码才能访问它。
变量的生命周期是指从一个变量被建立并分配内存空间开始,到这个变量被销毁并清除其所占用内存空间的过程。code
1)位置:定义在方法中或者在方法中的{}
2)使用:先赋值后使用
3)做用域:定义的方法中或者定义的{}中
4)生命周期:从变量的定义到方法调用结束对象
public void method1() { int a = 0; //局部变量,做用域为整个method01方法; { int b = 0; //局部变量,做用域为所处的代码块; b = a; } b = 20; //编译出错,b不能被访问; }
1)位置:定义方法外,类里面
2)使用:系统会进行默认初始化
3)做用域:做用于整个类
4)生命周期:从对象建立的时候到gc回收内存结束继承
class Test { private int n1=0; private int n2=0; public int add() { int result = n2 + n2; return result; } }
操做符能与相应类型的数据组成表达式,来完成相应的运算。接口
System.out.println(1+2+"a"); //输出3a System.out.println(1+2.0+"a"); //输出3.0a System.out.println(1+2.0+"a"+true); //输出3.0atrue System.out.println("a"+1+2); //输出a12 System.out.println(1+"a"+2); //输出1a2
int a1=12/5; //a1变量的取值为2 int a2=13/5; //a2变量的取值为2 int a3=-12/5; //a3变量的取值为-2 int a4=-13/5; //a4变量的取值为-2 int a5=1/5; //a5变量的取值为0 double a6=-12/5; //a6变量的取值为-2.0 double a7=-12/5.0; //a7变量的取值为-2.4
int a1=1%5; //a1变量的取值为1 int a2=13%5; //a2变量的取值为3 double a3=1%5; //a3变量的取值为1.0 double a4=12%5.1; //a4变量的取值为1.8000000000000007 /整除, 如操做数均为整数,运算结果为商的整数部分 int a1=12/5; //a1变量的取值为2 int a2=13/5; //a2变量的取值为2 int a3=-12/5; //a3变量的取值为-2 int a4=-13/5; //a4变量的取值为-2 int a5=1/5; //a5变量的取值为0 double a6=-12/5; //a6变量的取值为-2.0 double a7=-12/5.0; //a7变量的取值为-2.4
int a1=1%5; //a1变量的取值为1 int a2=13%5; //a2变量的取值为3 double a3=1%5; //a3变量的取值为1.0 double a4=12%5.1; //a4变量的取值为1.8000000000000007
= : 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会向数据类型高的类型转换
>大于 >= 大于等于 < 小于 <= 小于等于 以上操做符只适用于整数类型和浮点数类型; int a=1,b=1; double d=1.0; boolean result1 = a>b; //result1的值为false; boolean result2 = a<b; //result2的值为false; boolean result3 = a>=d; //result3的值为true; boolean result4 = a<=b; //result4的值为true;
#### instanceof生命周期
判断一个引用类型所引用的对象是不是一个类的实例。该操做符左边是一个对象,右边是一个类名或接口名。形式以下:内存
如:String str="hello" System.out.println(str instanceof String); System.out.println(str instanceof Object); System.out.println(str instanceof Student); //false
java.lang.Object是全部类的父类, 每个类都会默认继承Object
子类是一个父类 是is a的关系作用域
== 等于
!= 不等于
既能够是基本类型,也能够是引用类型:
基本数据类型比较是真正的数值
引用类型比较的是地址,若是要比较引用类型真正的数据使用equals字符串
如:int a=1,b=1; System.out.println(a==b); //输出true; 如:String s1="hello"; String s2="hello"; String s3=new String("hello"); String s4=new String("hello"); System.out.println(s1==s2); //true System.out.println(s3==s4); //false System.out.println(s1==s3); //false System.out.println(s3.equals(s4)); //true
算术右移位运算,也称作带符号右移位运算。最高为补符号位。 > 逻辑右移位运算,也称为不带符号右移位运算。 > << 左移位运算,也称为不带符号左移位运算。
&: 与运算,运算规则为: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===>输出相应的二进制
短路操做符: 若是能根据操做左边的布尔表达式就能推算出整个表达式的布尔值,将不执行操做符右边的布尔表达式; &&:左边的布尔表达式的值为false, 整个表达式值确定为false, 此时会忽略执行右边的布尔表达式。 ||:左边的布尔表达式的值为true, 整个表达式值确定为true, 此时会忽略执行右边的布尔表达式。 if(条件1&&条件2){} if条件1为假,不会执行条件2 if条件1为真,会执行条件2 if(条件1||条件2){} if条件1为真,不会执行条件2 if条件1为假,会执行条件2
布尔表达式 ? 表达式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);
隐式的数据类型转换:精度小的数据给精度大的数据 强制(显式)的数据类型转换:(type)精度大的数据给精度小的数据 System.out.println((int)(char)(byte)-1); 数据类型在转换的时候注意: a)若是将精度小的数据转为精度大的数据时。 若是转以前是有符号数,在前面补符号位 若是转以前是无符号数,在前面补0 b)若是将精度大的数据转为精度小的数据时。 从低位窃取位数
隐式的数据类型转换:子类转换父类 强制(显式)的数据类型转换:父类转换子类 String str="hello"; Object o=str; String str2=(String)o;