作者:陨落灬星辰 | 来源:互联网 | 2023-09-16 01:08
一、包定义:包是一组类的集合一个包可以包含若干个类文件,还可以包含若干个包包作用:将相关的源代码文件组织在一起类名的空间管理,利用包来划分名字空间可以避免类名冲突提供包一级的封装及
一、包
定义:
包是一组类的集合
一个包可以包含若干个类文件,还可以包含若干个包
包作用:
将相关的源代码文件组织在一起
类名的空间管理,利用包来划分名字空间可以避免类名冲突
提供包一级的封装及存取权限
包的命名:
名称“独一无二”
一般使用小写字母表示
命名方式建议:将机构的internet域名反序,作为包名的前导(域名是独一无二的)
不是标识符的字符用下划线替代
与关键字冲突,后缀下划线
开头冲突,前缀下划线
包与目录:包名即是文件夹名,即目录名;目录名不一定是包名;
静态引入:引入某一静态成员,例如:import static java.lang.Math.PI;
引入类中所有的静态成员:import static java.lang.Math.*;
二、类的访问控制权限:
类 无修饰符(默认) public
同一包中的类 是 是
不同包中的类 否 是
类的成员的访问控制权限:
共有:对类成员有访问权限即可访问
保护:只可被同一子类及其子类的方法访问
私有:只可被同一类的方法访问
默认:同一包内访问
三、内存回收机制
对象的自动回收:
无用对象:离开了作用域的对象,无引用指向的对象
java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存
java运行时系统会在对对象进行垃圾回收前,自动调用对象的finalize()方法
垃圾收集器:自动扫描对象的动态内存区,对不再使用的对象做上标记以进行垃圾回收
作为一个后台线程运行,通常在系统空闲时异步地执行
finalize()方法
在类java.lang.Object中声明,因此java中的每一个类都有该方法:
proctected void finalize() throws throwable
用于释放资源,
类可以覆盖(重写)finalize()方法
finalize()方法有可能在任何时机以任何次序执行
四、枚举类
声明枚举类:
[public] enum 枚举类型名称
[implements 接口名称列表]
{
枚举值;
变量成员声明及初始化;
方法声明及方法体;
}
特点:
枚举定义实际上是定义了一个类
所有枚举类型都隐含继承(扩展)自java.lang.Enum,因此枚举类型不能再继承其他任何类;
枚举类型的类体中可以包括方法和变量;
枚举类型的构造方法必须是包内私有或私有的。定义在枚举开头的常量会被自动创建,不能显式地调用枚举类的构造方法。
枚举类型的默认方法:
静态的values()方法用于获得枚举类型的枚举值的数组;
toString()方法返回枚举值的字符串描述;
valueOf方法将以字符串形式表示的枚举值转化为枚举类型的对象;
Ordinal方法获得对象在枚举类型中的位置索引。
五、类的继承
根据已有类来定义新类,新类拥有已有类的所有功能
java只支持类的单继承,每个子类只能有一个直接超类(父类)
超类是所有子类的公共属性及方法的集合,子类则是超类的特殊化
继承机制可以提高程序的抽象程度,提高代码的可重用性
继承语法:
[ClassModifier] class ClassName extends SuperClassName
{
//类体
}
子类不能直接访问从超类中继承的私有属性及方法,但可使用共有(及保护)方法进行访问
六、隐藏和覆盖
属性的隐藏:子类中声明了与超类中相同的成员变量名
从超类继承的变量将被隐藏
子类拥有了两个相同名字的变量,一个继承自超类,另一个由自己声明
当子类执行继承自超类的操做时,处理的是继承自超类的变量,而当子类执行它自己声明的方法时,所操做的就是它自己声明的变量
本类中声明的方法使用“super.属性”访问从超类继承的属性
访问超类的静态属性,static,不被继承,可以被所有子类对象访问,公共的
方法覆盖:如果子类不需要使用从超类继承来的方法的功能,则可以声明自己的同名方法,成为方法覆盖。
覆盖方法的参数、名称、返回都需一致。
只需在调用时使用不同的类名或对象名即可区分覆盖方法和被覆盖方法。
覆盖方法的访问权限可以比被覆盖的宽松,但是不能更为严格。
注意事项:
必须覆盖的方法:
派生类必须覆盖基类中的抽象方法,否则派生类自身也成为抽象类。
不能覆盖的方法:
基类中声明为final的终结方法
基类中声明为static的静态方法
调用被覆盖的方法:
super.overriddenMethodName();
七、Object类
所有类的直接或间接超类,处在类层次最高点;
包含了所有java类的公共属性。
Object类的主要方法:
public final Class getClass() 获取当前对象所属的类信息,返回Class对象。
public String toString() 返回表示当前对象本身有关信息的字符串对象。
public boolean equals(Object obj) 比较两个对象引用能否指向同一对象,是则返回true,否则返回false。
public Object clone() 复制当前对象,并返回这个副本。
public int hashCode() 返回该对象的哈希代码值
protected void finalize() throw Throwable
相等和同一
两个对象具体有相同的类型,及相同的属性值,则称二者相等(equal)。
如果两个引用变量指向的是同一个对象,则称这两个引用变量同一(identical)。
同一肯定相等,相等不一定同一。
‘==’,判断引用对象是否同一。Object类的equals方法,判断引用对象是否同一。(String类里面重写了equals,所以可以判断相等)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200224222018606.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0Nzg3Njcx,size_16,color_FFFFFF,t_70
instanceof 和 getclass(),都是用来判断是否是一个类型。
hashCode方法:
hashCode是一个返回对象散列码的方法,该方法实现的一般规定是:
在一个java程序的一次执行过程中,如果对象“相等比较”所使用的信息没有被修改的话,同一对象执行hashCode方法每次都应返回同一个整数。在不同的执行中,对象的hashCode方法返回值不必一致。
如果依照equals方法两个对象是相等的,则在这两个对象上调用hashCode方法应该返回同样的整数结果。
如果依据equals方法两个对象不相等,并不要求在这两个对象上调用hashCode()方法返回值不同。
clone方法:
使用clone方法复制对象:
覆盖clone方法:在Oject类中被定义为protected,所以需要覆盖为public。
实现Cloneable接口,赋予一个对象被克隆的能力(cloneability)。
finalize方法:
在对象被垃圾回收器回收之前,系统自动调用对象的finalize方法。
如果要覆盖finalize方法,覆盖方法的最后必须调用super.finalize。
getClass()方法:
final方法,返回一个Class对象,用来代表对象所属的类。
通过Class对象,可以查询类的各种信息:比如名字、超类、实现接口的名字等。
notify、notifyAll、wait方法,final方法,不能覆盖,这三个方法主要用在多线程程序中。
八、终结类与终结方法:
用final修饰的类和方法;
终结类不能被继承;只能直接使用
终结方法不能被子类覆盖;只能原样使用
九、抽象类
类名前加修饰符abstract;
可包含常规类能包含的任何成员,包括非抽象方法;
也可包含常规类能包含的任何成员,包括非抽象方法;
也可包含抽象方法:用abstract修饰,只有方法原型,没有方法的实现;
没有具体实例对象的类,不能使用new方法进行实例化,只能用做超类;
只有当子类实现了抽象超类的所有抽象方法,子类才不是抽象类,才能产生实例;
抽象方法的优点:
隐藏具体的细节信息,所有的子类使用的都是相同的方法原型,其中包含了调用该方法时需要了解的全部信息;
强迫子类完成指定的行为,规定所有子类的“标准”行为。
十、泛型
有限制的泛型:
在参数“Type”后面使用”extends”关键字并加上类名或接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口。
注意:,对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implements关键字。
十一、类的组合(和继承一样,也是一种类的重用机制)