Java
javaSE
1. 获取参数类型2. 参数类型转换3. / 和 % ,++ , += , -= , /= , %= , 位运算
(1). / 和 %(2). ++ 和 -- 和 其他 += -=(3)位运算 << >> >>> & | ^ ~ 4. 判断实例与类 instanceof5. 二维数组 Bug
1. java.lang.NumberFormatException2. java.lang.StringIndexOutOfBoundsException3. java.lang.ArrayIndexOutOfBoundsException4. java.lang.NullPointerException
Java javaSE 1. 获取参数类型 该参数.getClass().toString();
// 获取数据类型
public static String getType(Object a){
return a.getClass().toString();
}
默认的整型是int,浮点型是double
getType(1); // class java.lang.Integer 即 int getType(1.5); // class java.lang.Double 即double long a = 1; getType(a+1); // 是 class java.lang.Long 即 当 两个number类型 相加 时 结果为范围大的那个类型 char a= 'a'; getType(a+1); // class java.lang.Integer 即 当 字符 和 number 类型计算时,结果为int,这里的字符使用 ascill计算 String a = "a"; getType(a+1); // class java.lang.String 即 , 字符串相加 必为 字符串2. 参数类型转换
转换为整型时,可以通过(int) 转换非字符(包括字符串)和 boolean的其他类型 或 通过 Integer.parseInt()转换字符串 ,可以通过设置三元运算符
int m;
char d = 'a';
m = (int )d; //97 ascill 码
String e = "123";
m = Integer.parseInt(e); // 字符串转换,但其内必须为数字,如果为字符串并不会转换为acsill码
boolean n = true;
m = n ? 1 : 0 ; // 这里判断 ?左侧为true ,则返回 1,否则为0
3. / 和 % ,++ , += , -= , /= , %= , 位运算
(1). / 和 %
共有n位 /10^m 获取前n-m位 %10^m 获取后m位
int a = 123456789; // 9位
int m ; // 获取后几位
int n; // 获取前几位
// Math.pow(x,y)是math中的方法, 指的是 x 的 y 次方
n = (int) (a / Math.pow(10,2 )); // 获取9-2位 得到1234567
m = (int) (a % Math.pow(10,2)); // 获取后两位 得到89
(2). ++ 和 – 和 其他 += -= ++ 自增 1 , 在使用 ++ 时 ,不会像 + 1 改变 其类型
– 自减1 ,其他同上
+=10 自增10
int a = 0; a++; //这里结束就是a+1了 System.out.println(a); // a = 1了 a = 0; System.out.println(a++); // 这里 a = 0 , 然后使用 a 的值,比如这里是输出,然后给a+1 System.out.println(++a); // 这里 a = 1,然后 a+1 ,然后使用 a 的值,这里是输出 a = 0; System.out.println(a++ + ++a); // 这里先进行 ++a ,a=1 再进行a++ ,所以 = 2 a= 2; System.out.println(a-- + --a);// 这里先进行 --a , a = 1 再进行a-- ,所以 = 2 int a =0; System.out.println(++a + --a); // 当 有加有减时,从左到右(3)位运算 << >> >>> & | ^ ~
// << 是二进制左移 3<<2 (3二进制左移两位) = 3 * 2 * 2 = 12 // >> 是二进制右移 3>>1 (3二进制右移一位) = 3 / 2 = 1; // >>> 是 二进制无符号右移 3 >>> 1 = 1 // 无<<< // & 是与运算 6 & 3 = 2 比较二进制, 0 1为 0 只有1 1 为1 // | 是 或运算 比较二进制, 只有 00 为 0 // ^ 是异或 二进制 00 11 相同为 0 不同为1 // ~ 取反 按二进制补码各位取反4. 判断实例与类 instanceof
System.out.println("引用对象" instanceof String); // instanceof 前是类的实例化,后是类,判断是否是这 个类的实例化
eg、 有一个User类,通过new 一个user对象实例化,可以通过 返回的值判断
User user = new User();
System.out.println(user instanceof User); // 这里始终为true
5. 二维数组
//使用
String [][] string = new String[3][5]; //3行5列的二维数组
String [][] string = {{"a","b","c"},{"a"},{"b"}}; // 2行3列的二维数组
String [][] string = new String[3][]; //3行 但不确定几列。 列为空(这里直接输出会报空指针异常)
string[1] = new String[5]; // 设置第一行的数组
Bug
1. java.lang.NumberFormatException
有参数类型错误
String e = "f"; m = Integer.parseInt(e); // 这里 字符f 不能被转换2. java.lang.StringIndexOutOfBoundsException
字符串下标越界
Scanner scanner = new Scanner(System.in); String scan = scanner.next(); String substring = scan.substring(0, 7); //当超过字符的长度时,越界 char substring1 = scan.charAt(8); System.out.println(substring);3. java.lang.ArrayIndexOutOfBoundsException
数组下标越界
4. java.lang.NullPointerException 空指针异常
// 第一次出现
Object[] object = new Object[5];
System.out.println(object[1]); // 当属于Object,且其未设值时,会报空指针异常。其他的会有其默认值
// 第二次出现
String [][] strings = new String[4][]; // 当二维数组时,这样写只确定了行,并且确定列是一位数组
//但并没有设置一维数组,即这个二维数组内的一维数组的值仍然为空,
//并没有让其按照默认值使用
// 可以通过 strings[1] = new String[5]; 来设置第二行的一位数组是多少
for (int i=0;i<5;i++){
System.out.println(strings[i][0]);
}



