写点什么

牛客 java 选择题每日打卡 Day4

作者:Geek_b91541
  • 2022 年 6 月 27 日
  • 本文字数:3801 字

    阅读完需:约 12 分钟

牛客 java 选择题每日打卡 Day4

👩‍💻博客主页:京与旧铺的博客主页

✨欢迎关注🖱点赞🎀收藏⭐留言✒

🔮本文由京与旧铺原创,csdn 首发!

😘系列专栏:java 学习

👕参考网站:牛客网

💻首发时间:🎞2022 年 5 月 17 日🎠

🎨你做三四月的事,八九月就会有答案,一起加油吧

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲




图片



🛒导航小助手🎪

[TOC]



🥞选择题 1

基类和导出类在 《Think in java》 中文翻译是 《java编程思想》 第四版 里有这个概念。基类就是父类,导出类就是子类。子类调用父类构造方法用 super()关键字,且放在子类构造函数的第一行。

🧈选择题 2

1,抽象类中可以有抽象方法,也可以没有抽象方法。


2,抽象类当然可以被继承,因为它就是用来继承的,


3,继承抽象类,若有抽象方法,则子类必须将其抽象方法实现,


4,抽象类中的非抽象方法可以被重写。


最终类和抽象类正好相反


5,加上 final 的类就叫最终类,加上 final 的方法就叫最终方法,


6,最终类中可以有最终方法也可以没有


7,最终类不能有子类,最终方法不能被重写

🍿选择题 3

public class Base{    private String baseName = "base";    public Base()    {        callName();    }
public void callName(){ System. out. println(baseName);}
static class Sub extends Base{ private String baseName = "sub"; public void callName() { System. out. println (baseName) ; }}public static void main(String[] args){ Base b = new Sub();}
}
复制代码


1.首先,需要明白类的加载顺序


(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)


(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )


(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )


(4) 父类构造函数


(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )


(6) 子类构造函数


其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用 new 类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)


2.其次,需要理解子类覆盖父类方法的问题,也就是方法重写实现多态问题。


Base b = new Sub();它为多态的一种表现形式,声明是 Base,实现是 Sub 类, 理解为 b 编译时表现为 Base 类特性,运行时表现为 Sub 类特性。


当子类覆盖了父类的方法后,意思是父类的方法已经被重写,题中 父类初始化调用的方法为子类实现的方法,子类实现的方法中调用的 baseName 为子类中的私有属性。


由 1.可知,此时只执行到步骤 4.,子类非静态代码块和初始化步骤还没有到,子类中的 baseName 还没有被初始化。所以此时 baseName 为空。 所以为 null。

🌭选择题 4

public class Test{static{   int x=5;}static int x,y;public static void main(String args[]){   x--;   myMethod( );   System.out.println(x+y+ ++x);}public static void myMethod( ){  y=x++ + ++x; }}
复制代码


1.静态语句块中 x 为局部变量,不影响静态变量 x 的值


2.x 和 y 为静态变量,默认初始值为 0,属于当前类,其值得改变会影响整个类运行。


3.java 中自增操作非原子性的


main 方法中:


  • 执行 x--后 x=-1

  • 调用 myMethod 方法,x 执行 x++结果为-1(后++),但 x=0,++x 结果 1,x=1 ,则 y=0

  • x+y+ ++x,先执行 x+y,结果为 1,执行++x 结果为 2,得到最终结果为 3

🥡选择题 5

这些都是 JSP 内置对象


JSP 内置对象有:1.request 对象客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需求,然后做出响应。它是 HttpServletRequest 类的实例。2.response 对象 response 对象包含了响应客户请求的有关信息,但在 JSP 中很少直接用到它。它是 HttpServletResponse 类的实例。3.session 对象 session 对象指的是客户端与服务器的一次会话,从客户连到服务器的一个 WebApplication 开始,直到客户端与服务器断开连接为止。它是 HttpSession 类的实例.4.out 对象 out 对象是 JspWriter 类的实例,是向客户端输出内容常用的对象 5.page 对象 page 对象就是指向当前 JSP 页面本身,有点象类中的 this 指针,它是 java.lang.Object 类的实例 6.application 对象 application 对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了 application 对象的生命。它是 ServletContext 类的实例。7.exception 对象 exception 对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个 JSP 页面要应用此对象,就必须把 isErrorPage 设为 true,否则无法编译。他实际上是 java.lang.Throwable 的对象 8.pageContext 对象 pageContext 对象提供了对 JSP 页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的 SESSION,也可以取本页面所在的 application 的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫 pageContext。9.config 对象 config 对象是在一个 Servlet 初始化时,JSP 引擎向它传递信息用的,此信息包括 Servlet 初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个 ServletContext 对象)

