牛客网java基础知识刷题记录-01

2022.1.27-2022.2.16

  1. 假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?
public class Base
{
   public void methodOne()
   {
      System.out.print("A"); // 3. 输出A
      methodTwo();  // 4. 调用的是子类重写的methodTwo方法
   }
 
   public void methodTwo()
   {
      System.out.print("B"); // 6. 输出B
   }
}
 
public class Derived extends Base
{
   public void methodOne() // 1. 第一步
   {
      super.methodOne();  //2. super调用,调用父类的methodOne()方法
      System.out.print("C"); // 8.输出C
   }
 
   public void methodTwo()
   {
      super.methodTwo();  // 5. 调用父类大的methodTwo()方法
      System.out.print("D"); //7. 输出D
   }
}
  • ABDC
  • AB
  • ABCD
  • ABC
考察内容:
	1. 多态成员方法使用规则: 编译看左边,运行看右边
	2. 多态中,子类重写的方法,当super调用就是调用父类方法【只要是被子类重写的方法,不被super调用都是调用子类方法】
  1. 关于下面这段Java程序,哪些描述是正确的:()
public class ThreadTest extends Thread {
    public void run() {
        System.out.println("In run");
        yield();
        System.out.println("Leaving run");
    }
    public static void main(String []argv) {
        (new ThreadTest()).start();
    }
}
  • 程序运行输出只有In run
  • 程序运行输出只有Leaving run
  • 程序运行输出先有In run后有Leaving run
  • 程序运行输出先有Leaving run后有In run
  • 程序没有任何输出就退出了
  • 程序将被挂起,只能强制退出
考察内容:
	1. Thread.yidel()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。
	2. 上面代码有两个线程,一个主线程和一个ThreadTest线程,主线程调用ThreadTest后就结束了,所以yield()礼让线程没有作用,因为此时只有一个线程了。
  1. 关于final说法正确的是? ( )
  • final类的方法肯定不能被同一个包的类访问
  • final类的方法能否被同一个包的类访问不是由final决定
  • final方法等同于private方法
  • final对象本身的引用和值都不能改变
考察内容:
	1. final修饰变量:final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。final 修饰符通常和 static 修饰符一起使用来创建类常量。
	2. final修饰方法:类中的 final 方法可以被子类继承,但是不能被子类修改。声明 final 方法的主要目的是防止该方法的内容被修改。
	3. final修饰类:final 类不能被继承,没有类能够继承 final 类的任何特性。
  1. 对于子类的构造函数说明,下列叙述中错误的是( )。
  • 子类不能继承父类的无参构造函数。
  • 子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句。
  • 在创建子类的对象时,若不含带参构造函数,将先执行父类的无参构造函数,然后再执行自己的无参构造函数。
  • 子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。
考察内容:
	1.  构造函数不能被继承,构造方法只能被显式或隐式的调用。
  1. 下面为true的是:
Integer i = 42;
Long l = 42l;
Double d = 42.0;
  • (i == l)
  • (i == d)
  • (l == d)
  • i.equals(d)
  • d.equals(l)
  • i.equals(l)
  • l.equals(42L)
考察内容:
	1. 基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
	2. 两个Integer类型进行“==”比较, 如果其值在-128至127  ,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
	3. 两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。
	4. 基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。 
  1. 以下JAVA程序的运行结果是什么( )
public static void main(String[] args) {
    Object o1 = true ? new Integer(1) : new Double(2.0);
    Object o2;
    if (true) {
    o2 = new Integer(1);
    } else {
        o2 = new Double(2.0);
    }
    System.out.print(o1);
    System.out.print(" ");         
    System.out.print(o2);
}
  • 1 1
  • 1.0 1.0
  • 1 1.0
  • 1.0 1
考察内容:
	三元操作符类型的转换规则:
		1.若两个操作数不可转换,则不做转换,返回值为Object类型
		2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
		3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
		4.若两个操作数都是直接量数字,则返回值类型为范围较大者
  1. 关于ThreadLocal类 以下说法正确的是
  • ThreadLocal继承自Thread
  • ThreadLocal实现了Runnable接口
  • ThreadLocal重要作用在于多线程间的数据共享
  • ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
  • ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
考察内容:
	1. ThreadLocal的类声明:public class ThreadLocal<T>可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。
	2. ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立。
	3. ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本
  1. 抽象类方法的访问权限默认都是public。( )
  • 正确
  • 错误
考察内容:
	1. 关于抽象类
		JDK 1.8以前,抽象类的方法默认访问权限为protected
		JDK 1.8时,抽象类的方法默认访问权限变为default
	2. 关于接口
		JDK 1.8以前,接口中的方法必须是public的
		JDK 1.8时,接口中的方法可以是public的,也可以是default的
		JDK 1.9时,接口中的方法可以是private的
	3. 接口中字段的修饰符为:public static final(默认不写)
  1. 关于多线程和多进程,下面描述正确的是():
  • 多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间。
  • 线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护。
  • 线程的通信速度更快,切换更快,因为他们在同一地址空间内。
  • 一个线程可以属于多个进程。
考察内容:
	1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
	2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
	3. 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
	4. 处理机分给线程,即真正在处理机上运行的是线程。
	5. 线程是指进程内的一个执行单元,也是进程内的可调度实体。
  1. 子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
  • 父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
  • 父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
  • 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
  • 父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
考察内容:
	1. 当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块
	2. 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
  1. 在类Tester中定义方法如下,public double max(int x, int y) { // 省略 }则在该类中定义如下哪个方法头是对上述方法的重载(Overload)?
  • public int max(int a, int b) {}
  • public int max(double a, double b) {}
  • public double max(int x, int y) {}
  • private double max(int a, int b) {}
考察内容:
	Java 重载的规则:
		1、必须具有不同的参数列表;
		2、可以有不同的返回类型,只要参数列表不同就可以;
		3、可以有不同的访问修饰符;	
		4、可以抛出不同的异常;	
		5、方法能够在一个类中或者在一个子类中被重载。
  1. 有以下代码片段:
String str1="hello";
String str2="he"+ new String("llo");
System.out.println(str1==str2);

请问输出的结果是:

  • true
  • 都不对
  • null
  • false
考察内容:
	1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。
    2)String类底层是char数组来保存字符串的。也被final所修饰
  1. 单例模式中,两个基本要点是
  • 构造函数私有
  • 静态工厂方法
  • 以上都不对
  • 唯一实例
考察内容:
	1、单例类只能有一个实例。
	2、单例类必须自己创建自己的唯一实例。
	3、单例类必须给所有其他对象提供这一实例。
  1. 以下类型为Final类型的为()
  • HashMap
  • StringBuffer
  • String
  • Hashtable
考察内容:
	1. string与stringbuffer都是通过字符数组实现的。
	2. 其中string的字符数组是final修饰的,所以字符数组不可以修改。
	3. stringbuffer的字符数组没有final修饰,所以字符数组可以修改。
	4. string与stringbuffer都是final修饰,只是限制他们所存储的引用地址不可修改。至于地址所指内容能不能修改,则需要看字符数组可不可以修改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值