一、运算符
算数运算符:就是数学中常见的+, ,-, *, /,%和特殊一点的++,--。不同类型的运算会以最大类型作为输出类型。++,--则是自身进行+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;