Java常见问题

1.&&&的区别:
 如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”左边的为false,则将不会计算其右边的表达式。
2.请问以下程序会输出什么?
 
  public class Test1 {
    public static void main(String[] args) {
      int num = 32;
      System.out.println(num >>= 32);
    }
  }
 输出结果:num=32
 解释:对于int型整数移位a>>b,系统先将b32取模,得到的结果才是真正一位的位数。例如a>>33 a>>1的结果是一样的,a>>32的结果还是a原来的数字。对于long型整数移位时a>>b,则是先将移位位数b64取模。移位能为我们实现整数除以或者乘以2n次方的效果。
3.请问以下程序会输出什么?
 public class Test2 {
    public static void main(String[] args) {
      int j = 0;
      for (int i = 0; i < 100; i++) {
        j = j++;
      }
      System.out.println(j);
    }
  }
   输出结果:0
   解释:
4.Collection Collections的区别。
 
  Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
 
  Collection是个java.util下的接口,它是各种集合结构的父接口。
5.GC是什么? 为什么要有GC? (基础)
 
  GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
 
System.gc()
 
Runtime.getRuntime().gc()
6.实现interface和继承class有什么区别?
实现interface和继承class,在语法上最大的区别,是要实现interface的所有方法,而继承则不必如此。但这只是表面现象而已,interface实际上是一种方法继承,而继承class则可能包括了域的继承。多继承的困难之处,第一是无法处理多个父类之间域的冲突;第二是难以确定调用的是哪一个父类的方法。Interface实际上提供了一种简化的处理方法。首先interface中只能包含常量,这使域的冲突大大降低了;其次interface中只包含方法的定义,不包含实现,于是不同接口之间的方法也不会冲突。因此可以用interface来模拟一种简化的多继承,而class的继承就只是单继承而已了。
7.请问以下程序会输出什么?
public class StringExample {

 public static void main(String[] args) {
  String s0 = "Programming";
  String s1 = new String("Programming");
  String s2= "Program"+"ming";
  
  System.out.println(s0.equals(s1));
  System.out.println(s0.equals(s2));
  System.out.println(s0==s1);
  System.out.println(s0==s2);
 }
}
 输出结果:true
                    true
                    false
                    true
解释:String.equals()方法比较的是字符串的内容。使用equals()方法会对字符串中的所有的字符一个接一个的比较,如果完全相等,那么返回true。运算符“=="比较的是String实例的引用。在这种情况下,s0和s1并不是同一个String实例,但s0和s2却是同一个。这个问题的答案来自于java语言规范中关于字符串常量的章节。本例中,“Programming”,“Program”和“ming”都是字符串常量,它们在编译期就被确定了。当一个字符串由多个字符串常量连接而成时,例如s2,它同样在编译期就被解析为一个字符串常量。java确保一个字符串常量只有一份拷贝。所以当“Programming”和“Program”+“ming”被确定为值相等时,java会设置两个变量的引用为同一个常量的引用。
8.String是最基本的数据类型吗?
在Java中一共有八种基本数据类型,其中有4个整型
(int,short,long,byte),两个浮点型(double,float),一个char和一个用于表示真值的boolean类型。在Java中所有的数值类型占用的字节数与平台无关。
9.int 和 Integer 有什么区别?
int是一个基本类型, Integer是一个int的包装类(Integer类包含一个int值)。
java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相关的方法,java为每个基本类型都提供了包装类,这样,我们便可以把这些基本类型转化为对象来处理了.这些包装类有:Boolean,Byte,Short,Character,Integer,Long,Float,Void等.
值得说明的是,java是可以直接处理基本类型的,但是在有些情况下我们需要将其作为对象来处理,这时就需要将其转化为包装类了。
10. 谈谈final, finally, finalize的区别。
final:修饰符(关键字)
 如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。
 将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally 
 在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,最后不管有没有发生异常,控制都将进入 finally 块(如果有的话),如用在数据库连接时用来最后关闭连接,避免在数据库连接发生异常后资源一直被占用的情况。
finalize 方法名
 Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 
11.对象与实例有什么区别?
在Java的内存分配中,对象和实例是不同的,前者分配在内存堆里,后者分配在堆栈里,至于为什么要这样分,参考一下其他的资料。对象是不变的东西,它是对客观事物的抽象,实例是对操作对象的引用,你不能直接操作对象。
12.Java中所有的类都继承了java.lang.Object类,而在C++中没有像java.lang.Object这样的类,这是为什么呢?都是面向对象,Java这样做有什么好处呢?
Java采用的是单根结构,所有的类都继承了java.lang.Object类。对于Java这种纯面向对象的语言来说,这种设计具有很好的灵活性,比如对垃圾收集来说很有利,所有的类都具有java.lang.Object类具有的方法等。C++没有更多这样的方法,大概是为了向后兼容。向C兼容,满足它设计上最大的灵活性。
13.以下代码编译时会产生错误的是______。[Trend公司2005年面试题]
class reverseIt4
{
 
  public static void main(String[] args)
  {
     EnclosingClass jb2;                  //-----1
     System.out.println(jb2.m);     //-----2
  }
}
class EnclosingClass               //--------3
{
  public int m = 6;
   class InnerClass               //-------4
  {
     int msquare;
     InnerClass()
     {
        msquare = m*m;
     }
  }
}
A.语句1          B.语句2          C.语句3          D.语句4
解析:语句3和语句4显然是正确的,尽管它们的描述不是那么规范(存在一个类中的类)。语句1声明了一个类,但是没有做定义,于是问题就出现了。声明好比只是告诉编译器有一个人,但是如果不定义,这个人就是个抽象的人,没有身高、体重、年龄、职业的“空”人。所以定义对象必须在声明的同时给它定义。正确的程序如下。
class reverseIt4
{
 
  public static void main(String[] args)
  {
     EnclosingClass jb = new EnclosingClass();
    
      System.out.println(jb.m);
    
  }
}
class EnclosingClass
{
  public int m = 6;
   class InnerClass
  {
     int msquare;
     InnerClass()
     {
        msquare = m*m;
     }
  }
}
答案:该题是问编译在哪儿出现问题,尽管问题出在1处,但编译器不会发现,编译器只有在2处才会发现问题。所以答案选B。
14.

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值