1.是否在学习过程中学到了一些idea的快捷键的使用方法以此提升开发效率?
双击Shift 全局搜索
Ctrl + F 在指定区域内、光标区域内搜索
Alt + F7 查看变量,方法被引用的所有地方
Ctrl + E 显示最近打开的文件列表
Ctrl + 点击一下文件 关闭文件
Ctrl + Shift + E 打开最近关闭的文件
Ctrl + / 注释行
Ctrl + Shift + / 块注释
Ctrl + W 选中当前单词或代码块。
Ctrl + Shift + W 取消选中代码块
Ctrl + C 复制
Ctrl + V 粘贴
Ctrl + Y 剪切
Alt + Insert 生成代码,例如getters和setters、构造函数等。
Ctrl + Z 撤回一步
Ctrl + Shift + F10 运行当前文件
Ctrl + Shift + F9 调试当前文件
Ctrl + W 选中当前单词或代码块。
Ctrl + Shift + W 取消选中代码块
Alt + F7 在当前文件中搜索
Ctrl + R 文件内搜索
Ctrl + Shift + R 在所有文件中搜索
Alt+Up 、 Alt+Down 可在方法间快速移动
Ctrl+D 复制上一行或复制选定
Ctrl+O 可以选择父类的方法进行重写
Ctrl+F12 可以显示当前文件的结构
2.重写的规则,重载的规则
重写是子类对父类的允许访问的方法的实现过程进行重新编写,其规则有:
1.子类方法的名称和参数列表必须要一致
2.子类方法的访问修饰符不能比父类方法的访问修饰符更严格,比如父类修饰符是public,子类不能申请为protected(public>protected>default>private)
3.父类的成员方法只能被它的子类重写。
4.声明为 final 的方法不能被重写;声明为 static 的方法不能被重写,但是能够被再次声明
5.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
6.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法;子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法
重载是指在同一个类中定义多个方法,它们具有相同的名称但参数列表不同(参数类型、数量或顺序不同)。其规则有:
1.要重载的方法必须具有相同的名称
2.重载的方法必须具有不同的参数列表,包括参数类型、数量或顺序的不同
3.重载方法的返回类型可以相同也可以不相同
4.重载方法的访问修饰符可以相同也可以不同
5.被重载的方法可以声明新的或更广的检查异常
3.是否能够区分重写和重载
区别点 | 重载 | 重写 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的更广的异常 |
访问修饰符 | 可以修改 | 一定不能做更严格的限制(可降低限制) |
4.抽象类的特点有哪些
1.抽象类不能被实例化,即不能用new创建一个新对象,其只能被继承
2.抽象类中的方法只有声明没有实现
3.抽象类不可以与private、static、final关键字共存
4.子类继承抽象类后看,必须实现或重写抽象类中所有抽象方法,否则子类仍未抽象类
5.抽象类中有构造函数,用于给子类初始化
5.接口和类的区别
类 | 接口 |
关键字是class | 关键字是interface |
可以实例化对象 | 无法实例化 |
类只能单继承 | 接口可以多继承 |
可以继承另一个类 | 不能继承一个类 |
使用extends关键字继承 | 使用implements由类继承,extends由接口继承 |
可以包含构造函数 | 不能包含构造函数 |
不能包含抽象方法 | 仅包含抽象方法 |
类中变量和方法可以使用任何修饰符(public、private、default、protected) | 接口中的所有变量和方法都声明为public |
6.抽象类和接口的区别
抽象类关键词是abstract,接口的关键词是interface
接口中只能包含抽象方法,而抽象类既可以包含普通方法也可以包含抽象方法
接口中不能定义静态方法,而抽象类可以
接口中不包含构造器,而抽象类有。抽象类中的构造器不是用于创建对象,而是让子类调用这些构造器来完成属于抽象类的初始化工作
接口是行为的抽象,是一种行为的规范,接口是like a 的关系;抽象是对类的抽象,是一种模板设计,抽象类是is a 的关系
7.什么是上转型,什么是下转型
上转型是指将子类对象赋值给父类引用变量。在向上转型过程中,子类的特殊属性和行为会丢失,只能访问父类公共属性和方法。
下转型是父类引用变量转换为子类引用变量。下转型类似于该子类直接继承父类。
public class Vehicle {
public void honk() {
System.out.println("Vehicle honks");
}
}
public class Car extends Vehicle {
public void honk() {
System.out.println("Car honks");
}
public void drive() {
System.out.println("Car drives");
}
}
public class Test {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.honk();//输出“Vehicle honks”
//上转型
vehicle = new Car();
//此处虽然调用的是父类的方法,但是输出的是子类重写后的方法
vehicle.honk();//输出“Car honks”
//下转型
Car car = (Car) vehicle;
car.honk();//输出“Car honks”
car.drive();//输出“car drives”
}
}
8.如何在Java中自定义一个异常类
用户自定义异常,只需要继承Exception类就可以了。
public class MyCustomException extends Exception{
private String message;
public MyCustomException(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public static void main(String[] args) {
try {
throw new MyCustomException("This is a custom exception");
} catch (MyCustomException e) {
System.out.println(e.getMessage()); // 输出 "This is a custom exception"
}
}
}