牛客刷题日记(2021-11-19)

牛客刷题日记(2021-11-2)

题目:

关于类的叙述正确的是()。

A.在类中定义的变量称为类的成员变量,在别的类中可以直接使用
B.局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
C.使用别的类的方法仅仅需要引用方法的名字即可
D.只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数

解析:

正确答案:B
【解析】
A在类中定义的变量称为类的成员变量,在别的类中不可以直接使用局部变量的
C使用别的类的方法需要通过该类的对象引用方法的名字
D只要没有定义任何构造函数,JVM都会为类生成一个默认构造函数


题目:

在Java中,什么是Garbage Collection?()

A.自动删除在程序中导入但未使用的任何包
B.JVM检查任何Java程序的输出并删除任何没有意义的东西
C.当对象的所有引用都消失后,对象使用的内存将自动回收
D.操作系统定期删除系统上可用的所有java文件

解析:

正确答案: C
garbage collection 垃圾回收


题目:

多重继承的概念在Java中实现是通过如下哪些?()
I. 扩展两个或多个类
II. 扩展一个类并实现一个或多个接口。
III. 实现两个或更多接口。

A.只有I &II
B.只有II & III
C.只有III
D.都是

解析:

正确答案: B
Java只支持单继承,实现多重继承三种方式:(1)直接实现多个接口 (2)扩展(extends)一个类然后实现一个或多个接口 (3)通过内部类去继承其他类


题目:

以下代码执行的结果显示是多少()?

public class Demo{
    public static void main(String[] args){
        System.out.print(getNumber(0));
        System.out.print(getNumber(1));
        System.out.print(getNumber(2));
        System.out.print(getNumber(4));
    }

    public static int getNumber(int num){
        try{
            int result = 2 / num;
            return result;
        }catch (Exception exception){
            return 0;
        }finally{
            if(num == 0){
                return -1;
            }
            if(num == 1){
                return 1;
            }
        }
    }    
}

A.0110
B.-1110
C.0211
D.-1211

解析:

正确答案: B
finally一定会在return之前执行,但是如果finally使用了return或者throw语句,将会使trycatch中的return或者throw失效


题目:

下面论述正确的是()?

A.如果两个对象的hashcode相同,那么它们作为同一个HashMap的key时,必然返回同样的值
B.如果a,b的hashcode相同,那么a.equals(b)必须返回true
C.对于一个类,其所有对象的hashcode必须不同
D.如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同

解析:

正确答案: D

hashCode()方法和equals()方法的作用其实是一样的,在Java里都是用来对比两个对象是否相等一致。
那么equals()既然已经能实现对比的功能了,为什么还要hashCode()呢?因为重写的equals()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高。
那么hashCode()既然效率这么高为什么还要equals()呢? 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠,
所以我们可以得出:
1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。

2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

所有对于需要大量并且快速的对比的话如果都用equals()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

所以选D


题目:

假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4,2,5,0,3,0]。 执行下面的方法numQuest(),最终的输出结果是什么?

private List<Integer> nums;

//precondition: nums.size() > 0
//nums contains Integer objects
public void numQuest() {
    int k = 0;
    Integer zero = new Integer(0);
    while (k < nums.size()) {
        if (nums.get(k).equals(zero))
            nums.remove(k);
        k++;
    }
}

A.[3, 5, 2, 4, 0, 0, 0, 0]
B.[0, 0, 0, 0, 4, 2, 5, 3]
C.[0, 0, 4, 2, 5, 0, 3, 0]
D.[0, 4, 2, 5, 3]

解析:

正确答案: D

做这种题还是要一步一步来,不然一不小心就掉坑里:
List中的 get ( i )指的是获取下标(索引)为 i 的元素,也就是第 i+1 个元素
本题:
zero0,如果get(k)0,执行remove(k); ;
size
8 ; k
0 , 因此第一次remove(0) ,删除索引为0的元素也就是第一个元素0,然后k++, size()–;
此时集合元素为 :[0,4,2,5,0,3,0]
size7; k1,因此get(1)4 !=0 , 不执行remove(); k++,因没有删除元素,size()不变,
此时集合元素为:[0,4,2,5,0,3,0]
size
7;k2,k++;
size
7;k3,k++;
size
7;k4,get(4)0,remove(4) ; k++, size()–;
此时集合元素为: [0,4,2,5,3,0]
size
6;k
5,get(5)0,remove(5);k++, size()–;
此时集合元素为: [0,4,2,5,3]
size
5; k==6 ;退出循环;最终输出此时集合元素为 [0,4,2,5,3] ;
一般更改删除集合元素,使用iterator()迭代器,不推荐使用这种;


题目:

以下哪项陈述是正确的?

A.垃圾回收线程的优先级很高,以保证不再使用的内存将被及时回收
B.垃圾收集允许程序开发者明确指定释放哪一个对象
C.垃圾回收机制保证了JAVA程序不会出现内存溢出
D.进入”Dead”状态的线程将被垃圾回收器回收
E.以上都不对

解析:

答案:E
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收


题目:

下列不属于Java语言性特点的是

A.Java致力于检查程序在编译和运行时的错误
B.Java能运行虚拟机实现跨平台
C.Java自己操纵内存减少了内存出错的可能性
D.Java还实现了真数组,避免了覆盖数据类型的可能

解析:

答案:D
Java致力于检查程序在编译和运行时的错误。
Java虚拟机实现了跨平台接口
类型检查帮助检查出许多开发早期出现的错误。
Java自己操纵内存减少了内存出错的可能性。
Java还实现了真数组,避免了覆盖数据的可能。
注意,是避免数据覆盖的可能,而不是数据覆盖类型


题目:

一般有两种用于创建线程的方法,一是(),二是()。

A.从Java.lang.Thread类派生一个新的线程类,重写它的runnable()方法
B.从Java.lang.Thread类派生一个新的线程类,重写它的run()方法
C.实现Thread接口,重写Thread接口中的run()方法
D.实现Runnable接口,重写Runnable接口中的run()方法

解析:

正确答案:BD
创建线程对象两种方式:
1.继承Thread类,重载run方法;
2.实现Runnable接口,实现run方法


题目:

在java中重写方法应遵循规则的包括()

访问修饰符的限制一定要大于被重写方法的访问修饰符
可以有不同的访问修饰符
参数列表必须完全与被重写的方法相同
必须具有不同的参数列表

解析:

正确答案: B C
方法重写

  1. 参数列表必须完全与被重写方法的相同;
  2. 返回类型必须完全与被重写方法的返回类型相同;
  3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  4. 父类的成员方法只能被它的子类重写。
  5. 声明为final的方法不能被重写。
  6. 声明为static的方法不能被重写,但是能够被再次声明。
  7. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  8. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  9. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  10. 构造方法不能被重写。
  11. 如果不能继承一个方法,则不能重写这个方法。

方法重载

  1. 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
  2. 被重载的方法可以改变返回类型;
  3. 被重载的方法可以改变访问修饰符;
  4. 被重载的方法可以声明新的或更广的检查异常;
  5. 方法能够在同一个类中或者在一个子类中被重载。
  6. 无法以返回值类型作为重载函数的区分标准。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值