1.    变量命名规则

       在Java中。变量名、函数名、数组名统称为标识符,Java语言规定标识符只能由字母、数字、下划线和$组成,并且标识符第一个字符必须为字母、下划线或$。此外,标识符也不能包含空白字符(换行符、空格和制表符)。

2.    break、continue和return的区别

1)break用于直接强行跳出当前循环。不再执行代码。当多层循环嵌套时,break只是跳出了内层循环;若要跳出多重循环,需在循环外面定义一个标识,然后在循环体中使用带有标识的break语句。

2)continue用于停止当次循环,回到循环起始处,进入下一次循环操作。continue只是中断一次循环。

3)return语句是一个跳转语句,用来表示从一个方法返回(返回一个值或其他复杂类型),可以使程序控制返回调用该方法的地方。当执行main方法时,return语句可以使程序执行返回到Java运行系统。 

3.    final、finally和finalize的区别

1)final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖和类不可被继承。

publicclass Test{
              publicstatic void main(String[] args){
                     finalStringBuffer s = new StringBuffer("Hello");
                     s.append("world");
                     s= new StringBuffer("Hello world");   //编译期间错误
              }
       }

①final指的是引用的不可变性,即它只能指向初始时指向的那个对象,而不关心指向对象内容的变化。所以,被final修饰的变量必须被初始化。

②final方法:当一个方法声明为final时,该方法不允许任何子类重写这个方法,但子类仍然可以使用这个方法。

③final参数:用来表示这个参数在这个函数内部不允许被修改。

④final类:当一个类被声明为final时,此类不能被继承。

2) finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下。

3) finalize是Object类的一个方法,在垃圾回收器执行时会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收,例如关闭文件等。需要注意的是,并不是立即回收。 

4.    assert

       断言(assert)作为一种软件调试的方法,提供了一种在代码中进行正确性检查的机制,它的主要作用是对一个boolean表达式进行检查,一个正确运行的程序必须保证这个boolean表达式的值为true,若表达式的值为false,则说明程序已经处于一种不正确的状态下,系统需要提供告警信息并且退出程序。

assert的主要应用范围:①检查控制流;②检查输入参数是否有效;③检查函数结果是否有效;④检查程序不变量。 

5.    static

       static关键字主要有两种作用:第一,为某个特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,实现某个方法或属性与类而不是对象关联在一起,即可通过类来直接调用方法或使用类的属性。

       static一个很重要的用途是实现单例模式。单例模式的特点是该类只能有一个实例,为了实现这以功能,必须隐藏类的构造函数,即把函数声明为private,,并提供一个创建对象的方法。

public classSingleton {
   private Singleton(){}
   private static Singleton instance = null;
   public static SingletongetInstance(){
      if(instance == null){
         instance = new Singleton();
      }
      return instance;
   }
 
}

6.   switch

       switch语句用于多分支选择,在使用switch(expr)时,expr)只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,包括int和其包装类Integer,由于btye、short、char能隐式地转换为int,故这些类型及其包装类都可以作为switch的表达式。

       在Java7中,switch开始支持String类型,从本质上讲,switch对字符串的支持,其实是int类型值的匹配。它的实现原理为对case的String对象调用hashCode()方法,得到一个int类型的hash值来唯一标识这个case。那么当匹配时,调用String.equals()进行匹配。

7.    volatile

       在用Java语言编写的程序中,有时为了提高程序的运行效率,编译器会自动把对其进行优化,把经常被访问的变量缓存起来,程序在读取这个变量时有可能会直接从缓存中来读取这个值,而不会去内存中读取。单线程时能提高程序的运行效率,但遇到多线程编程时,变量的值可能因为别的线程而改变,而该缓存的值不会相应改变。

       volatile是一个类型修饰符,它被设计用来修饰被不同线程访问和修改的变量。

 注意:

       由于volatile不能保证操作的原子性,因此,一般情况下volatile不能代替sychronized。此外,使用volatile会阻止编译器对代码的优化,因此会降低程序的执行效率。 

8.    instanceof

       instanceof是Java中的一个二元运算符,它的作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例,该运算符返回boolean类型的数据。 

9.    strictfp

       关键字strictfp是strict float point,指的是精确浮点,它用来确定浮点数运算的准确性。JVM在执行浮点数运算时,如果没有指定strictfp关键字,此时计算结果可能会不精确,而且计算结果在不同平台的虚拟机上会有不同的结果。

 注意:

当一个类被strictfp修饰时,所有方法都会自动被strictfp修饰。

参考文献:

《Java程序员面试笔试宝典》