15-Java|单例模式
前言定义单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。 特点 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 单例模式保证了全局对象的唯一性,比如系统启动读取配置文件就需要单例保证配置的一致性。 实现思路 如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为 private,这样,就不能用 new 操作符在类的外部产生类的对象 但在类内部仍然可以产生该类的对象, 参考链接 http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/ https://zhuanlan.zhihu.com/p/453577698 https://www.cnblogs.com/itmuzi/p/16365773.html https://blog.csdn.net/liu_ ...
14-Java|static关键字
static 关键字介绍Java 中的 static 关键字主要用于内存管理。我们可以应用 Java static 关键字在变量、方法、代码块和内部类中。static 关键字属于类,而不是类的实例。静态(static)修饰如下: 变量:称为类变量、静态变量 方法:称为类方法、静态方法 代码块:称为静态代码块 嵌套类:称为静态内部类 static 关键字的使用静态变量类的成员变量可以分为以下两种: 静态变量(或称为类变量),指被 static 修饰的成员变量。 实例变量,指没有被 static 修饰的成员变量。 静态变量与实例变量的区别如下: 1)静态变量 运行时,Java 虚拟机只为静态变量分配一次内存,加载类过程中完成静态变量的内存分配。存在方法区的静态域中 在类的内部,可以在任何方法内直接访问静态变量。 在其他类中,可以通过类名访问该类中的静态变量。 2)实例变量 每创建一个实例,Java 虚拟机就会为实例变量分配一次内存。 在类的内部,可以在非静态方法中直接访问实例变量。 在本类的静态方法或其他类中则需要通过类的实例对象进行访问。 静态变量在类中的作用如下: 静 ...
13-Java|Object类
Object 类 java.lang.Object 类是所 Java 类的根父类 如果在类的声明中未使用 extends 关键字指明父类,则默认父类是 Object 类。Object 类中的功能(属性、方法)就具有通用性属性 equals()/toString()/getClass()/hashCode()/clone()/finalize()/wait()/notify()/notifyAll() Object 类只声明了一个空参的构造器 地址 == 和 equals 的区别回顾 == 的使用 == 是运算符 可以使用在基本数据类型变量和引用数据类型变量中 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(涉及自动类型提升) 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同(即两个引用是否指向同一个对象实体) 补充:使用时,必须保证符号左右两边的变量类型一致 equals() 方法的使用 一个方法,不是运算符,只能适用于引用数据类型 ...
12-Java|多态性
介绍多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。 以下部分内容摘自这位博主,写的非常好,推荐 Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。 继承:在多态中必须存在有继承关系的子类和父类。 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法 多态的格式: 父类类型 变量名 = new 子类类型(); 变量名.方法名 ...
11-Java|super关键字
由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字。super 关键字的功能 在子类的构造方法中显示的调用父类构造方法 访问父类的成员方法和变量 super 调用父类构造方法super 关键字可以在子类的构造方法中显式地调用父类的构造方法,基本格式如下:super(parameter-list);其中,parameter-list 指定了父类构造方法中的所有参数。super( ) 必须是在子类构造方法的方法体的第一行。 例1声明父类 Person 和子类 Student,在 Person 类中定义一个带有参数的构造方法,代码如下: 12345678public class Person { public Person(String name) { }}public class Student extends Person {} 会发现 Student 类出现编译错误,提示必须显式定义构造方法,错误信息如下: Implicit super constru ...
09-Java|方法重写
定义在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。 子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。 要求在重写方法时,需要遵循下面的规则: 参数列表必须完全与被重写的方法参数列表相同。 返回的类型必须与被重写的方法的返回类型相同(Java1.5 版本之前返回值类型必须一样,之后的 Java 版本放宽了限制,返回值类型必须小于或者等于父类方法的返回值类型)。 访问权限不能比父类中被重写方法的访问权限更低(public > protected > default > private)。 重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。例如,父类的一个方法声明了一个检査异常 IOException,在重写这个方法时就不能抛出 Exception,只能拋出 IOExcepti ...
10-Java|封装继承
封装 封装是什么呢 在面向对象程序设计中,封装是指将数据和操作数据的方法绑定在一起,并将这些绑定在一起的数据和方法封装在一个对象中。封装的目的是隐藏对象内部的实现细节,只向外界提供必要的接口,从而提高程序的复用性和可维护性 封装的好处 隐藏对象内部的实现细节,只提供必要的接口,使程序更加容易使用和维护。 提高程序的复用性。封装可以将一个对象的实现细节与它的外部接口分开,从而使得一个对象可以被多个程序使用。 提高程序的安全性。封装可以让程序员在设计对象时更加注重数据的安全性,而不用担心外部的程序会破坏对象的内部数据。 提高程序的可维护性。封装可以使程序员在修改对象内部实现时不用担心会影响到外部的程序,这样可以极大地提高程序的可维护性。 封装的步骤 修改属性的可见性来限制对属性的访问(一般限制为private) 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525 ...
08-Project02|客户信息管理软件
目标 模拟实现一个基于文本界面的《客户信息管理软件》 进一步掌握编程技巧和调试技巧,熟悉面向对象编程 主要涉及以下知识点: 类结构的使用:属性、方法及构造器 对象的创建与使用 类的封装性 声明和使用数组 数组的插入、删除和替换 关键字的使用:this 需求说明 模拟实现基于文本界面的《拼电商客户管理系统》。 该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。 项目采用分级菜单方式。主菜单如下: 123456789-----------------客户信息管理软件----------------- 1 添 加 客 户 2 修 改 客 户 3 删 除 客 户 4 客 户 列 表 5 退 出 请选择(1-5): 添加客户123456789请选择(1-5):1---------------------添加客户-------- ...
07-Java|面向对象上
人有不为也,而后可以有为 面向对象内容的三条主线: Java 类及类的成员:属性、方法、构造器、代码块、内部类 面向对象的三大特征:封装、继承、多态性 其它关键字:this、super、static、final、abstract、interface、package、import 面向过程(POP)与面向对象(OOP) 二者都是一种思想,面向对象是相对于面向过程而言的。 面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。 面向对象,将功能封装进对象,强调具备了功能的对象,以类 / 对象为最小单位,考虑谁来做。 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等 类和对象类(Class)和对象(Object)是面向对象的核心概念 类是对一类事物的描述,是抽象的、概念上的定义 对象是实际存在的该类事物的每个个体,因而也称为实例(instance) Java 类及类的成员 属性:对应类中的成员变量 行为:对应类中的成员方法 类的成员:属性语法格式 变量的分类 变量的区别 默认初始化值当一个对象被创建时, ...
06-Java|数组
保持对世界的渴望与好奇,而非被浅薄的快乐左右 数组的概述概述:数组是一种数据结构,用来存储同一类型值的集合。通过一个整形下标(index,或称索引)可以访问数组中的每一个值。 特点: 数组是有序排列的 数组长度一旦确定,不能修改 创建数组对象会在内存中开辟一整块连续的空间 数组属于引用类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型 分类: 按照维度:一维数组、二维数组、… 按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组 数据结构: 数据与数据之间的逻辑关系:集合(关系很弱)、一对一(数组里面的元素)、一对多(二叉树)、多对多(社交网络) 数据的存储结构: 线性表:顺序表(比如:数组)、链表、栈、队列、 树形结构:二叉树、树形结构 数组的声明Java 虚拟机的内存划分为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 区域名称 作用 虚拟机栈 用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型、对象引用,方法执行完,自 ...