天天看点

牛客java选择题每日打卡Day22

牛客java选择题每日打卡Day22

牛客java选择题每日打卡Day22

🛒导航小助手🎪

文章目录

  • ​​牛客java选择题每日打卡Day22​​
  • ​​🛒导航小助手🎪​​
  • ​​@[toc]​​
  • ​​🐱‍🏍选择题1​​
  • ​​正确答案: B 你的答案: A (错误)​​
  • ​​🐱‍🏍选择题2​​
  • ​​正确答案: A 你的答案: C (错误)​​
  • ​​🐱‍🏍选择题3​​
  • ​​正确答案: B 你的答案: A (错误)​​
  • ​​🐱‍🏍选择题4​​
  • ​​正确答案: B 你的答案: A (错误)​​
  • ​​🐱‍🏍选择题5​​
  • ​​正确答案: D 你的答案: A (错误)​​
  • ​​🐱‍🏍选择题6​​
  • ​​正确答案: A 你的答案: B (错误)​​
  • ​​🐱‍🏍选择题7​​
  • ​​正确答案: D 你的答案: C (错误)​​

🐱‍🏍选择题1

将下列哪个代码(A、B、C、D)放入程序中标注的【代码】处将导致编译错误?

class A{
    public float getNum(){
        return 3.0f;
    }
}
public class B extends A{
    【代码】
}      

正确答案: B 你的答案: A (错误)

public float getNum(){return 4.0f;}
public void getNum(){}
public void getNum(double d){}
public double getNum(float d){return 4.0d;}      
  • B类继承自A类,A类中存在一个getNum()方法,问下列哪个会出错。

    也就是说,问,下列哪个重写A的getNum()方法出错。

    重写要满足的条件:(好比父亲给儿子100块钱让儿子去花)

    1.参数列表要完全相同——(你拿的就是100块钱,变不成别的,怎么花随你,但是钱数、参数列表不变)

    2.返回类型是父类方法的返回类型的子类型——(返回值,可以说是你花100得到的是价值小于等于100的东西,你能买回来的一定在100之内)

    3.访问权限不能大于父类方法权限——(就是访问修饰符要比父类的小于等于)

    这里访问权限都相同,返回类型都是基本类型,只看相不相同就可以

    A.返回值类型相同,参数名参数列表相同,满足方法重写,是正确的

    B.返回值类型不同,参数名参数列表相同,是重写但不满足重写条件,错误

    C.返回值类型不同,参数名参数列表不同,不是重写,只是一个重名方法

    D.返回值类型不同,参数名参数列表不****同,不是重写,只是一个重名方法

    所以选B

🐱‍🏍选择题2

String s = new String(“xyz”);创建了几个StringObject?

正确答案: A 你的答案: C (错误)

两个或一个都有可能
两个
一个
三个      

1.String对象的两种创建方式:

第一种方式: String str1 = “aaa”; 是在常量池中获取对象(“aaa” 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象),

第二种方式: String str2 = new String(“aaa”) ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 “aaa” 字符串对象)。

System.out.println(str1==str2);//false

2.String类型的常量池比较特殊。它的主要使用方法有两种:

直接使用双引号声明出来的String对象会直接存储在常量池中。

如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。

String s1 = new String(“AAA”);

String s2 = s1.intern();

String s3 = “AAA”;

System.out.println(s2);//AAA

System.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象,

System.out.println(s2 == s3);//true, s2,s3指向常量池中的”AAA“

🐱‍🏍选择题3

关于访问权限说法正确 的是 ? ( )

正确答案: B 你的答案: A (错误)

外部类前面可以修饰public,protected和private
成员内部类前面可以修饰public,protected和private
局部内部类前面可以修饰public,protected和private
以上说法都不正确      

1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final

2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。

3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰

🐱‍🏍选择题4

在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()

正确答案: B 你的答案: A (错误)

this.A(x)
this(x)
super(x)
A(x)      

B。

this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);

super是调用父类的方法;

A(a)这种形式是在new一个类时使用。

🐱‍🏍选择题5

以下说法错误的是()      

正确答案: D 你的答案: A (错误)

虚拟机中没有泛型,只有普通类和普通方法
所有泛型类的类型参数在编译时都会被擦除
创建泛型对象时请指明类型,让编译器尽早的做参数检查
泛型的类型擦除机制意味着不能在运行时动态获取List<T>中T的实际类型      

1、创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹配的异常。 2、JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。 处理方法很简单,我们叫做类型变量T的擦除(erased) 。 总结:泛型代码与JVM ① 虚拟机中没有泛型,只有普通类和方法。 ② 在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除) ③ 在继承泛型类型的时候,桥方法的合成是为了避免类型变量擦除所带来的多态灾难。 无论我们如何定义一个泛型类型,相应的都会有一个原始类型被自动提供。原始类型的名字就是擦除类型参数的泛型类型的名字。

🐱‍🏍选择题6

jre 判断程序是否执行结束的标准是()

正确答案: A 你的答案: B (错误)

所有的前台线程执行完毕
所有的后台线程执行完毕
所有的线程执行完毕
和以上都无关      

main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。

前台线程和后台线程的区别和联系:

1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。

2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。

3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。

4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。

说明:

​ 应用程序的主线程以及使用Thread构造的线程都默认为前台线程

使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序

🐱‍🏍选择题7

问这个程序的输出结果。

class Base
{
    public void method()
    {
        System.out.println("Base");
    } 
}
class Son extends Base
{
    public void method()
    {
        System.out.println("Son");
    }
    
    public void methodB()
    {
        System.out.println("SonB");
    }
}
public class Test01
{
    public static void main(String[] args)
    {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}      

正确答案: D 你的答案: C (错误)

Base SonB
Son SonB
Base Son SonB
编译不通过      

Base base=new Son(); 是多态的表示形式。父类对象调用了子类创建了Son对象。

base调用的method()方法就是调用了子类重写的method()方法。

而此时base还是属于Base对象,base调用methodB()时Base对象里没有这个方法,所以编译不通过。