Java 面向对象编程基础总括





  • Java是一种面向对象的编程语言。面向对象编程,英文是 Object-Oriented Programming,简称 OOP。

什么是面向对象编程?

面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构。OOP 的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP =对象+类+继承+多态+消息,其中核心概念是类和对象。



故屿

故屿
故屿







面向对象基础



① 方法

定义方法的语法:

修饰符 方法返回类型 方法名(方法参数列表) {
若干方法语句;
return 方法返回值;
}

方法的返回值通过 return 语句实现,如果没有返回值,返回类型设置为 Void,可以省略 return。
一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型。



② 构造方法

创建实例的时候,实际上是通过构造方法来初始化实例的,

由于构造方法是如此特殊,所以构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有 void),调用构造方法,必须用 new 操作符。

一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用。调用其他构造方法的语法是 this(…);



③ 方法重载

方法名相同,但各自的参数不同,称之为方法重载。
方法重载的返回值类型通常都是相同的;



④ 继承

Java使用 extends 关键字来实现继承;
继承有个特点,就是子类无法访问父类的 private 字段或者 private 方法。

继承是面向对象编程的一种强大的代码复用方式;
Java只允许单继承,所有类最终的根类是 Object;
protected 允许子类访问父类的字段和方法;

在继承中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写 (Override)。
如果方法签名相同,并且返回值也相同,就是 Override。



⑤ 多态

多态是指:针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法;
Java 的方法调用总是作用于运行期对象的实际类型,这种行为称为多态。



⑥ 抽象类

如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法 (abstract)。
如果一个 class 定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用 abstract 修饰。因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。

使用 abstract 修饰的类就是抽象类。我们无法实例化一个抽象类。



⑦ 接口

所谓接口 (interface):就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是 public abstract 的,所以这两个修饰符不需要写出来(写不写效果都一样)。
当一个具体的 class 去实现一个 interface 时,需要使用 implements 关键字。

在 Java 中,一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个 interface 。

Java 的接口特指 interface 的定义,表示一个接口类型和一组方法签名,而编程接口泛指接口规范,如方法签名,数据格式,网络协议等。
一个 interface 可以继承自另一个 interface 。interface 继承自 interface 使用 extends,它相当于扩展了接口的方法。



⑧ 静态 字段和方法

用 static 修饰的字段,称为静态字段。有静态字段,就有静态方法。用 static 修饰的方法称为静态方法。
因为静态方法属于 class 而不属于实例,因此,静态方法内部,无法访问 this 变量,也无法访问实例字段,它只能访问静态字段。
静态方法也经常用于辅助方法。注意到 Java 程序的入口 main() 也是静态方法。



⑨ 包

在 Java 中,我们使用 package 来解决名字冲突。
Java 定义了一种名字空间,称之为包: package。一个类总是属于某个包,类名(比如 Person)只是一个简写,真正的完整类名是 包名.类名。
在 Java 虚拟机执行的时候,JVM 只看完整类名,因此,只要包名不同,类就不同。包可以是多层结构,用 . 隔开。例如:java.util。

位于同一个包的类,可以访问包作用域的字段和方法。不用 public、protected、private 修饰的字段和方法就是包作用域。



⑩ 作用域

public:

定义为 public 的 class、interface 可以被其他任何类访问;

private:

定义为 private 的 field、method 无法被其他类访问;

protected:

定义为 protected 的字段和方法可以被子类访问,以及子类的子类;protected 作用于继承关系。

package:

包作用域是指一个类允许访问同一个 package 的没有 public、private 修饰的 class,以及没有 public、protected、private 修饰的字段和方法。
只要在同一个包,就可以访问 package 权限的 class、field 和 method 。



⑪ 内部类

把不同的类组织在不同的包下面,对于一个包下面的类来说,它们是在同一层次,没有父子关系;
还有一种类,它被定义在另一个类的内部,所以称为内部类(Nested Class)



⑫ classpath 和 jar

classpath 是 JVM 用到的一个环境变量,它用来指示 JVM 如何搜索 class。
JVM 通过环境变量 classpath 决定搜索 class 的路径和顺序;

