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 用键盘输入常用的的两种方法
- 方法1:通过Scanner类
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
}
于是引出,抽象类和普通类的几点区别:
- 抽象方法修饰符必须为public或者protected,默认为public;
- 抽象类不能用来创建对象(抽象类中包含无具体实现的方法,所以抽象类无法创建对象)
- 如果一个类继承于一个抽象类,子类必须实现父类的抽象方法;要是不实现,则子类也要定义为abstract类。
2.什么是接口?
接口中可以含有变量和方法,但是接口中所有的方法都必须是抽象类,变量一般不在接口定义
[public] interface InterfaceName{
}
那么,接口和抽象类区别:
1.语法区别
方法:抽象类包含了抽象方法,但是还是可以提供成员方法的实现细节,但是接口就是只能存在public abstract方法
变量:抽象类中可以是各种类型,但是接口要么没有,有的话就只能是public static final类型
继承:一个类只能继承一个抽象类,但是可以实现多个接口
实现:实现接口,就要将所有的方法都实现;继承抽象类则不必全实现
2.设计区别
抽象类:继承; 接口:实现
继承:“是不是”的关系 bird extends animal
实现:“有没有”的联系 bird implements Fly