也许是之前java只学了一个月后面就直接写聊天室,没怎么看过基础知识了。
感觉做题目的正确率太低了!
总而言之,发现自己基础好像还是不太牢固诶!
多刷刷!在刷题中复习!!
除了错题,值得复盘的正确题也记录下来了!😁
7.18记录:
很多时候,因为idea的强大补全+修正功能,我们会忽视很多细节,在离开idea时,会突然忘记。当然这也是基础不好的表现。
老实说,这道题一开始我忘记了,不知道选啥,我就打开了编译器试,然后选择不报错的,嚯嚯。
A选项:接口中方法默认被public abstract修饰,抽象方法不可以有方法体。A错误。
B选项:JDK8中,接口中的方法可以被default和static修饰,但被修饰的方法必须有方法体。B错误。
C选项:接口的确是可以继承的,但C选项错误的原因和继承没关系。它错在抽象方法不可以有方法体。
D选项正确。
jvm中没有进程的概念 ,但是jvm中的线程映射为操作系统中的进程,对应关系为1:1。这道题的问的就是jvm中线程如何异步执行 。 在jvm中是使用监视器锁来实现不同线程的异步执行, 在语法的表现就是synchronized 。
这道题,我只分析AB
列表(List)的元素是有序、可重复 的;
集合(Set)的元素是无序、不可重复的。
List底层是数组存储数据的,所以有序,可重复的
Set底层是HashMap,添加元素其实就是调用map的put()方法,添加的元素作为map的key,value是一个Object对象。
又是一个之前没有注意细节的小知识点。!!
虽然说count是私有变量。但是!题中是在本类中调用count。
重要的是:私有变量,只能用于当前类中。
题目中就是在当前类中运用,所以没问题。
这道题考的也是细节+基础。
case只是个入口,没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。
一直搞不太清楚这类题型。
1.程序入口main方法要执行首先要加载类B
2.静态域:分为静态变量,静态方法,静态块。这里面涉及到的是静态变量和静态块,当执行到静态域时,按照静态域的顺序加载。并且静态域只在类的第一次加载时执行
3.每次new对象时,会执行一次构造块和构造方法,构造块总是在构造方法前执行(当然,第一次new时,会先执行静态域,静态域〉构造块〉构造方法)注意:加载类时并不会调用构造块和构造方法,只有静态域会执行
4.根据前三点,首先加载类B,执行静态域的第一个静态变量,static b1=newB,输出构造块和构造方法(空)。ps:这里为什么不加载静态方法呢?因为执行了静态变量的初始化,意味着已经加载了B的静态域的一部分,这时候不能再加载另一个静态域了,否则属于重复加载了(静态域必须当成一个整体来看待。否则加载会错乱)于是依次static b2 =new B,输出构造块,再执行静态块,完成对整个静态域的加载,再执行main方法,new b,输出构造块。
😅哎.....
考基础,String和StringBuffer的原理不同。
String对象是不可变的。
String str = "aa"; str = "aa"+"bb"; 此时str的值为"aabb",但是"aabb"不是在开始的字符串"aa"后面直接连接的"bb",而是又新生成了字符串"aabb",字符串"aa"一旦被初始化,那么它的值不可能再改变了。
StringBuffer对象是可变的。
StringBuffer strb = StringBuffer("aa"); strb.append("bb"); 此时的strb的值也为"aabb",但是"aabb"是直接在开始的字符串"aa"后面连接的“bb”,并没有生成新的字符串。
区别在于是否生成新的字符串。
重点是 final int i;前面的这个final。
final作为对象成员存在时,必须初始化;
但是,如果不初始化,也可以在类的构造函数中初始。
反正必须要给初始化了。
因为java允许将数据成员声明为final,却不赋初值。但是,blank finals必须在使用之前初始化,且必须在构造函数中初始化 。
而题中显然,既没有在定义时初始化,也没有再构造函数中初始化就直接使用了,所以编译错误。
局部内部类是放在代码块或方法中的,不能有访问控制修饰符。且不能被static修饰。