🍜选择题 6

//precondition:  x >=0public void mystery (int x){System.out.print(x % 10);
if ((x / 10) != 0){mystery(x / 10);}System.out.print(x % 10);}
复制代码


这个题目是考递归,总共调用了 4 次 mystery 方法,注意:程序是从上往下执行的,所以当一个方法,调用另一个或本方法时,程序会等调用完毕以后在接着执行


1.第一次调用 mystery 方法,此时参数(x)为 1234,进入第四行,x 不变为 x=1234**,1234%10=4,*输出 4*


2.接着进入 if 语句,1234/10=123 !=0,进入 if 语句,此时 x 还是 1234,接着第二次调用 mystery 方法****(****此时第一次调用的方法不会继续执行,会等第二次(本次)调用的方法执行完毕后继续执行),mystery(x/10),传入的参数(x)为 123,然后第四行 123%10=3,参数还是不变为 123,*输出 3*


3.接着进入 if 语句,第三次调用 mystery()方法(此时第二次调用的方法不会继续执行,会等第三次(本次)调用的方法执行完毕后继续执行)传入参数为 123/10=12, x=12,接着第四行 12%10=2,传入的参数值不会变,*输出 2*


4.然后进入 if 语句 12/10!=0,**第四次调用 mystery()方法(此时第三次调用的方法不会继续执行,会等第四次调用的方法(本次)执行完毕后继续执行),**传入的****参数(x=1)为 1,进入第四行 1%10,*输出 1*


5.然后进入 if 语句 1/10=0 不满足 if 语句 x/10 != 0,所以本次不会继续调用 mystery 方法,然后程序继续执行调用下面的输出参数为 1,1%10,*输出 1*


6**.然后第四次调用的方法执行结束**然后返回第三次调用的方法继续执行,调用下面的输出,参数为 12,x%10=2,*输出 2*


7.然后第三次调用的方法执行结束然后返回第二次调用的方法继续执行,此时调用下面的输出,参数为 123,x%10=3,*输出 3*


8.最后第二次调用的方法执行结束然后****回第一次调用的方法继续执行,此时调用下面的输出,参数为 1234,x%10=4,*输出 4*


9.第一次调用方法结束

🍘选择题 7



**


类中变量:**除了 private 权限外,其他权限的变量(没有表示默认 default),均可以用“对象.变量名”来调用。对于 private 变量,即使使用 static,也不能用“类.变量名”来调用私有变量。只能通过类中的 public get()方法来调用。**类中方法:**除了 private 权限外,其他权限的方法(没有表示默认 default),均可以用“对象.方法名”来调用。private 方法可以用 java 反射机制调用。当然如果用 private 修饰方法,该方法只在类的内部调用。其中比较著名的就是单例模式中的私有构造方法。**static 属性:**static 方法在编译期就已经生成了,其他方法在运行期生成。非私有的 static 方法可以用“类.方法名”调用。但是私有的 static 变量和方法都是不可能被调用的,虽然 private static 这种写法很少见,但仍然存在,且编译器不会报错。题中 static void method2() { }的权限是默认权限,所以可以用“类.方法名”来调用。如果题目中写成 private static void method2(){ } ,那么 D 选项也是错误的。

🥠选择题 8


选 C。


假设代入法:


  • n=3,外层循环 i 的取值为 0,1,2

  • 当 i=0 时,内部循环 j 的取值为 3,2,1,所以 state 执行 3 次;当 i=1 时,内部循环 j 的取值 3,2,所以 state 执行 2 次;当 i=2 时,内部循环 j 的取值为 3,所以 state 执行 1 次。

  • 综上所述:3+2+1=6 次。将 n=3 带入选项中的出 C 符合结果。

🥫选择题 9

class Base{    public Base(String s){        System.out.print("B");    }}public class Derived extends Base{    public Derived (String s) {        System.out.print("D");    }    public static void main(String[] args){        new Derived("C");    }}
复制代码


在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。

🤴总结

好啦,今天的错题总结就到这里啦,以后的每一天我都会尽量去打卡做 java 的基础选择题,然后总结出错题,相信练习之后会有更好的学习效果,既然看到这里啦,可以给我三连一下吗,爱你们啊

用户头像

Geek_b91541

关注

还未添加个人签名 2022.06.02 加入

还未添加个人简介

评论

发布
暂无评论
牛客java选择题每日打卡Day4_6月月更_Geek_b91541_InfoQ写作社区