------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、JAVA的数据类型
1)整型
byte 1B 8位 -128到127
short 2B 16位 -2^15到(2^15)-1
int 4B 32位 -2^31到(2^31)-1
long 8B 64位 -2^63到(2^63)-1
2)浮点类型
float 4B 32位 double 8B 64位
3) 字符类型
char 2B 16位
4)布尔类型 1B boolean false / true
引用数据类型:类、接口、数组
引用类型 变量名 = new 引用类型名(参数) //new 后面跟的一般都是类的构造器
成员:写在类体口号里面
需要注意的问题:
1、Java中的自动类型转换
正向过程:从低字节到高字节可以自动转换 byte--->short--->int--->long--->float--->double
逆向过程:从高字节到低字节用强制类型转换
例:int a = (int) 5.643 注:你想转换将丢失精度
2、boolean: 只有true和false
3、char:Java中用"\u四位十六进制的数字(即使在注释中出现\u 后面如果跟的不是4个数字也会报错)表示将字符转换成对应的unicode编码,字符类型要用单引号扩起来。
4、默认浮点类型为double, float数据类型有一个后缀为"f"或"F";long类型有一个后缀为"l"或"L"。
自动类型提升:
byte a = 1 ; byte b = 2 ;
a = a+b ; //编译出错,自动类型提升为int
a+ = b ; //自加没有自动类型提升问题
类型自动提升规律:
a和b作某种运算;
a和b中有double,结果就是double;
a和b中有float,结果就是float;
a和b中有long,结果就是long;
除此之外,结果都是int
把高字节转成低字节,需要作强转 byte c = (byte) a+b ;
二、JAVA的运算符
1)算术运算符:
单目:+(取正) -(取负) ++(自增1) --(自减1)
双目:+ - * / %(取余)
三目:a>b?true:false说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个运算符包括一个关系运算符(可以是">""<""!="等等),一个"?",一个":",冒号前后需要有两个表达式或者是值或者是对象。
(2)关系运算:
等于符号:==
不等于符号: !=
大于符号:>
小于符号:<
大于等于符号: >=
小于等于符号: < =
(3)位运算符 逻辑运算符:
位运算符 与(&)、非(~)、或(|)、异或(^)
&:当两边操作数的位同时为1时,结果为1,否则为0.如1100&1010=1000
~:0变1,1变0
| :当两边操作数的位有一边为1时,结果为1,否则为0.如1100|1010=1110
^:两边的位不同时,结果为1,否则为0.如1100^1010=0110 逻辑运算符 与(&&)、非(!)、或(||)
(4)赋值运算符:
= += -= *= /= %= &= ^= |= <<= >>=
(5)instanceof运算符:
该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算符运算结果是true,否则是false。
运算符优先级:
按优先级从高到低排列如下:[]、 ( )、 ++、--、 !、 ~、 instanceof、 *、 /、 %、 +、 -、<<、 >>、 >>>、 <>、 < 、=、 >、 \、 ==、 !=、 &、^、& &、 ||、 ? :、=
说说&和&&的区别:
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
三、JAVA的变量
局部变量:不是声明在类体括号里面的变量。
(1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值。
(2)作用范围:定义开始到定义它的代码块结束。
(3)同一范围内,不允许2个局部变量命名冲突。
参数传递时,简单类型进行值转递(参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)。
静态变量和实例变量的区别?
语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
public class VariantTest{
public static int staticVar= 0;
public int instanceVar = 0;
public VariantTest(){
staticVar++;
instanceVar++;
System.out.println(“staticVar=” + staticVar +”,instanceVar=” + instanceVar);
}
}
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。
public class Temp {
int t; //实例变量
public static voidmain(String[] args){
int t=1; //局部变量
System.out.println(t); //打印局部变量
Temp a= new Temp(); //创建实例
System.out.println(a.t); //通过实例访问实例变量
}
}
结果为: 1 0 (成员变量具有缺省值 而局部变量则没有)
把代码改为:
public class Temp {
static int t; //类变量
public static voidmain(String[] args) {
System.out.println(t); //打印类变量
int t=1; //局部变量
System.out.println(t); //打印局部变量
Temp a= new Temp(); //创建实例
System.out.println(a.t); //通过实例访问实例变量
}
}
结果则为:0 1 0
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------