面向对象编程中使用的关键字
- this
- super
- abstract
- final
- static
- instanceof
- package
- import
this关键字的使用
1.this关键字
this可以理解为:当前对象或者当前正在创建的对象(构造器中使用)
1.1 在类的方法中,我们可以使用"this.属性名"或者"this.方法"的方法,调用类中定义的属性或者方法。
通常情况下,我们都会省略"this."。特殊情况,如果方法的形参和类中定义的属性名相同时,我们必须通过"this.属性名"的方式显式调用类种定义的属性,否则将会出现逻辑错误。
1.2 this调用构造器
① 我们可以在类的构造器中,显式的使用"this(形参列表)"的方法调用类中定义好的构造器;
② 构造器中不能通过"this(形参列表)"的方式调用自己,否则程序将会陷入无限死循环;
③ 如果一个类中声明了n个构造器,那么最多会有n-1个构造器使用了"this(形参列表)";
④ "this(形参列表)"必须放在构造器的首行;
⑤ 在类的一个构造器中,最多只能声明一个"this(形参列表)";
⑥ 在类中的一个构造器中,最多只能使用"super(形参列表)" 或者"this(形参列表)"二者中的一个。
2.this关键字所修饰的对象
属性、方法、构造器
super关键字
super关键字的使用
1.super理解为:父类的
2.super可以用来调用:属性、方法、构造器
3.super的使用
3.1 我们可以在子类的方法或构造器中,通过"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯去省略这个"super.";
3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。
3.3 特殊情况:当子类重写了父类中的方法后,我们想在子类的方法中调用父类中被重写的方法时,必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法。
4.super调用构造器
4.1 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行!
4.3 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现。
4.4 在构造器的首行,既没有显式的声明"this(形参列表)"或"super(形参列表)",则默认调用的是父类中的空参构造器。super()
4.5 在类的多个构造器中,至少有一个类的构造器使用了"super(形参列表)",调用父类中的构造器。
5.子类对象实例化的全过程
5.1 从结果上看:
子类继承父类以后,就获取了父类中声明的属性或方法。
创建子类的对象中,在堆空间中,就会加载所有父类中声明的属性。
5.2 从过程上看:
当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类构造器, 直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所有的父类结构,所以才可以看到内存中有父类中的结构,子类对象可以考虑进行调用。
明确:虽然创建子类对象时,调用了父类的构造器,但自始至终就创建过一个对象,即为new的子类对象。
instanceof关键字的使用
- a instanceof A:判断对象a是否是类A的实例。如果,返回true,如果不是,返回false;
- 使用情境:为了避免在向下转型时出现ClassCastException异常,我们在进行向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
- 如果a instanceof A返回true,则a instanceof B也返回true。 其中类B是类A的父类。
package关键字的使用
1. package关键字的使用
1.1 为了更好地实现对项目中类的管理,提出了包的概念;
1.2 使用package关键字声明类或者接口所属的包时,声明语句必须放在源文件的首行;
1.3 package关键字的使用方法:
package 包名;
1.4 包名,属于标识符,要满足标识符的规则和规范;
1.5 包名中,每"."一次,就代表一层文件目录;
2.补充:
2.1 同一个项目中,不能存在两个或者多个同名的包。就类似于,文件系统中,不能存在两个相同的文件夹。
2.2 同一个包中,不能存在同名的类或者接口。这是因为对Java源文件编译的时候,每个类或者接口都会生成一个类名.class或者接口名.class的文件。
如果存在同名的类或者接口,会出现命名冲突。类比于,相同文件路径下,不能存在两个或者同名的文件。
3.JDK中主要的包的介绍:
3.1 java.lang --> 包含一些Java语言的核心类,如String,Math,Integer等。使用java.lang中的类,可以不用显式的导包。如果需要使用java.lang子包的结构时,需要显式的导入。
3.2 java.net --> 包含执行与网络相关操作的类或者接口。
3.3 java.io --> 包含能提供多种输入/输出功能的类。
3.4 java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
3.5 java.text----包含了一些 java 格式化相关的类。
3.6 java.sql----包含了 java 进行 JDBC 数据库编程的相关类/接口;
3.7 java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
package关键字的使用
1. package关键字的使用
1.1 在.java源文件中使用import结构显式导入指定包下的类、接口;
1.2 声明在包的声明和类的声明之间
1.3 如果需要导入多个包时,并列写出即可
1.4 使用"xxx.*"的方式,可以导入xxx包下所有的结构。
1.5 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。如果使用java.lang子包下的结构,需要显式声明。
1.6 如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。举例:java.lang.String str = "123";
1.7 如果已经导入java.a包下的类。那么如果需要使用a子包下的类的话,仍然需要显式的导入a的子包。
1.8 import static 组合的使用:调用指定类或者接口下的静态属性或者方法