Java 面试题踩坑(04.04)

 这个题是什么个意思呢?


以下多线程对int型变量x的操作,哪个不需要进行同步(    )
A x=y;
B x++;
C ++x;
D x=1;

答案解析:答案是D
  A.由于y的值不确定,所以要加锁; 
 
  B,C 两个在多线程情况下是必须要加锁的,因为他们是先被读入寄存器,然后再进行+1操作,如果没有加锁,那么可能会出现数据异常; 
 
  D 原子操作,所以不需要加锁 
 
  
   
        原子性:指该操作不能再继续划分为更小的操作。   
   
        Java中的原子操作包括:     
    
   
            1、除long和double之外的基本类型的赋值操作   
   
            2、所有引用reference的赋值操作   
   
            3、java.concurrent.Atomic.* 包中所有类的一切操作   
 

 

假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?

public class Base
{
   public void methodOne()
   {
      System.out.print("A");
      methodTwo();
   }
 
   public void methodTwo()
   {
      System.out.print("B");
   }
}
 
public class Derived extends Base
{
   public void methodOne()
   {
      super.methodOne();
      System.out.print("C");
   }
 
   public void methodTwo()
   {
      super.methodTwo();
      System.out.print("D");
   }
}

输出ABDC。

答案解析:(感觉讲的很详细了)

 这是一道类多态的向上转型题。 
 
 
Base b = new Derived();
 
 
  向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。 
 
  因此: 
 
  调用的顺序是:(1)、(2)、(3)、(4)、(5)、(6)、(7) ; 得到的结果是:ABDC 
 
 
class Base
{ public void methodOne()  // (3)
    {
        System.out.print("A");
        methodTwo();  //执行到这里的时候调用子类的覆盖方法 (4)
    } public void methodTwo() // (7)
    {
        System.out.print("B");
    }
} 
 
 class Derived extends Base { public void methodOne() // (1)
    { super.methodOne();   // (2)
        System.out.print("C");
    } public void methodTwo()  //该方法为重写了父类的方法 (5)
    { super.methodTwo(); //(6)
        System.out.print("D");
    }
}



若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()

A char
B int
C double
D float


参考答案:选C,double类型,因为按照类型大的与类型小的运算,强制转换类型小的进行运算的规则,double>int>char,因此结果是double类型。

简单记忆线程安全的集合类: 喂!SHE!  喂是指  vector,S是指 stack, H是指    hashtable,E是指:Eenumeration

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值