软件开发----Java基础每日刷题(转载于牛客)

1.        在Java中,main()方法的返回值的类型是:

A        public

       static

C        void

D        String

正确答案:C


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

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

       -1110

C        0211

       -1211

正确答案:B

解析:

    1.try块是必须的,catch块和finally块都是可选的,但必须存在一个或都存在。try块不能单独存在。

    2.try块里的语句运行中出现异常会跳过try块里其他语句,直接运行catch里的语句。

    3.无论try块中是否有异常,无论catch块中的语句是否实现,都会执行finally块里的语句。

    4.如果try块或catch块中有return语句,finally块里的语句会执行在try块或catch块中的return语句前。

    5.如果finally块里有return语句,则直接返回,而不执行try块或catch块里的return语句。

    6.只有一种办法不执行finally块里的语句,那就是调用System.exit(1);方法,即退出java虚拟机。

    强调:finally块里的语句在try或catch里的人return前执行!!!


3.        非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.

A        正确

B        错误

正确答案:B

解析:

实际上这道题考查的是两同两小一大原则:

方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
 


4.        下面代码输出是?

double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));

       Ceil d1=-0.0 floor d1=-1.0

B        Ceil d1=0.0 floor d1=-1.0

       Ceil d1=-0.0 floor d1=-0.0

D        Ceil d1=0.0 floor d1=0.0

       Ceil d1=0 floor d1=-1

正确答案:A

解析:

A ceil:大于等于 x,并且与它最接近的整数。 floor:小于等于 x,且与 x 最接近的整数。


5.        下列描述错误的是?

       类只能继承一个父类,但是可以实现多个接口

B        抽象类自身可以定义成员而接口不可以

C        抽象类和接口都不能被实例化(忽略匿名内部类)

D        一个类可以有多个父类和多个基接口

正确答案:BD

解析:

A、java为单继承,多实现。可以实现多个接口。
B、接口允许定义成员,但必须是常量。
C、
抽象类和接口类的无法实例化,任何编译器中直接使用new会报错。
D、A,单继承,多实现
 


6.        用户不能调用构造方法,只能通过new关键字自动调用。()

A        正确

       错误

正确答案:B

解析:

选B。 在类内部可以用户可以使用关键字this.构造方法名()调用(参数决定调用的是本类对应的构造方法) 在子类中用户可以通过关键字super.父类构造方法名()调用(参数决定调用的是父类对应的构造方法。) 反射机制对于任意一个类,都能够知道这个类的所有属性和方法,包括类的构造方法。


7.        有以下程序段, 则下面正确的选项是()

public class MyThead extends Thread{
    public static void main(String[] args) {
        MyThead t=new MyThead();
        MyThead s=new MyThead();
        t.start();
        System.out.println("one.");
        s.start();
        System.out.println("two.");
    }
    public void run() {
        System.out.println("Thread");
    }
}

A        编译失败

B        程序运行可能结果为: one. Thread two. Thread

C        程序运行可能结果是: one. two. Thread Thread

D        程序运行结果不稳定

正确答案:BCD

解析:

这题只需要看"one."和"two."顺序就可以了,因为System.out.println("one.");System.out.println("two.");同在一个线程A(假设命名为A),所以必须顺序输出。新启动的两个子线程(注意重写了run方法)与线程A构成多并发,执行顺序无法预知,所以程序运行结果不稳定。一句话,线程内顺序执行,多线程间并发执行。严格来说,D选项也是不准确的,因为无法保证"one."在"two."前输出。望更正。
 


8.        下面说法正确的是?()

A        调用Thread的sleep()方法会释放锁,调用wait()方法不释放锁

       一个线程调用yield方法,可以使具有相同优先级线程获得处理器

C        在Java中,高优先级的可运行的线程会抢占低优先级线程的资源

D        java中,线程可以调用yield方法使比自己低优先级的线程运行

正确答案:BC

解析:

sleep()会抱着锁睡觉,wait会把锁释放

yield()让有相同优先级的线程之间能够适当的轮换执行

Java中wait()、sleep()、yield()方法的区别:[译]Java中Wait、Sleep和Yield方法的区别 - 简书


9.        下列说法正确的是()?

A        我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程

       一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源

C        synchronized可以解决可见性问题,volatile可以解决原子性问题

       ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的

正确答案:BD

解析:

volatile与synchronized的区别:

volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.

volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.

volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.

volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.

volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.


10.        下列哪些方法是针对循环优化进行的

A        强度削弱

B        删除归纳变量

C        删除多余运算

D        代码外提

正确答案:ABD

解析:

常见的代码优化技术有:复写传播,删除死代码, 强度削弱,归纳变量删除

如果有同学有研究过这部分内容,并总结过,有更好的答案,请联系我删除本篇非原创解答

复写传播:

图片说明

  • 复写语句:形式为f = g 的赋值
    • 优化过程中会大量引入复写
    • 复写传播变换的做法是在复写语句f = g后,尽可能用g代表f
    • 复写传播变换本身并不是优化,但它给其他优化带来机会
      • 常量合并(编译时可完成的计算)
      • 死代码删除

死代码删除

  • 死代码是指计算的结果决不被引用的语句
  • 一些优化变换可能会引起死代码

代码外提

  • 代码外提是循环优化的一种
  • 循环优化的其它重要技术
    • 归纳变量删除
    • 强度削弱

例:

while(i <= limit - 2) ...
// 代码外提后变成
t = limit - 2;
while(i <= t) ...

归纳变量删除

j = j - 1
t4 = 4 * j
t5 = a[t4]
if t5 > value goto B3
  • j和t4的值步伐一致地变化,这样的变量叫作归纳变量
  • 在循环中有多个归纳变量时,也许只需要留下一个
  • 这个操作由归纳变量删除过程来完成
  • 对本例可以先做强度削弱,它给删除归纳变量创造机会

强度削弱

  • 强度削弱的本质是把强度大的运算换算成强度小的运算,例如将乘法换成加法运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值