06.基础语法(Java修饰符、运算符、运算符的优先级)

六、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) {
   // 方法体
}

访问控制修饰符/可见性修饰符
用来控制对类、变量、方法和构造方法的访问权限;

  1. 默认的,default,在同一包?内可以见(用),不使用修饰符。
  2. 私有的,private,在同一类内可见。
  3. 公共的,public,所有类可见。
  4. 受保护,protected,对对同一包内的类和所有子类可见。

?:类是一个个写好的功能,包是用来包装一大部分的功能。

访问控制和继承

  • 父类中声明为 public 的方法在子类中也必须为 public。
  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public。不能声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。

非访问修饰符

  1. static,用来创建类方法和类变量。
  2. final,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  3. abstract,用来创建抽象类和抽象方法。
  4. synchronized,volatile,主要用于线程的编程。
  5. 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,这样更直观

这样书写代码,更方便编写代码,也便于代码的阅读和维护。

posted @ 2020-12-19 15:32  bigezero  阅读(79)  评论(0)    收藏  举报