Java面试,平时总结一些基础知识(二)

注释?

单行注释、多行注释、文档注释;

《Clean Code》:

代码的注释不是越详细越好,实际上好的代码就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释;

若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。

标识符和关键字?

程序、类、变量、方法的名字就是标识;特殊的标识符就是关键字; 

在Java中,标识符是代表你对程序中某个方法或变量赋予的一个名称,而这个名称不能是关键字,因为关键字是系统已经定义并使用的,如果你拿来使用,那就会造成理解错误之类的现象,所以现在基本上语言都不允许用关键字做标识符。你指的文字是什么呢?是标识符的名称么,如果是,那要说明的是,标识符第一个字符必须是大小写字母或$或_,不能是数字和其他字符,而第一个字符以后的,可以为数字。

Java中有哪些常⻅的关键字?

访问控制 private protected public
   
程序控制 break continue return do while if else
for instanceof switch case default
   
类 、方法,变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient volatile
   
错误处理 try catch throw throws finally
   
包相关 import package
   
基本类型 boolean byte char double float int long
short null true false
   
变量引用 super this void
   
保留字 goto const



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

⾃增⾃减运算符 ?

自增自减运算符++、–是单目运算符,可以放在操作元之前,也可放在操作元之后。操作元必须是一个整形或浮点型变量。
++x(–x)表示在使用x之前,先使x的值增1(或减1)
x++(x–)表示在使用x之后,再使x得知增1(或减1)

continue、break、和return的区别是什么?

break 语句可以立即退出循环,阻止再次反复执行循环代码;
continue 语句只是退出当前循环,根据控制表达式还允许继续进行下一次循环;
return 退出当前方法,终止当前方法的执行。

Java泛型

List list = new ArrayList<>();
list.add(12);
//这⾥直接添加会报错
list.add("a");
Class clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通过反射添加,是可以的
add.invoke(list, "kl");
System.out.println(list)

泛型类:

//此处T可以随便写为任意标识,常⻅的如T、E、K、V等形式的参数常⽤于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic{
    private T key;
    public Generic(T key) {
        this.key = key;
    }
    public T getKey(){
        return key;
    }
}
Generic genericInteger = new Generic(123456);

泛型接口:

public interface Generator {
    public T method();
}
class GeneratorImpl implements Generator{
    @Override
    public T method() {
    return null;
    }
}
class GeneratorImpl implements Generator{
    @Override
    public String method() {
    return "hello";
    }
}
public static < E > void printArray( E[] inputArray ) {
    for ( E element : inputArray ){
    System.out.printf( "%s ", element );
    }
    System.out.println();
}
// 创建不同类型数组: Integer, Double 和 Character
Integer[] intArray = { 1, 2, 3 };
String[] stringArray = { "Hello", "World" };
printArray( intArray );
printArray( stringArray );

==和equals的区别

==:基本数据类型比较值;引用数据类型比较内存地址。

equals():

public class test1 {
    public static void main(String[] args) {
    String a = new String("ab"); // a 为⼀个引⽤
    String b = new String("ab"); // b为另⼀个引⽤,对象的内容⼀样
    String aa = "ab"; // 放在常量池中
    String bb = "ab"; // 从常量池中查找
    if (aa == bb) {// true
        System.out.println("aa==bb");
    }
    if (a == b) {// false,⾮同⼀对象
        System.out.println("a==b");
    }
    if (a.equals(b)) {// true
        System.out.println("aEQb");
    }
    if (42 == 42.0) { // true
        System.out.println("true");
    }
}

hashCode()与 equals()

如果两个对象equals()方法相等则它们的hashCode返回值一定要相同,如果两个对象的hashCode返回值相同,但它们的equals()方法不一定相等。

两个对象的hashCode()返回值相等不能判断这两个对象是相等的,但两个对象的hashcode()返回值不相等则可以判定两个对象一定不相等。

根据hashcode的规则,两个对象相等其哈希值一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode,而且从Student类重写后的hashcode方法中可以看出,重写后返回的新的哈希值与Student的两个属性有关。

以下是关于hashcode的一些规定:

  • 两个对象相等,hashcode一定相等
  • 两个对象不等,hashcode不一定不等
  • hashcode相等,两个对象不一定相等
  • hashcode不等,两个对象一定不等

你可能感兴趣的:(基础)