Java学习笔记

《Java必须知道的300个问题》学习笔记

2017-03-08  本文已影响181人  码梦的一生

1. Java基本数据类型长度(字节)

2. goto在Java中作为保留字

3. 常量定义:final,无法修改,没有子类,不能被重写

4. float需要用f或F修饰,long用l或L

5. 3-2.6 == 0.4是false,浮点数计算不精确,可用BigDecimal

6. >>>:无符号右移。位运算在同等条件下,比四则运算符的乘法或者是除法快

7. &&是短路运算符,也是逻辑运算符

8. short s = 1; s = s + 1是错的,Java默认使用的是int,需要强转s = (short)(s + 1)

9. +=运算符在编译的时候不会报错,但可能产生溢出

10. 闰年:能被4整除但不能被100整除,或能被400整除

11. 跳出多重嵌套循环:break Lablel;Label应放在循环语句前,否则不起作用

12. Arrays类:

13. 排序算法:(待补充)

14. 存储相同数据量,二维数组比一维大,因为需要指向第一维的指针

15. 类成员访问权限

类所在说明 private 默认的 protected public
本类 可见 可见 可见 可见
相同包的其他类 不可见 可见 可见 可见
不同包的其他类 不可见 不可见 不可见 可见
相同包的子类 不可见 可见 可见 可见
不同包的子类 不可见 不可见 可见 可见

16. 抽象类和抽象方法:

17. 静态语句块:通常用于必须的初始化操作

18. Java只有值传递,对象参数传的是对象引用地址

19. 一般情况下,抽象类用于继承,接口用于实现

20. super可调用被重写的方法和成员

21. final、finally、finalize的比较

22. 浅克隆和深克隆

23. 内部类可被继承,但必须硬性给予这个类一个带参数的构造方法,参数应为外部类的引用,同时使用.super()方法

24. 创建Class对象:

25. 使用反射创建对象

26. 通过反射调用方法:通过Class对象或者Method对象,调用Method类的invoke方法

27. 通过反射访问字段:通过getFiled()或getDeclaredFiled()获得指定字段,返回Field对象,用Field的getter()或setter()实现访问(只可修改public修饰的字段)

28. 重写equals()方法

29. 自动装包:基本类型自动转换为包装类,自动拆包与之相反

30. String str = ""String str = null区别:前者为其分配内存空间,长度为0,后者没有

31. “==”余equals()的区别:前者比较两个对象使用的内存地址和内容是否相同,后者只比较内容

32. 在Java中,如果将同一字符串常量赋值给多个字符串变量来创建字符串对象,则这些字符串对象具有相同的内存地址

33. 日期的格式化,时间变量的格式化:(待补充)

34. 正则表达式:(待补充)

35. 去掉字符串中的空格:

36. 判断数字:isDigit(char ch)

37. 各进制转换:

38. StringBuilder是非线程安全的,但效率比StringBuffer高

39. 替换字符串:

40. 汉字区位码的转换:

41. Arrays.asList方法,Collection定义的toArray方法,可以将数组转为集合,或者将集合转为数组

42. Iterator接口中的remove方法是迭代过程中删除元素的安全方法

43. List接口中,定义的ListIterator和Iterator的区别

图1 ListIterator和Iterator的区别

44. ArrayList和LinkedList的区别

|集合 | 底层| 查找|增删|
| :-------------|:-------------| :-----|:-----|:-----|
| ArrayList| 数组元素 | 快 |慢,大量移动|
| LinkedList| 链表对象 | 慢,从头遍历 |快|

45. List<Integer> list = new ArrayList<>();删除元素时,可list = new LinkedList()<>

46. Collection主要子接口继承关系

图2 Collection主要子接口继承关系

47. List接口实现类继承关系

图3 List接口实现类继承关系

48. Queue接口及其实现类继承关系

图4 Queue接口实现类继承关系(注意,LinkedList底层也实现了List接口)

49. Set接口及其实现类继承关系

图5 Set接口实现类继承关系

50. ArrayList与Vector的比较:Vector有些方法为同步,适合于需要线程安全的开发,但效率差

51. Deque:两侧进入,两侧离开的队列

52. Set

53. Map

54. Map

55. 自定义TreeMap排序:修改compareTo()

new TreeMap<,>(new Comarator<>(){})

56. Math.random()返回0.0~1.0之间的伪随机数,使用的是线性同余法

57. 线性同余法:

58. 使用RoundingMode进行舍入,HALF_UP实现四舍五入

59. 数字格式化:DecimalFormat(待补充)

60. Throwable:

Throwable
->Error
->Exception

61. 异常

62. 错误:程序以外的因素引起

63. try-catch-finally,不管程序是否发生异常,都要执行的是finally

64. PrintWriter的printLn()可以写入一行数据

65. 使用Scanner类可以读取文本文件并解析数据

66. 从控制台接收密码,使用Console的readPassword()

67. Formatter对字符串进行格式化(待补充)

