一、变量类型
1、Java 局部变量:
1)局部变量声明在方法、构造方法或者语句块中;被执行的时候创建,当它们执行完成后,变量将会被销毁。
2)局部变量只在声明它的方法、构造方法或者语句块中可见;JVM中分配在栈上。
3)局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
2、成员变量(实例变量)
1)实例变量声明在一个类中,但在方法、构造方法和语句块之外;当一个对象被实例化之后,每个实例变量的值就跟着确定;可以声明在使用前或者使用后。
2)实例变量在对象创建的时候创建,在对象被销毁的时候销毁;访问修饰符可以修饰实例变量。
3)实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息。
4)实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见。
5)实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定。
6)实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
3、类变量(静态变量)
1)类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
2)无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
3)静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
4)静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
5)静态变量在第一次被访问时创建,在程序结束时销毁。
6)与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
7)默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
8)静态变量可以通过:ClassName.VariableName的方式访问。
9)类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
二、运算符
运算符 | 表示 | 含义 |
---|---|---|
算术运算符 | +-*/ | 基本运算 |
算术运算符 | % | 取余数,求模,算整除 |
算术运算符 | ++ - - | 自增 自减 |
比较运算符 | == | 相等比较 |
比较运算符 | != | 不等比较 |
连接运算符 | + | 字符串连接 “abc”+”xyz”=”abcxyz” |
逻辑运算符 | && & | 逻辑与(短路与),两边同为真结果才为真 |
逻辑运算符 | || | | 逻辑或(短路或),两边只要有一个真结果就是真 |
逻辑运算符 | ! | 非,非真是假,非假是真 |
三元运算符 | c ? x : y | 三项运算 c?x:y c是真取返回x,是假返回y |
赋值运算符 | = | 赋值运算 |
赋值运算符 | +=、-=、*=、/= | 复合的赋值运算,a+=2; 等价于 a=a+2 写法简洁 |
优先执行 | ( )小括号 | 小括号中的先执行 |
x+y+z = 按顺序相加x+y+z | ||
x+(y+z)= 优先括号内的先执行y+z+x |
三、转义字符
Java语言支持一些特殊的转义字符序列。
符号 | 字符含义 |
---|---|
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\f | 换页符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字符 (0x20) |
\s | 字符串 |
\t | 制表符 |
" | 双引号 |
’ | 单引号 |
\ | 反斜杠 |
\ddd | 八进制字符 (ddd) |
\uxxxx | 16进制Unicode字符 (xxxx) |
四、包装类型
1、包装类:
序号 | 类型名称 | 基本类型 | 包装类型 | 父类 |
---|---|---|---|---|
1 | 字节型 | byte | Byte | Number |
2 | 短整型 | short | Short | Number |
3 | 整型 | int | Integer | Number |
4 | 长整型 | long | Long | Number |
5 | 单精度浮点型 | float | Float | Number |
6 | 双精度浮点型 | double | Double | Number |
7 | 字符型 | char | Character | Object |
8 | 布尔型 | boolean | Boolean | Object |
2、装箱拆箱
1)装箱:将基本数据类型封装为包装类对象
Integer i = 10; //装箱,10整数,i是包装类型
Integer i = new Integer(10); //编译后
2)拆箱:将包装类中包装的基本数据类型数据取出
Integer i = 10; //自动装箱
int j = i; //自动拆箱
int j = i.intValue(); //编译后
注:JDK1.5之后提供自动装箱拆箱,我们使用时可以互相赋值,代码简洁。
五、类型转换
1、小类型的变量赋值给大类型,自动转换。
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级。
低 --------------------------------------------------------> 高
byte,short,char—> int —> long—> float —> double
2、大类型的变量赋值给小类型,强制转换。
语法:在变量前添加要转换的类型
int int = -1;
short s = (short) i;
注:
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度,例如:
int i =128;
byte b = (byte)i;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。 - 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
(int)-45.89f == -45
面试题:
(答案见下一篇博客面试题部分)
1、(单选题)在字符串前面加上( )符号,则字符串中的转义字符将不被处理。
A.@
B.\
C.#
D.%
2、(单选题)下列程序的运行结果正确的是
int a = 5;
int b = ++a;
System.out.println(“a=”+a);
System.out.println(“b=”+b);
A.a=5,b=5
B.a=6,b=5
C.a=5,b=6
D.a=6,b=6
3、(单选题)编译运行以下程序后,关于输出结果的说明正确的是( )
publicclass Conditional{
publicstaticvoid main(String args[]){
int x=4;
System.out.println("value is "+ ((x>4) ? 99.9 : 9));
}
}
A.输出结果为:value is 99.99
B.输出结果为:value is 9
C.输出结果为:value is 9.0
D.编译错误
上篇面试题答案:
1.AC
2.ABCD
3.BCD
有一天无意中刷到的,就保存下来了。好可爱的小喵咪,花臂,大眼睛,还是一公一母,以后有条件了也想养。六一那天在学校里收了一只被人遗弃的小喵咪,毕业后留给学弟养了,现在也不知咋样了,国庆回学校看看。