六、Java修饰符
Java修饰符,主要分一下两类:
访问修饰符
非访问修饰符
修饰符用来定义类、方法或者变量,通常放在语句的最前端;
一些例子:
public class clasName{
//...
}
private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
// 方法体
}
访问控制修饰符/可见性修饰符
用来控制对类、变量、方法和构造方法的访问权限;
默认的,default,在同一包?内可以见(用),不使用修饰符。
私有的,private,在同一类内可见。
公共的,public,所有类可见。
受保护,protected,对对同一包内的类和所有子类可见。
?:类是一个个写好的功能,包是用来包装一大部分的功能。
访问控制和继承
父类中声明为 public 的方法在子类中也必须为 public。
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public。不能声明为 private。
父类中声明为 private 的方法,不能够被继承。
非访问修饰符
static,用来创建类方法和类变量。
final,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract,用来创建抽象类和抽象方法。
synchronized,volatile,主要用于线程的编程。
transient,该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
七、运算符
算数运算符
加+,减-,乘*,除/,取模取余:%,自增:++,自减:--
关系运算符
是否相等:==
是否不相等:!=
大于>,小于=,小于等于<=
关系运算符返回的是布尔值true/false
逻辑运算符
&& 与 都是真返回true,|| 或 有一个是真返回true,! 非 反转逻辑
位移运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型;
位运算符作用在所有的位上,并且按位运算。
假设A=60和B=13,二进制:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
跑一节代码看看:
public class Test {
public static void main(String args[]) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 215 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 215 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
}
}
得到结果如下:
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
赋值运算符
操作符
=
赋值,右边赋值给左边
+=
C + = A 等价于 C = C + A
-=
C - = A 等价于 C = C - A
*=
C * = A 等价于 C = C * A
/=
C / = A 等价于 C = C / A
(%)=
C%= A 等价于 C = C%A
<<=
C << = 2 等价于 C = C << 2
>>=
C >> = 2 等价于 C = C >> 2
&=
C&= 2 等价于 C = C&2
^=
C ^ = 2 等价于 C = C ^ 2
|=
C | = 2 等价于 C = C | 2
条件运算符(三元运算符)
variable x = (expression) ? value1 if true : value2 if false
expression是否为真,真:x=value1;否:x=value2
instanceof 运算符
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:
boolean result = obj instanceof Class
//例子:
String name = 'James';
boolean result = name instanceof String; // 由于name是Strine类型,所以返回真
其中obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
八、运算优先级
从上到下的优先级
其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:
int m = 12;
int n = m << 1 + 2; //结果是96
int n = m << (1 + 2); //结果同样是96,这样更直观
这样书写代码,更方便编写代码,也便于代码的阅读和维护。