Java4Android之复用类

简介:

本节内容是对《Thinking in Java》中第七章 复用类的笔记和总结

1 , 复用现有的代码而不去破坏现有的代码,有两种方法:组合和继承。

2,toString()方法。在类需要转变成String对象的时候,就会调用该函数。例如有个A类的对象a , A a ;然后有语句 ”object:“+a;这时候其实是"object:"+a.toString();

3,惰性初始化。成员的初始化有很多种,我们在之前的学习中知道,如果是基本数据类型没有初始化,则会被初始化一个默认的纸,例如int的会被初始化为0;而如果是对象引用,则会被初始化为null。在定义处的初始化要比构造函数的初始化还要早,但它只能实现千遍一律的初始化。静态成员的初始化是在类加载的时候就初始化了,这个更早。对初始化代码还可以用花括号独立起来,这个和在定义处初始化是一个效果。而惰性初始化是”在你要用到该成员的时候,初始化,然后再使用“。这种延缓的初始化往往可以减少负担。因为需要才初始化嘛。

4,Java中类的继承是通过extends来实现的,继承后的派生类拥有基类的所有成员和方法。

5,每个类都可以配备一个public static void main(String[] args)方法,可方便单元测试。多个类同时拥有main函数也是没有问题的,只有命令行调用的那个main函数才会被执行。还有就算类是四有类,它的main函数也是可以被任意调用的。
6,想调用基类的成员,需要通过super.xxx();否则如果在xxx()中再掉xxx()则是递归,很明显你不是这个意思吧。

7,当创建一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。

8,带参数的构造器。

如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显式的编写调用基类构造器的语句,并且配以适当的参数列表。调用基类构造器必须是你导出类构造器要做的第一件事情(除你调用this调用其他自己构造其外)。

9,代理。代理是继承和组合之间的中庸之道。因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露该类成员对象的所有方法(就像继承)。

10,名称屏蔽。注意区分C++和Java对重载和覆写的不同处理。Java中一般都是重载,如果非得覆写,注意在函数前面加上@Override,则会覆写基类的函数。否则都是重载。

11,在组合和继承之间选择。组合和继承都是在新的类中放置子对象,组合是显式的这么做,而继承是隐式的。如何选择?组合技术常用于在新类中是有现有类的功能而非它的接口。即,在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是新类定义的接口,而非嵌入对象的接口。这个时候,一般在新类中嵌入一个现有类的private对象。但有时候也可以是public(很少),public意味这外部可以访问该成员,可能是为了便于理解吧。

在继承的时候,使用某个现有的类,并开发一个它的特殊版本。

12,protected关键字

“就用户而言,这是private的,但对于继承于此类的导出类或者其他任何位于同一个包内的类来说,它却是可以访问的”。

在设计上,最好的方式还是将域保持为private,你应该一直保留“更改底层实现”的权利,然后通过protected方法来控制类的继承者的访问权限。

13,向上转型

“为新的类提供方法”并不是继承技术中最重要的方面,其最重要的方面是用来表现新类和基类之间的关系。这种关系可以用“新类是现有类的一种类型”来概括。为什么叫向上转型,因为之前的类图结构总是把基类放到上面,所以就习惯了。向上转型是将一个较为专用的类型向较为通用的类型转换,所以总是很安全的。导出类是基类的一个超类,因为它总是包含了基类的所有,同时还可能拥有更多的方法和域。

如果某个方法为private,那它就不是类 的接口一部分。也就是向上转型的时候调不到它的。

14,final关键字

final可以修饰数据,修饰方法,类。

1)final数据。final修饰变量是使得其不会改变,类似于C++的常量,static final经常这样用,表示只有一份内存。final修饰的域不一定要在定义处初始化,可以在要用的时候初始化,这种叫“空白 final”有点类似于惰性初始化。初始化之后就改变不了它了。final修饰的引用表示你不能将该引用指向新的对象,但是对象本身的数据却还是可以变化的。final参数是指你不能在这个方法里面更改这个参数(或者引用重指),这种final参数主要是用在向匿名内部类传递数据 的时候用到。

2)final方法。把方法锁定,以防止任何继承类修改它的含义,即不会被覆盖掉。

final 和private关键字。类中所有的private方法都隐式的指定为final的。因为导出类无法取用private方法,所以也就无法覆盖它。

“覆盖”只有在某个方法是基类的接口的一部分时才会出现。如果一个方法是private,那它就不是基类接口的一部分。它仅是隐藏于类中的程序代码,只不过是有相同的名字而已。仅此。

3)final类。一个类被修饰为final,表示你不想任何类继承它。当然final类里面 的final域之类的,跟普通类里面的没有区别。不影响

15,初始化与类的加载

static代码是在类被第一次使用的时候加载的。假如两个类A,B,B extens A .那么当B对象生成的时候,首先运行基类A的static代码,然后是B的static代码,然后当这些类代码都执行完之后,对象就可以创建了。也就是执行对象相关代码。

好,今天到这里。


相关文章
|
19天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
34 6
|
7天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
34 17
|
2天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
26 4
|
3天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
11 2
|
8天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
8天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
21 3
|
12天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
12天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
8天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
11 1
|
11天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
19 3