(八)JAVA基础学习第八篇章——JAVA面向对象基础
面向对象是Java最重要的特性。Java是彻底的、纯粹的面向对象语言,在Java中“一切都是对象”。
1.面向对象的三个基本特性
面向对象的三个基本特性:封装性、继承性和多态性。
封装性
封装性能够使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不用关心对象的内部细节,使得操作对象变得简单。
继承性
在Java语言中一般类称为“父类”,特殊类称为“子类”。子类继承父类的全部变量和方法,继承性提高了代码的复用性,java只支持单继承,即一个子类只能有一个直接父类。
多态性
多态性是指在父类中成员变量和成员方法被子类继承后可以有不同的状态或表现行为。
类
类是java中的一种重要的引用数据类型,是组成java程序的基本要素。它封装了一类对象的数据和操作。
成员变量
- public、protected和private修饰符用于封装成员变量。
- static修饰符用于声明静态变量,静态变量也称为“类变量”。
- final修饰符用于声明变量,该变量不能被修改,即常量。
成员方法
1.public、protected和private修饰符用于封装方法。
2.static修饰符用于声明静态方法,静态方法也称为“类方法”。
3.final或abstract不能同时修饰方法,final修饰的方法不能在子类中被覆盖;abstract用来修饰抽象方法,抽象方法必须在子类中被实现。
4.native修饰的方法,称为“本地方法”,本地方法调用平台本地代码(如C或C++编写的代码),不能实现跨平台。
5.synchronized修饰的方法是同步的,当多线程方式同步方法时,只能串行的执行,保证线程是安全的。
6.方法声明中还有paramList部分,它是方法的参数列表。throws exceptionList是声明抛出异常列表。
包
在Java中为了防止类、接口、枚举和注释等命名冲突引用了包(package)概念,包本质上是命名空间(namespace)。在包中可以定义一组相关的类型(类、接口、枚举和注释),并为它们提供访问保护和命名空间管理。
提示:命名空间,也称名字空间、名称空间等,它表示着一个标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同的命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。
包定义
Java中使用package语句定义包,package语句应该放在源文件的第一行,在每个源文件中只能有一个包定义语句,并且包定义适用于所有类型(类、接口、枚举和注释)的文件。包名一般是公司域名的倒置。如果在源文件中没有定义包,那么类、接口、枚举和注释类型文件将会被放进一个无名的包中,也称为默认包。
包引入
为了能够使用一个包中类型(类、接口、枚举和注释),需要在Java程序中明确引入该包。使用import语句引入包。“包名.类型名”形式只引入具体类型,“包名.*”采用通配符,表示引入这个包下所有的类型。但从编程规范的角度提倡明确引入类型名,即“包名.类型名”形式可以提高程序的可读性。
注意:当源文件与要使用的类型(类、接口、枚举和注释)在同一个包中,可以不用引入包。
常用包
Java SE 提供了一些常用包,其中包含Java开发中常用的基础类。这些包有java.lang、java.io、java.net、java.util、java.text、java.awt和javax.swing。
java.lang包
java.lang包中包含了Java语言的核心类,如Object、Class、String、包装类和Math等,还有包装类Boolean、Character、Integer、Long、Float和Double。使用java.lang包中的类型,不需要显式使用import语句引入,它是由解释器自动引入。
java.io包
java.io包中提供了多种输入/输出流类,如InputStream、OutputStream、Reader和Writer。还有文件管理相关类和接口,如File和FileDescriptor类以及FileFilter接口。
java.net包
java.net包中包含进行网络相关操作的类,如URL、Socket和ServerSocket等。
java.util包
java.util包中包含一些实用工具类和接口,如集合、日期和日历相关类及接口。
java.text包
java.text包中提供文本处理、日期格式化和数字格式化等相关类及接口。
java.awt和javax.swing包
java.awt和javax.swing 包提供了Java图形用户界面开发所需要的各种类和接口。java.awt提供了一些基础类和接口,javax.swing提供了一些高级组件。
方法重载
出于使用方便等原因,在设计一个类时将具有相似功能的方法起相同的名字。例如,String字符串查找方法indexOf有很多不同的版本。indexOf(int ch)、indexOf(int ch,int fromIndex)等。
这些相同名字的方法之所以能够在一个类中同时存在,是因为他们的方法参数列表,调用时根据参数列表调用相应重载方法。
提示:方法重载中参数列表不同的含义是参数的个数不同或参数类型不同。另外,返回类型不能用来区分方法重载。
封装性和访问控制
Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有、默认、保护和公有。具体规则如表:
静态变量和静态方法
static 修饰的成员变量就是静态变量;static 修饰的方法就是静态方法。相反,没有static 修饰的成员变量就是实例变量;没有static 修饰的方法就是实例方法。
注意:
- 静态方法只可以访问静态变量和其他静态方法,而不能访问实例变量和实例方法;实例方法既可以访问实例变量变量和其他实例方法,又可以访问静态变量和静态方法。
- 调用静态变量或静态方法时,既可以通过类名调用,也可以通过实例名调用。