这个月的计划由于博主的个人原因,有不少都没有实现,只能在下个月抓紧时间。
本篇博文是在牛客上刷的题,基本是JAVA的基础知识,笔者JAVA还没有学完,所以这里先把博主会的写上,之后此系列的文章还会出现,继续弥补JAVA里的核心知识点。
NO.1
super: 1.子类的构造函数调用父类的构造函数需要使用super 2.子类将父类的方法进行了重写,如果子类想调用父类里面被重写的方法,需要super 3.子类如果没有重写父类的方法,那么用不用super都是一样的结果,此时可以直接调用。
NO.2
首先,不能思维定势,题里是return i / 10 ,i位于分子而不是分母,所以可以为0。 然后,对于抛出的关系,我们的程序首先进入main函数,然后进入try当中,调用上面的aMethod(0)的方法。 进入之后,发现我们的i是可以为0的,所以未抛出异常,catch语句将不再执行,但是仍需要走一遍finally,打印出结果。 我们此时再回到main函数里面,catch块也是不会执行的,直接进入输出打印,所以结果为B
NO.3
这个题的关键在于能否看懂输出里面的那个式子,首先我们看一下常规解法: 我们应当知道,计算机本身存储的就是补码,我们先把10换位二进制,也就是:0000 0000 0000 1010,然后 ~ 代表按位取反,那么我们可以得到 1111 1111 1111 0101 这个就是~10的补码,现在我们让补码减去一,得到的是 ~10的反码,那么 ~10的原码就是反码取反,最高位符号位保持不变,也就是: 1000 0000 0000 1011 ,然后转换为正常的整数为 -11,然后带入运算,结果是 -6。 然后看一下第二种方法: 公式 - n= ~ n+1可推出~ n= - n-1,所以~10= - 11,一步搞定。
NO.4
A.我们子类的第一行都是默认为了super(),那么它可以默认调用父类的无参构造,题里面说是必然会调用,我们子类的有参构造函数和是否调用父类的有参的构造函数之间无必然联系。 B.我们的接口只能继承接口,但是是不能继承类的,接口可以多继承,但是我们的类都是单继承。 C.接口里面的放方法都是抽象的,接口可以实现多继承。 D.我们的一个类里面没有显式定义任何构造方法的时候,JVM会默认给我们一个无参构造,且第一行默认为super()。
NO.5
题目里面问,什么是选择语句,做题的时候一点反应都没有… 选择语句:if,switch 循环语句:while ,for ,do while 跳转语句: break , continue 异常处理语句: try ,catch ,finally ,throw
NO.6
首先Employee类继承了Person类,那么我们知道,先父类的构造方法,再子类,那么我们需要在Employee类中有一个方法来调用父类的构造函数,但是由题目得,Person类里面,并没有无参构造方法,所以,我们可以在父类里面增加无参构造方法,但是最好的方法是,在Employee里面加一个super(“nm”); 也就是子类在自己的构造函数里面显示的调用父类的构造函数。
NO.7
直接看下面这位大佬的图:
NO.8
选出错误的选项,答案是 ABC
A.final修饰的类是终态类,是不能够被继承的,但是我们的抽象类只有被继承之后才是有意义的,所以用final是不能用来修饰抽象类的。 B.我们定义的抽象方法是为了被重写,但是final定义的方法不能够被重写,故矛盾。 C.抽象方法只是声明,并不能够做出实现的方法。
NO.9
1.final修饰的变量等同于常量。 2.如果final修饰了类,那么类不能够被继承。 3.final如果修饰了方法,那么方法不能被重写。 4.final不能用来修饰抽象类。 5.final的方法可以被重载,但是不能被重写。 6.重载是指同样的修饰符,方法名,返回值,但是参数的个数或者顺序不同。 7.重写是指子类继承了父类之后,重写父类里面的方法。
NO.10
静态的方法使用不依赖于对象,只看类型,在编译的时候就已经确定了。
NO.11
我们看一下java的数据类型:它分为基本数据类型和引用数据类型。 对于equals方法而言,它不能用于基本数据类型的比较,只能用于对象的比较,比较二者的地址是否相同。 对于“==”而言,它是用来进行基本数据类型的比较,比较两者值是否一样,也用来进行引用数据类型相互比较,比较两者的地址是否相等,但是不可以用来进行引用数据类型和基本数据类型的比较。简单而言,B之所以错,是因为类型并不匹配。
NO.12
静态变量是属于整个类的,而局部变量属于方法,只在方法里面有效,所以不可以用static修饰局部变量。
NO.13
length()返回的是字符串的长度,本题没有问占多少个字节。
NO.14
直接补充大佬的笔记了:
NO.15
A.hello均存在于常量池当中,a和b均指向常量池中的hello。 B.题目没有说a是局部变量,所以当作全局变量来处理,如果a是局部变量的话需要初始化。 C.int a = 1; 只是定义了一个值,它没有引用地址,并不指向堆中。但是我们 Integer b = new Integer(1); 是指向了堆中地址为 1 的位置。 D.int a = 1; 只是定义了一个值,同上C选项。
NO.16
看大佬的总结:
NO.17
首先本题考察了string和char的区别,我们应当知道,string类型的值是不可变的,原因是因为在string的源码当中,使用char数组来顺序存储字符串当中的每一个字符,而且这个char数组是用final来修饰的,所以我们赋值之后,它的值也就不会再发生改变了,所以题中的str是tarena, 然后char数组的首元素被替换,所以是gbc。
NO.18
局部内部类放在代码块或者是方法当中,不能有访问控制修饰符,而且不可以被static类型修饰。
NO.19
翻译一下: 下面那个选项有关java.util.ArrayList是正确的? A.集合中的元素是经过排序的。 B.集合是不可以被改变的。 C.集合当中的元素必须唯一。 D.集合元素的键值是唯一的。 E.集合当中的元素是线程同步的。
NO.20
题目所给是:(short)10/10.22,而不是(short)(10/10.22),两者的区别显而易见,前者是只把10给转换为了short类型,但是后面由于出现了小数,所以进行了自动类型的提升,转换为了double类型。后者的话是将运算完成后的结果转换为了short类型。
NO.21
A,B的方法名和参数与父类是一样的,但是返回值与父类的返回值之间没有继承关系。D的返回值是一个类。C是重载。 看了一个大佬的笔记,再补充一下重写与重载: 重写: 方法名相同,参数类型相同,子类的返回类型小于等于父类的返回值类型,子类抛出的异常小于等于父类抛出的异常,子类的访问权限大于等于父类方法的访问权限,这里的返回值类型必须要在有继承关系下的情况,才可以进行比较。 重载: 方法名必须相同,参数类型必须不同,参数类型包括参数数目,参数类型,参数顺序。
NO.22
A.Class类是Object的派生类。(超类是父类的意思) B.每一个类都是用Object作为父类,但是用final修饰的类不能被继承。 C.见下图String的文档。 D.Class类可以装载其他类。
NO.23
JAVA程序初始化顺序: a. 父类的静态代码块 b.子类的静态代码块 c.父类的普通代码块 d.父类的构造方法 e.子类的普通代码块 f.子类的构造方法
NO.24
Base base = new Son(); base.method(); base.methodB(); 父类的引用无法访问子类独有的方法。
NO.25
add(6)之后,变为{5,3,1,6} add(0,4)之后,变为了{4,5,3,1,6} remove(1)之后,变为了{4,3,1,6}
NO.26
A.抽象类里面可以有构造方法,但是不能直接创建抽象类的实例对象。 B.接口里面不可以有构造方法。 C.类是单继承。 D.jdk1.8之后接口里面可以有方法体,之前的版本里面不可以有方法体。
实际错的题还有好多,不过有的知识还没有学,笔者先整理这些,日后及时补充!
|