热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合

一、包定义:包是一组类的集合一个包可以包含若干个类文件,还可以包含若干个包包作用:将相关的源代码文件组织在一起类名的空间管理,利用包来划分名字空间可以避免类名冲突提供包一级的封装及

一、包
定义:
包是一组类的集合
一个包可以包含若干个类文件,还可以包含若干个包
包作用:
将相关的源代码文件组织在一起
类名的空间管理,利用包来划分名字空间可以避免类名冲突
提供包一级的封装及存取权限
包的命名:
名称“独一无二”
一般使用小写字母表示
命名方式建议:将机构的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《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》

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方法进行实例化,只能用做超类;
只有当子类实现了抽象超类的所有抽象方法,子类才不是抽象类,才能产生实例;
抽象方法的优点:
隐藏具体的细节信息,所有的子类使用的都是相同的方法原型,其中包含了调用该方法时需要了解的全部信息;
强迫子类完成指定的行为,规定所有子类的“标准”行为。
十、泛型
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》
有限制的泛型:
在参数“Type”后面使用”extends”关键字并加上类名或接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口。
注意:,对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implements关键字。
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》
十一、类的组合(和继承一样,也是一种类的重用机制)
《1.包、类的访问控制、内存回收机制、枚举类、类的继承、覆盖和隐藏、Object类、终结类与方法、抽象类、泛型、类的组合》


推荐阅读
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • Java 模式原型在游戏服务器架构中的应用与优化 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文深入解析了 jQuery 中用于扩展功能的三个关键方法:`$.extend()`、`$.fn` 和 `$.fn.extend()`。其中,`$.extend()` 用于扩展 jQuery 对象本身,而 `$.fn.extend()` 则用于扩展 jQuery 的原型对象,使自定义方法能够作为 jQuery 实例的方法使用。通过这些方法,开发者可以轻松地创建和集成自定义插件,增强 jQuery 的功能。文章详细介绍了每个方法的用法、参数及实际应用场景,帮助读者更好地理解和运用这些强大的工具。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 数组容量的动态调整与优化策略
    在探讨数组容量动态调整与优化策略时,本文分析了两种常见的方法。首先,通过使用for循环逐个复制元素实现扩容,但这种方法存在计算索引的复杂性问题。其次,利用System.arraycopy()方法进行高效复制,显著提升了性能和代码可读性。此外,文章还讨论了动态数组在不同应用场景下的优化策略,包括预分配容量和按需扩展等技术,以提高程序的整体效率。 ... [详细]
  • 【OpenCV4实战】掌握OpenCV中的键盘和鼠标事件处理技巧
    在《OpenCV4实战》中,本文详细介绍了如何在OpenCV中处理键盘和鼠标事件。首先,针对键盘事件,文章涵盖了基本原理、如何确定按键响应值以及通过按键调节图像亮度的具体方法。接着,对于鼠标事件,文章不仅讲解了基础理论,还提供了示例程序,帮助读者更好地理解和应用这些技术。通过这些内容,读者可以全面掌握OpenCV中键盘和鼠标事件的处理技巧。 ... [详细]
  • 期末Web开发综合实践项目:运用前端技术打造趣味小游戏体验
    期末Web开发综合实践项目中,学生通过运用HTML、CSS和JavaScript等前端技术,设计并实现了一款趣味性十足的小游戏。该项目不仅检验了学生对前端基础知识的掌握情况,还提升了他们的实际操作能力和创意设计水平。视频链接展示了项目的最终成果,直观呈现了游戏的互动性和视觉效果。 ... [详细]
author-avatar
陨落灬星辰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有