初识面经

128 阅读4分钟

1. Java基础知识

1.1 重载和重写的区别

overload

发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时;

overwrite

发生父子类,子类继承父类的方法,为了实现多态就必须进行父类方法的重写;
如果父类方法的修饰符为private,则子类就不能重写该方法;

【源码级别】 1.2 String、StringBuffer和StringBuilder的区别,为何String是不可变的?

【理解不深】1.3 自动装箱和拆箱

基本数据和相应对象之间的操作:
装箱:基本类型 → 相应的引用类型(对象)
拆箱:引用类型 → 基本数据类型

1.4 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");
		
	}
}

==:判断两个对象地址是否相等(即是否为同一个对象),但是基本类型,则只需要比较数值是否相等(所以42 == 42.0是正确的)

equals: 也是判断两个对象是否相等(但是往往会有重写,比如String)

  • 情况1:没重写equals(),则等价"=="比较对象
  • 情况2:一般都是重写,这是只需要内容相同就正确(这时 a.equals(b)就是正确的 )

说明:
1.String是继承Object类,Object中equals()比较的是对象的内存地址;String中的equals()被重写,比较的只是对象的值; 2.String是不可变的,指的是字符串常量值不可变

String color = "red";
System.out.print(color); //red
color = "green";
System.out.print(color);  //green

1.5 静态方法、非静态方法存在的意义

求字符串的长度,依赖于具体实例的属性; Math.random(),它的实现不需要实例的属性;

【unsolve】1.6 关键字final总结

【unsolve】1.7 Object类中包含的方法

【unsolve】1.8 异常的分类(强调记忆)

【Review】1.9 用键盘输入常用的的两种方法

Scanner类的next() 与 nextLine()的区别:

 if (scan.hasNext()) { //判断是否还有输入
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        
if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str2);
        }    
     

next(): 1.将空白符、换行符和制表符作为结尾标志 2.不能得到带有空格的字符串

nextLine(): 1.以Enter作为结束符,这样可以获得空白字符串

其中 hasNextXxx()和 nextXxx()配合使用 hasNextXxx函数使得Xxx类型通过,nextXxx将这个类型读入变量 但是hasNext() 和 hasNextLine()还是 空格的区别 ;

  • 方法2:通过BufferedReader

IO流知识点

1.10 interface和 abstract class(类与抽象类)的区别

参考资料

根据参考资料提交几个重要的概念:
1.什么是抽象类?

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法;

abstract void fun();  // 抽象方法  
[public] abstract class ClassName{  //抽象类
		abstract void fun();
        void play(){};  //区别1
    }

于是引出,抽象类和普通类的几点区别:

  1. 抽象方法修饰符必须为public或者protected,默认为public;
  2. 抽象类不能用来创建对象(抽象类中包含无具体实现的方法,所以抽象类无法创建对象)
  3. 如果一个类继承于一个抽象类,子类必须实现父类的抽象方法;要是不实现,则子类也要定义为abstract类。

2.什么是接口?

接口中可以含有变量和方法,但是接口中所有的方法都必须是抽象类,变量一般不在接口定义

[public] interface InterfaceName{
}

那么,接口和抽象类区别:
1.语法区别
方法:抽象类包含了抽象方法,但是还是可以提供成员方法的实现细节,但是接口就是只能存在public abstract方法
变量:抽象类中可以是各种类型,但是接口要么没有,有的话就只能是public static final类型 继承:一个类只能继承一个抽象类,但是可以实现多个接口
实现:实现接口,就要将所有的方法都实现;继承抽象类则不必全实现

2.设计区别
抽象类:继承; 接口:实现
继承:“是不是”的关系 bird extends animal
实现:“有没有”的联系 bird implements Fly