Java刷题笔记4

T1 赋值符号 | 移位

image-20231009140449517

<<表示左移位

>>表示带符号右移位

>>>表示无符号右移

但是没有<<<(无符号左移)运算符

xxxxxxxxxx 这个错误通常是因为在求解Mi时,如果某个列数为0,那么Mi会变成0,从而导致除数为0的错误。所以需要在计算Mi之前,先判断列数是否为0。​修改后的mathWay方法如下:​public static int mathWay(int a[]) { int[] m = new int[a.length]; int[] M = new int[a.length]; int[] M1 = new int[a.length]; int[] M2 = new int[a.length]; int M0 = 1; int M1Sum = 0; int M2Sum = 0;​ for (int i = 0; i < a.length; i++) { int columns = i + 2; m[i] = columns - a[i]; M0 *= columns; }​ for (int i = 0; i < a.length; i++) { int columns = i + 2; int Mi = 0; if (columns != 0) { Mi = M0 / columns; } M[i] = Mi; M1[i] = inverse(Mi, columns); M1Sum += M1[i] * Mi * m[i]; M2[i] = M1[i] * Mi; M2Sum += M2[i]; }​ int x = M1Sum % M0; int k = 0; while (true) { int result = x + k * M2Sum; boolean valid = true; for (int i = 0; i < a.length; i++) { int columns = i + 2; if (result % columns != a[i]) { valid = false; break; } } if (valid) { return result; } k++; }}​这样就可以避免除数为0的错误了。​java

image-20231009141342433

不会初始化子类的几种

  1. 调用的是父类的static方法或者字段

  2. 调用的是父类的final方法或者字段

  3. 通过数组来引用 (在初始化数组的时候不会初始化,而操作数组中元素时才进行初始化)

T3 正则表达式

image-20231009142707137

正则表达式的规则

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
  4. ^在中括号里面和外面含义不同,如在外时,就表示开头,如^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如abc表示匹配出去abc之外的其他任一字符。
  5. .表示匹配任意的字符。
  6. \d表示数字。
  7. \D表示非数字。
  8. \s表示由空字符组成,[ \t\n\r\x\f]。
  9. \S表示由非空字符组成,[^\s]
  10. \w表示字母、数字、下划线,[a-zA-Z0-9_]
  11. \W表示不是由字母、数字、下划线组成。
  12. ?: 表示出现0次或1次。
  13. +表示出现1次或多次。
  14. *表示出现0次、1次或多次。
  15. {n}表示出现n次。
  16. {n,m}表示出现n~m次。
  17. {n,}表示出现n次或n次以上。
  18. XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。
  19. X|Y表示X或Y,比如”food|f”匹配的是foo(d或f),而”(food)|f”匹配的是food或f。
  20. (X)子表达式,将X看做是一个整体

T4 try…catch…finally问题

image-20231009143108600

结论:
如果try语句里有return,那么代码的行为如下:

  1. 如果有返回值,就把返回值保存到局部变量中

  2. 执行jsr指令跳到finally语句里执行

  3. 执行完finally语句后,返回之前保存在局部变量表里的值

如果try,finally语句里均有return,忽略try的return,而使用finally的return.

T5 String引用问题

image-20231009144050267

str1指向常量池中的字符串;str2是通过StringBuilder类new出的对象,指向堆。故为false

当创建了匿名对象new String(“llo”)时,会在堆内存中开辟空间,地址值不一样了

T6 抽象类 & 接口

image-20231009145255000

abstract class表示的是”is-a”关系,interface表示的是”like-a”关系。
is-a:继承关系 has-a:从属关系 like-a:组合关系