爪哇基础题02
今天是第二天基础题,也是元旦节,2023的第一天,新的一年开始,我也要继续努力,为秋招做准备,今天同样是整理一些叫不准或者不会的题,做了5题,正确率和昨日一样,依旧是感人的40%,开冲开冲!
1.假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?(A)
public class Base { public void methodOne() { System.out.print("A"); methodTwo(); } public void methodTwo() { System.out.print("B"); } } public class Derived extends Base { public void methodOne() { super.methodOne(); System.out.print("C"); } public void methodTwo() { super.methodTwo(); System.out.print("D"); } }
刚看题目创建的对象我就知道这是要考察多态,Base b = new Derived(),这是多态中的向上转型,基础知识薄弱,有印象,但是具体的就记不住了,因此特意去听了有关多态的网课,重新学习一下。
首先什么是多态?同类型的对象,表现出的不同形态,即对象的多种形态。就如题目中的Base b = new Derived(),Deriverd对象现在的形态是Base,当然也可以写Derived d = new Derived(),正常的创建Derived对象而且表现形态为Derived。
其次是多态的表现形式。父类类型 对象名称 = 子类对象;
最后是多态的前提,也就是什么情况下会存在多态。
- 有继承关系(这是必须的,没有继承关系哪来的父类型)
- 有父类引用指向子类对象(题目中就有,Base b = new Derived())
- 有方法重写
多态最基本的用法就是在一个方法中,如果参数是一个类对象,那传入的参数就可以是这个类所有的子类对象,并且会根据传入对象不同,调用不同的子类方法。这里能体现出多态的好处,使用父类型作为方法的形参,可以接受所有的子类对象,体现多态的扩展性和便利性
public static void register(Person p){ p.show(); }
了解了什么是多态,下一步就是学习多态调用成员的特点,包括成员变量和成员方法,就如本题,就是有关调用成员方法的内容。
记住多态调用成员的两句口诀
- 调用变量:编译看左边,运行也看左边
- 编译看左边:javac编译代码的时候,会看左边的父类有没有这个变量,如果有编译成功,如果没有,是子类自己的,编译失败
- 运行看左边:java运行时,实际获取的就是左边父类中成员变量的值
- 调用方法:编译看左边,运行看右边
- 编译看左边:javac编译代码的时候,会看左边的父类有没有这个方法,如果有编译成功,如果没有,是子类自己的,编译失败,也就是说父类无法调用子类特有的方法。
- 运行看右边:java运行时,实际获取的就是右边子类的方法(本题b.methodOne调用的就是子类中的方法,之后调用的方法都可以用这句话解释)
看了评论区一个高赞的解析,我就得总结的很好,就一句话,只要是被子类重写的方法,不被super调用都是调用子类方法。
2.下面有关java类加载器,说法正确的是?(ABCD)
A 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
B 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
C 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
D tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
这题是JVM中的类加载器知识点,因此我对类加载器进行一定的学习
类加载器包含四种
- Bootstrap ClassLoader:用来加载java的核心库。加载JAVA_HOME/jre/lib目录下的核心api或-Xbootclasspath选项指定的jar包装入工作
- Extension ClassLoader:用来加载java的扩展库。java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载java类,主要加载JAVA_HOME/jre/lib/ext目录下的jar包
- Application ClassLoader:根据java应用的类路径classpath来加载java类。一般来说java应用的类都是由它来加载完成的
- 自定义类加载器:自定义 开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,以满足特殊需求
5.在Java线程状态转换时,下列转换不可能发生的有(AC)?
A 初始态->运行态
B 就绪态->运行态
C 阻塞态->运行态
D 运行态->就绪态
线程的生命周期具有五种状态:初始态,就绪态,运行态,阻塞态,死亡态
我是一个转码的小白,平时会在牛客中做选择题,在做题中遇到不会的内容就会去找视频或者文章学习,以此不断积累知识。这个专栏主要是记录一些我通过做题所学到的基础知识,希望能对大家有帮助