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程序员面试笔试宝典》