爪哇基础题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 运行态->就绪态

线程的生命周期具有五种状态:初始态,就绪态,运行态,阻塞态,死亡态

#我的2023新年愿望##你的秋招进展怎么样了#
java基础知识 文章被收录于专栏

我是一个转码的小白,平时会在牛客中做选择题,在做题中遇到不会的内容就会去找视频或者文章学习,以此不断积累知识。这个专栏主要是记录一些我通过做题所学到的基础知识,希望能对大家有帮助

全部评论
来学习了
点赞 回复 分享
发布于 2023-01-04 09:41 广西

相关推荐

02-15 22:29
门头沟学院 Java
点赞 评论 收藏
分享
评论
33
2
分享

创作者周榜

更多
牛客网
牛客企业服务