一、运算符
算数运算符:就是数学中常见的+, ,-, *, /,%和特殊一点的++,--。不同类型的运算会以最大类型作为输出类型。++,--则是自身进行+1和-1,注意一点的是i++是操作i结束后再+1,++i则是先将i进行+1在对i进行操作。
public static void main(String[] args) {
long a = 121212121212L;
int b = 123;
short c = 10;
byte d = 8;
int i = 0;
int j = 0;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
System.out.println(i++);//0
System.out.println(++j);//1
}
赋值运算符:=。注意x=1是把1赋值给x,x==1是x与1相等,是将1和x进行比较。
int a=b=c=100;//连续赋值
关系运算符:>,<,>=,<=,==,!=这些数学常见的运算符和特殊一点的instanceof,instanceof用来比较是否有父子关系。关系运算符返回的结果为boolean值。代码例子的前提是我先定义了父类Person和子类Student,Teacher。Object是Java自定义的大类。
// Object > Person > Student
// Object > Person > Teacher
// Object > String
Object object = new Student();
System.out.println(object instanceof Student);//true
System.out.println(object instanceof Person);//true
System.out.println(object instanceof Object);//true
System.out.println(object instanceof Teacher);//false 另一条线 与Student无关
System.out.println(object instanceof String);//false
逻辑运算符:&&,||,!与或非。&&都真则true,一假则false;||一个为真则true;!运算是把输出的Boolean值转换,不是把&&和||转换。短路运算是当前面的已经可以得出结果了,就不会在往后走了,如例中的c输出的是5而不是6
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a&&b));
System.out.println("a || b:"+(a||b));
System.out.println("! (a && b):"+!(a&&b));
//短路运算
int c = 5;
boolean d = (c<4)&&(++c<4);
System.out.println(d);//false
System.out.println(c);//5
}
位运算符:&,|,^,~,>>,<<。与,或,非,,取反,右移,左移
/*
* A = 0011 1100
* B = 0000 1101
* A&B = 0000 1100 都1为1,其余全0
* A|B = 0011 1101 都0为0,其余全1
* A^B = 0011 0001 同0异1
* ~B = 1111 0010 取反
*
* 2*8 = 16 2*2*2*2
* << >>箭头指哪往哪移
* << *2
* >> /2
* */
System.out.println(2<<3);//2*8
条件运算符(三元运算符):x ? y:z 判断x,如果为true输出y,false输出z
扩展运算符:+=,-=,*=,/=。a+=b可以近似看成a=a+b。使用扩展运算符时,变量在参与运算时会把结果强制转换为当前变量的类型,最终都不会改变运算的结果类型,假设前面的变量是byte类型,那么后面的表达式运算之后的结果还是byte类型。所以实际上i *= 0.1等同于:i = (int)(i * 0.1);使用上要谨慎,不然容易造成精度损失。
int a = 10;
int b = 20;
int i = 1;
a+=b;
i *= 0.1;
System.out.println(a);//30
System.out.println(i);//0
二、包机制
一般利用公司域名倒置作为包名,命名上同一个包内要防止命名冲突,如果要使用某个包内的成员则需使用import来导入。java.lang是JDK自带的包下的类,在使用的时候不用导入,非java.lang包下的类在不同包下使用的时候都需要进行导入,如果在同一个包下,就不用导入了。导入语句要写在package的下面不能反过来。
导入的语法:import 包名.类名 ;
import java.io.IOException;