【hdu】【java试题详解】T 6-10

t6

  1. 下列1234注释标注的哪行代码有错?( )
    A.1   B.2   C.3   D.4
class  Animal{
int m=100;
Animal(){m=20;}
Animal(int m){
this.m=m;//1
}
}
class Dog extends Animal{
Dog(){
m=100;
super(2);//2
}
Dog (int m){
super();//3
this.m=m;//4

见t4解析,super和this必须放在构造方法的首句

t7

  1. 下列哪个是正确的?( )
    A.线程被创建,在JVM管理的线程队列立刻就有这个线程。
    B.当一个线程进入中断状态后,它被放在JVM管理的线程队列中的最前面排队等待CPU资源
    C.一个线程从死亡状态可以再回到中断状态
    D.线程调用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行

A线程被创建后,该线程仅处于新建状态,此时由 JVM 为其分配内存,并未进入线程队列。(需要start以进入就绪状态)
B​ 理解1 中断状态只是一个标志位,只是告诉线程你该中断了。除非你的循环条件里含有检测这个标志位的代码,否则没用,这个线程不会立刻停止。
理解2:中断了都结束了。
C线程死亡以后,生命周期结束。被回收。
D就绪状态=可运行的状态!=运行状态

线程生命周期

当线程被创建并启动以后,既不是一启动就进入了执行状态,也不是一直处于执行状态。
在线程的生命周期中,它要经过新建、就绪、运行、和死亡5 种状态。线程启动以后,不可能一直"霸占"着 CPU 独自运行,所以CPU 需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。
#新建状态(NEW)
使用 new 关键字创建了一个线程之后,该线程就处于新建状态。
此时仅由 JVM 为其分配内存,并初始化其成员变量的值。

#就绪状态(RUNNABLE)
调用了start()方法之后,该线程处于就绪状态。
JVM会为其创建方法调用栈和程序计数器,等待调度运行。
就绪状态又称为可运行状态。(可以运行,但不一定正在运行)

#运行状态(RUNNING)
如果处于就绪状态的线程获得了 CPU,开始执行 run()方法的线程执行体,则该线程处于运行状态。

#阻塞状态(BLOCKED)
阻塞状态是指线程因为某种原因放弃了 cpu 使用权,暂时停止运行。直到线程再次进入就绪(runnable)状态,才有机会再次获得 cpu timeslice 转到运行(running)状 态。
阻塞的情况分三种:
等待阻塞
运行(running)的线程执行 o.wait()方法,JVM 将该线程放入等待队列(waitting queue) 中。

同步阻塞
运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则 JVM 把该线程放入锁池(lock pool)中。

其他阻塞(sleep/join)
运行(running)的线程执行 Thread.sleep()或 t.join()方法,或者发出了 I/O 请求时, JVM 会把该线程置为阻塞状态。
当sleep()状态超时、join()等待线程终止或者超时、或者 I/O 处理完毕时,线程重新转入可运行(runnable)状态。

#线程死亡(DEAD)
线程会以下面三种方式结束,结束后就是死亡状态。
正常结束
run()或 call()方法执行完成,线程正常结束。、
异常结束
线程抛出一个未捕获的 Exception 或 Error。
调用 stop
直接调用该线程的stop()方法来结束该线程—该方法通常容易导致死锁,不推荐使用。

t8

8.下列条件语句中,功能与其他语句不同的是( )
A if (a)printf(" %d\n", x); else printf(" %d\n", y);
B if (a == 0)printf(" %d\n", y); else printf(" %d\n", x);
C if (a != 0)printf(" %d\n", x); else printf(" %d\n", y);
D if (a == 0)printf(" %d\n", x); else printf(" %d\n", y);

t9

  1. 下列【代码】注释标注的代码的结果是( )
    public class Main{
    public static void main(String args[ ]){
    String hello=“你好”;
    String testOne=“你”+“好”;
    String mimi=hello;
    System.out.println(hello==testOne);//【代码】
    }}

A. 代码有错 B. true C. false D. 以上都不对

常量字符串相加

如: temp=“AB”+“CD”;,会被编译优化。
编译时就已经确定其值,与temp="ABCD"等价。

变量字符串相加

String temp1 = “AB”;
String temp2 = “CD”;
String str = temp1 + temp2;
在底层调用的是StringBuilder类中的构造方法及append()方法实现:
String str = new StringBuilder().append(temp1).append(temp2).toString();
String.intern 用法

总结

等号右边只要有变量,就会在堆中new一个新对象。
等号右边全是常量,则在编译时创建在常量池中。

t10

  1. 下列【代码】注释标注的代码的输出结果为( )
    public class E{
    public static void main(String args[ ]){
    Stack stack= new Stack();
    stack.push(1);
    stack.push(2);
    int m=stack.pop();
    System.out.printf(“%d:%d”, m, stack.size());//【代码】
    }
    }
    A.1: 2 B. 2: 2 C. 1 :1 D.2:1
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值