1. 包
1.1 什么是包
- 包主要是分门别类的来管理类,类似于文件夹。
- 建包语法:package 公司域名.技术名称,建议全部小写
- 建包语句必须在第一行
1.2 导包
- 相同包下类可以直接访问,不通包下可以通过导包引用类。
- 如果需要导相同类,在类上只能导入一个包路径,类中如果需要再引用相同类需要使用全路径名:包名.类名();
- 格式:import 包名.类名 / import 包名.类名
2. 权限修饰符
权限修饰符是来修饰成员访问的范围,权限修饰符可以修饰成员变量,构造器,方法和内部类。
权限修饰符访问范围如下:
修饰符 | 同一类 | 同一包中其他类 | 不同包下子类 | 不同包下无关类 |
---|---|---|---|---|
private | √ | |||
缺省 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
3. final和常量
3.1 fianl
fianl表示最终的,可以修饰变量,方法和类
- 修饰变量:该变量仅只能赋值一次
- 修饰方法:该方法为最终方法,不可以被重写
- 修饰类:该类为最终类,不能被继承
注意事项:
修饰基础类型:被第一次赋值后不能被改变。
修饰引用类型:对象引用地址不能被改变,但地址对象内部信息可以修改。
示例:
public class FinalTest {
public static final int num = 10;
public static final Dog dog = new Dog("二哈", 10);
public static void main(String[] args) {
System.out.println(num);
System.out.println(dog.getName());
// 程序报错
// num = 20;
dog.setName("三哈");
System.out.println(dog.getName());
}
}
3.2 常量
- 常量是使用public static final修饰的变量,必须初始化值并且在执行过程中不能修改值。
- 常量常用于文件配合,提高代码可读性,便于后期维护。
- 常量命名规范:单词名称大写,多个单词之间使用下划线连接
执行原理:
在编译过程进行替换,会把所有常量替换成字面量。
替换成字面量提高执行的效率。
4. 枚举,接口和抽象类
4.1 枚举(enum)
枚举是java的一种特殊类型,是为了做信息的标志和分类
格式:
修饰符 enum 枚举类型 {
...
}
示例:
public enum Direction {
UP("向上", 1),
DOWN("向下", 2),
LEFT("向左", 3),
RIGHT("向右", 4);
private String name;
private int flag;
private Direction(String name, int flag) {
this.name = name;
this.flag = flag;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
枚举的特征:
- 枚举类都是继承java.lang.Enum
- 枚举类是最终类,不可以被继承
- 构造器都是私有,不能被实例化
- 枚举类第一行默认都是写枚举类对象的名称
4.2 接口(interface)
java中的接口是一种规范,类似于生活当中的接口。比如现在市面上的Type-C充电口,这就是一种规范,大家都按照这样设计,那样的话就可以通用。约束了一致的内容也开放了自定义实现。
4.2.1 定义格式
修饰符 interface 类名 {
...
}
4.2.2 特点
- JDK8前内部只能有抽象方法和常量(下面介绍)
- 接口不能实例化
- 接口中的所有成员都是public,默认是的写不写都是
4.2.3 接口使用(implements)
格式:
修饰符 class 类名 implements 接口类名1、接口类名2...{...
}
- 接口是用来被实现的实现接口的类被称之为实现类,也可以理解为子类,使用关键字implements
- 接口可以被单实现,也可以被多实现
- 一个类实现接口必须重写所有抽象方法,否则实现类为抽象类
- 继承与实现:①类只能单继承 ②类可以多实现 ③接口之间可以实现多继承
4.2.4 JDK8后接口新规范
当接口被定义下来后,需要很多子类来实现。后期扩展维护时,需要添加新抽象方法,这时所有实现类必须都要实现,否则程序编译失败。这样导致出现很多不必要工作量。JDK8后新增了新规范。
默认方法
方法定义格式类似类成员方法,修饰符必须是default。该方法需要接口实现类来调用。
示例:
public interface Interface1 {
void show();
default int add(int x, int y) {
return x + y;
}
default int addNum(int x, int y) {
return add(x, y);
}
}
public class InterfaceImpl implements Interface1 {
@Override
public void show() {
System.out.println("实现了Interface1的show方法");
int a = addNum(1, 2);
System.out.println("调用抽象类默认方法:" + a);
}
public static void main(String[] args) {
InterfaceImpl anInterface = new InterfaceImpl();
anInterface.show();
}
}
- 静态方法
静态方法是用public(默认修饰符)修饰,方法需要添加static。接口静态方法必须用接口本身进行调用。
// 接口方法,写在Interface1接口中
static double getPI() {
return 3.14;
}
// 执行接口静态方法
Interface1.getPI();
- 私有方法(jdk1.9后)
方法必须使用private修饰,只能在本类被默认和私有方法调用
示例:
private void go(){
System.out.println("开始执行接口私有方法");
}
4.2.5 注意事项
- 接口不能实例化对象
- 一个类可以实现多个接口,多个接口中的静态方法不冲突
- 一个类继承父类同时实现多个接口,如果接口和父类出现同名方法,默认使用父类
- 一个类单继承多实现
4.3 抽象类(abstract)
在java中abstract是抽象的意思,如果一个类中有不确定的方法,需要不同的子类来实现,则可以用abstract创建抽象类,只需定义方法名,不需要具体实现。abstract关键词可以修饰类和方法。
// 抽象类格式
修饰符 abstract 类名 {
}
// 抽象方法
修饰符 abstract 返回类型 方法名(形参列表...);
// 示例
public abstract class AbstractTest {
public abstract void show();
}
抽象类的特征和注意事项:
- 抽象类不能进行实例化
- 类的成员抽象类都具备
- 抽象类不一定存在抽象方法,存在抽象方法的类一定是抽象类
- 继承抽象类的子类一定重写抽象方法,否则这个类也是抽象类
- abstract不能修饰成员变量、构造器和代码块
使用场景:
可以把抽象方法看成是一个模板,当大部分功能都相同,但是只有个别功能独特。这时就可以使用抽象类,让使用者继承抽象类重写方法。
抽象类的优势:
- 提高代码的复用性
- 需要实现的方法定义成抽象法,使使用者只需要关心要实现的功能
-
- *
本章结束,用于个人学习和小白入门,大佬勿喷!希望大家多多点赞收藏支撑支撑!