jar 包相当于目录,可以包含很多 .class 文件,方便下载和使用。



⑬ 模板

Java 9 引入的模块目的是为了管理依赖;
使用模块可以按需打包 JRE;
使用模块对类的访问权限有了进一步限制。



--------------------------



Java 核心类



① 字符串和编码

String

是一个引用类型,它本身也是一个 Class。它的一个重要特点是字符串不可变;
Java 字符串 String 是不可变对象;
字符串操作不改变原字符串内容,而是返回新字符串;
常用的字符串操作:提取子串、查找、替换、大小写转换等;

在早期的计算机系统中,为了给字符编码,美国国家标准学会(American National Standard Institute:ANSI)制定了一套英文字母、数字和常用符号的编码,它占用一个字节,编码范围从 0 到 127,最高位始终为 0,称为 ASCII 编码。
例如,字符 ‘A’ 的编码是 0x41,十进制是 65;字符 ‘1’ 的编码是 0x31,十进制是 49。

Java 使用 Unicode 编码表示 String 和 char;
转换编码就是将 String 和 byte[] 转换,需要指定编码;
转换为 byte[] 时,始终优先考虑 UTF-8 编码。



② StringBuilder

为可变对象,用来高效拼接字符串;
为了能高效拼接字符串,Java 标准库提供了 StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往 StringBuilder 中新增字符时,不会创建新的临时对象。
StringBuilder 可以支持链式操作,实现链式操作的关键是返回实例本身;
StringBuffer 是 StringBuilder 的线程安全版本,现在很少使用。



③ StringJoiner

用指定分隔符拼接字符串数组时,使用 StringJoiner 或者 String.join() 更方便;
用 StringJoiner 拼接字符串时,还可以额外附加一个“开头”和“结尾”。



④ 包装类型

把 int 基本类型变成一个引用类型,我们可以定义一个 Integer 类,它只包含一个实例字段 int,这样,Integer 类就可以视为 int 的包装类(Wrapper Class)。



⑤ JavaBean

如果读写方法符合以下这种命名规范(get/set方法),那么这种 class 被称为 JavaBean 。

// 读方法:
public Type getXyz() { }
// 写方法:
public void setXyz(Type value) { }

JavaBean 主要的作用是用来传递数据,即把一组数据组合成一个 JavaBean 便于传输。



⑥ 枚举类

为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用 enum 来定义枚举类。

Java 使用 enum 定义枚举类型,它被编译器编译为 final class Xxx extends Enum { … };
通过 name() 获取常量定义的字符串,注意不要使用 toString();
通过 ordinal() 返回常量定义的顺序(无实质意义);
可以为 enum 编写构造方法、字段和方法
enum 的构造方法要声明为 private,字段强烈建议声明为 final;
enum 适合用在 switch 语句中。



⑦ 记录类

使用 Record 定义的是不变类;
可以编写 Compact Constructor 对参数进行验证;
可以定义静态方法。



⑧ BigInteger

java.math.BigInteger 就是用来表示任意大小的整数。
BigInteger 是不变类,并且继承自 Number;
将 BigInteger 转换成基本类型时可以使用 longValueExact() 等方法保证结果准确。



⑨ BigDecimal

和 BigInteger 类似,BigDecimal 可以表示一个任意大小且精度完全准确的浮点数。
BigDecimal 用于表示精确的小数,常用于财务计算;
比较 BigDecimal 的值是否相等,必须使用 compareTo() 而不能使用 equals()。



⑩ 常用工具类

Math

Math 类就是用来进行数学计算的,它提供了大量的静态方法来便于我们实现数学计算。

Random

Random 用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。

SecureRandom

SecureRandom 就是用来创建安全的随机数。









Note:
欢迎点赞,留言,转载请在文章页面明显位置给出原文链接
知者,感谢您在茫茫人海中阅读了我的文章
没有个性 哪来的签名!
详情请关注点我
持续更新中

扫一扫 有惊喜!
© 2021 04 - Guyu.com | 【版权所有 侵权必究】

猜你喜欢

转载自blog.csdn.net/weixin_49770443/article/details/115199723