68. 使用ObjectInputStream、ObjectOutputStream保存对象,使用transient关键字,让其属性不被保存

69. 查看Windows硬盘空间:File类

70. 创建临时文件:createTempFile

71. SequenceInputStream,方便管理日志文件

72. LineNumberReader可以设置行号

73. 获得指定类型文件:FileFilter,FilenameFilter

74. StreamTokenizer可统计单词和数字的个数

75. 读取属性文件值:Properties

76. NIO缓冲实现:

图6-1 缓冲区示意图 图6-2 保存3个字节的缓冲区示意图 图6-3 调用flip方法的缓冲区示意图

77. NIO中,增加了内存映射IO,可将文件映射到内存

78. 泛型类型参数的命名要求

78. 泛型限制类型参数范围

79. Java的泛型支持协变,但是泛型不支持

80. ?表示类型通配符,具有任意性

81. 泛型擦除:Java虚拟机在编译的时候,会将类型信息给消去,这个过程称为类型擦除

比如:boolean result = (new ArrayList<Number>().getClass() = new ArrayList(Integer)().getClass());结果为true,因为在编译的时候,程序变为输出new ArrayList().getClass = new ArrayList().getClass的结果
由于擦除机制,导致许多常用功能无法实现,比如创建泛型化数组T[] array = new T[10],但可以使用Java的反射机制来实现
` public static <T> T[] createGenericArray(Class<T> type, int size) {
    return (T[]) Array.newInstance(type, size);

82. Java Swing开发注意事项

83. Swing顶层容器类的继承关系

图7 Swing顶层容器类的继承关系

84. Swing文本控件的继承关系

图8 Swing文本控件的继承关系

85. 使用键盘来操作文本控件:在javax.swing.JComponent类中定义了getInputMap()方法,可以用来获得InputMap对象,通过该对象可以将特定的按键与操作绑定

86. 限制文本域中输入字符的长度:DocumentFilter类提供了对文档增加、替换和删除操作的过滤功能。由于删除操作并不能让字符串长度增加,因此只要限制增加和替换操作即可。

87. 提示文本框中还有多少字符可用:实现DocumentListener接口,但不要在DocumentListener中修改文档的内容。对于JTextField控件,可以使用继承的getDocument()方法或者Document对象,然后将其强转成AbstractDocument,再调用addDocumentListener()方法为其执行DocumentListener

88. 设置按钮上文本和图标的位置:

89. 单选按钮需要放在ButtonGroup类中才能实现单选

90. 获得当前系统支持的全部字体名称的数组:String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();GraphicsEnvironment类表示由当前系统上虚拟机可以获得的GraphicsDevice类和Font类对象组成的集合。GraphicsEnvironment类对象的资源可以是本地系统, 也可以是远程系统。该类是一个抽象类,可以使用其getLocalGraphicsEnvironment()方法获得其对象。getAvailableFontFamilyNames()方法可以返回由当前GraphicsEnvironment类对象包含的字体名称字符串组成的数组。

91. DefaultListCellRenderer类是默认的列表单元格渲染器,它实现了ListCellRenderer接口。在ListCellRenderer接口中定义了唯一的方法getListCellRendererComponent(),用于控制如何绘制单元格

92. 使用JOptionPane类实现对话框功能

93. JTestPane改变样式的步骤:

94. 选择图片时的预览功能:JFileChooser类提供了一个setAccessory()方法,它可以为文件选择器设置辅助设施,可以在辅助设施中提供图片预览功能。可以使用Image类来实现图片的缩放。

95. 实现自动排序的列表:在实现列表模型时,使用TreeSet保存列表元素

96. 得到显示器大小:Toolkit类的getScreenSize()

97. 线程的生命周期

图9 线程的生命周期

98. Java线程的属性及其作用

99. 线程的停止

100. 线程中,start和run的区别:一个线程start(),并不表明线程马上执行,它需要等待CPU进程调度机制。run()表示线程的运行,是线程对象的一个方法。

101. Object类提供的线程相关方法

101. 线程同步是一种控制多个线程依次使用共享资源的能力,从而避免了错误的发生

102. 线程死锁:两个以上的线程互相都要求对方已经占有的资源而导致无法继续运行的现象

103. 使用Executors创建线程池,因为创建一个新的线程有一定的代价。使用完毕后,使用ExecutorService接口中定义的shutdown()关闭线程池

104. Swing不是线程安全的

105. 线程池存在死锁、并发问题、资源不足等风险

106. 守护线程:又称后台线程,为其他线程服务

107. 终止线程运行:Interrupted(),(stop()和suspend()不推荐,因为不安全)

108. 线程的挂起:让线程暂时让出CPU的使用权限,暂时停止执行。

109. 使用同步锁解决资源冲突问题lock()和unlock()

110. ISO/OSI参考模型:共有七层

111. TCP/IP对OSI参考模型进行了改进

上一篇下一篇

猜你喜欢

热点阅读