Java面向对象进阶第一天
面向对象高级第一天
static关键字
是静态的意思,可以修饰成员变量,也可以修饰成员方法
成员变量的分类
静态成员变量
有static修饰,属于类,与类一起加载,内存中只有一份,可以被共享访问。
什么时候用呢?如果信息要被共享,只需要一份就用静态成员变量,比如:系统在线人数。
访问规则:
建议用类名访问:类名.静态成员变量
同一个类中,访问静态成员可以省略类名不写。
理论上也可以这样访问:对象名.静态成员变量(不推荐)
实例成员变量
无static修饰,属于对象,每个对象中都存在一份实例成员变量。比如:name age
什么时候用呢?比如:name age,每个对象中都有这些信息,而且信息还不同时,定义成实例成员变量。
访问规则:
只能用:对象名.实例成员变量。
成员方法的分类
静态成员方法
有static修饰,属于类,与类一起加载,可以被共享访问。
什么时候用呢?如果是做一个通用功能,可以用静态成员方法。
访问规则:
建议用类名访问:类名.静态方法
注意:同一个类中,访问静态成员可以省略类名不写。
理论上也可以这样访问:对象名.静态成员方法(不推荐)静态成员方法的应用:工具类
是什么? 工具类中都是静态方法,为了完成一个共用功能
好处:一次编写,处处可调,提高代码的复用性,提高开发的效率。
注意:建议把工具类的构造器私有化,因为工具类无需对外创建对象,它的方法都是静态方法,直接用类名访问即可。
实例成员方法
无static修饰,属于对象,必须用对象触发访问。
什么时候用呢?如果这个方法属于对象,而且要直接访问对象的实例成员,则声明成实例方法。
访问规则:
只能用:对象名.实例成员方法。
static的应用知识
代码块
是什么? 类的5大成分(成员变量、成员方法、构造器、代码块、内部类)之一
分类
静态代码块:(重点了解一下)
格式:static {}
特点:属于类,与类一起优先加载,自动触发执行一次。
作用:可以用于在程序启动时,进行静态资源的初始化操作实例代码块(几乎不用):
格式:{}
特点:属于对象的,每次调用构造器构建对象前都会执行一次,再执行构造器。
作用:可以用于初始化实例资源
单例设计模式
单例是一种设计模式,是为了解决某个问题
单例能解决的问题:保证一个类对外只能产生一个对象。
重点在于如何实现单例:
饿汉单例
特点:拿对象时,对象已经存在
实现步骤:
/**
* 饿汉单例设计模式
*/
public class SingleInstance {
// 1.定义一个类,将构造器私有
private SingleInstance() {}
// 2.对外提供一个静态对象
// 饿汉单例是在获取对象前,就已经准备好了一个对象
// 这个对象只能通过类名访问,所以定义成static的
public static SingleInstance instance = new SingleInstance();
}
懒汉单例
特点:要拿对象的时候,才开始创建一个对象。
实现步骤:
/**
* 懒汉单例设计模式
*/
public class SingleInstance2 {
// 2.定义一个静态的成员变量负责存储一个对象,只加载一次,只有一份。
// 专业的做法是:这里私有化,这样可以避免给别人挖坑
private static SingleInstance2 instance2;
// 1.将构造器私有化
private SingleInstance2() {}
// 3.对外提供一个静态的获取对象的方法
public static SingleInstance2 getInstance2() {
if (instance2 == null) {
// 第一次来拿对象 :此时需要创建对象。
instance2 = new SingleInstance2();
}
return instance2;
}
}
面向对象的三大特征之二:继承
继承概述、使用继承的好处
什么是继承? Java允许一个类通过extends与另一个类建立父子关系,这就是继承。
继承的格式:
子类 extends 父类
继承的特点:
子类继承父类后,就可以得到父类的属性和行为。
继承的核心优点:
提高代码的复用性,多个子类的相同代码可以放在父类中,增强了类的扩展性。
继承的设计规范、内存运行原理
设计规范:子类共用属性和行为放在父类,子类独有属性和行为放在子类自己那里。
内存原理:
子类对象实际上是由子父类这两张设计图共同创建出来的。
继承的特点
Java是单继承模式:一个类只能继承一个直接父类。
Java不支持多继承、但是支持多层继承。
Java中所有的类都是Object类的子类。
继承后:方法重写
概念:子类重写了一个声明与父类一样的方法,覆盖父类的方法。子类认为父类的该方法不好用,以后用自己重写的方法。
重写方法建议加上一个重写校验注解:@Override
作用:要求必须是正确重写的才不报错
作用2:可读性好
重写的要求:
重写方法的名称和形参列表必须与父类被重写方法的名称和形参列表一致(重点)
私有方法不能重写
静态方法不能重写
重写方法的权限 >= 被重写方法的访问权限。
在重写的方法中如果想要访问父类的方法怎么办呢?
super.方法名();
继承后:成员变量、成员方法的访问特点
就近原则
this.子类自己的成员变量
在子类方法中访问父类成员怎么办? super.父类成员变量/父类成员方法
继承后:子类构造器的特点
特点:子类的全部构造器默认都会先访问父类的无参数构造器,再执行自己的构造器
为什么呢? 先有爸爸才有儿子。 先调用父类的构造器初始化父类的数据,再调用自己的构造器初始化自己的数据。
代码层面:默认子类构造器的第一行都有一个super(), 访问父类的无参数构造器,写不写都有
继承后:子类构造器访问父类有参构造器
调用父类有参数构造器,初始化继承自父类的数据。
super(....) 根据参数调用父类构造器
this、super使用总结
this访问子类当前对象的成员。
super:在子类方法中指定访问父类的成员。
this(...) : 访问本类兄弟构造器
super(...):在本类构造器中指定访问父类的构造器
注意事项:super(...) 必须放在第一行,this(...) 也必须在第一行。因此2者不能共存一个构造器中。
Java面向对象进阶第一天的更多相关文章
- Java 面向对象编程——第一章 初识Java
第一章 初识Java 1. 什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...
- Java面向对象编程 第一章 面向对象开发方法概述
一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...
- Java面向对象进阶篇(包装类,不可变类)
一. Java 8的包装类 Java中的8种基本数据类型不支持面向对象的变成机制,也不具备对象的特性:没有成员变量,方法可以调用.为此,Java为这8 种基本数据类型分别提供了对应的 包装类(Byte ...
- Java面向对象进阶篇(抽象类和接口)
一.抽象类 在某些情况下,父类知道其子类应该包含哪些方法,但是无法确定这些子类如何实现这些方法.这种有方法签名但是没有具体实现细节的方法就是抽象方法.有抽象方法的类只能被定义成抽象类,抽象方法和抽象类 ...
- ☕Java 面向对象进阶内容
目录 == 和 equals 方法 封装 多态 抽象类和抽象方法 抽象方法 抽象类 抽象类的使用要点 接口 接口使用 内部类 String 字符串常量拼接时的优化 String Pool String ...
- Java面向对象进阶篇(内部类)
一. 概念 大部分时候,类被定义成一个独立的程序单元.有时候把一个类放在另一个类内部定义,这个类被称为内部类,包含内部类的类也被称为外部类. 内部类的主要作用: 内部类提供良好的封装,可以把内部类隐藏 ...
- Java面向对象编程 -2
成员属性封装 在类之中的组成就是属性和方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而对于属性需要较高的安全性,所以往往需要对其进行保护 这个时候就需要采用封装性对属性进行保护. 在 ...
- 王燕 201771010126《面向对象程序设计(java)》第一周学习总结
王燕 201771010126<面向对象程序设计(java)>第一周学习总结 王燕 201771010126<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部 ...
- 马凯军201771010116《面向对象程序设计(java)》第一周学习总结
马凯军201771010116<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...
- 周强201771010141《面向对象程序设计(java)》第一周学习总结
周强201771010141<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com ...
随机推荐
- 一次MTU问题导致的RDS访问故障
导语 VPN是一种通过公网连接两个或多个私网站点的专用网络,使得这些站点仿佛是通过专线连接在一起.IPSec是一套协议框架,用于保证数据传输的私密性,完整性,真实性.但是VPN网络经常会带来一些连通性 ...
- MyBatis02:流程分析、注解、代理dao实现CRUD、参数深入、传统DAO、配置
今日内容 回顾 mybatis的自定义.分析和环境搭建 完善基于注解的mybatis mybatis的curd(基于代理dao的方式)※ mybatis的参数深入及结果集的深入 mybatis中基于传 ...
- 【Java EE】Day12 XML、约束(DTD、Schema)、解析方式、Jsoup、选择器(Selector、XPath)
一.XML介绍 1.概述 Extensible Markup Language--可扩展标记语言 标记语言 :标签构成 可扩展:可以自定义标签 2.功能 存储数据 作为配置文件使用 作为数据载体在网络 ...
- WinUI(WASDK)使用MediaPipe检查手部关键点并通过ML.NET进行手势分类
前言 之所以会搞这个手势识别分类,其实是为了满足之前群友提的需求,就是针对稚晖君的ElectronBot机器人的上位机软件的功能丰富,因为本来擅长的技术栈都是.NET,也刚好试试全能的.NET是不是真 ...
- Django框架三板斧本质-jsonResponse对象-form表单上传文件request对象方法-FBV与CBV区别
目录 一:视图层 2.三板斧(HttpResponse对象) 4.HttpResponse() 5.render() 6.redirect() 7.也可以是一个完整的URL 二:三板斧本质 1.Dja ...
- Python怎么引入不同的库?
怎么引入不同的库? 在线安装库 1)pip install 模块名 2)国内源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirr ...
- Jmeter 之吞吐量控制器
作用: 吞吐量控制器可用来模拟混合场景的压测业务,即一部分用户执行场景A,一部分用户执行场景B 字段说明: Total Excutions:执行请求总数 Percent Excutions:执行线程数 ...
- Apache Dubbo 官方正式发布 Spring 6 & Spring Boot 3 支持
Dubbo 简介 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java.Golang 等多语言 SDK 实现.使用 Dubbo 开发的 ...
- CSS 奇思妙想之酷炫倒影
在 CSS 中,倒影是一种比较常见的效果.今天,我们就将尝试,使用 CSS 完成各类不同的倒影效果,话不多说,直接进入主题. 实现倒影的两种方式 首先,快速过一下在 CSS 中,实现倒影的 2 种方式 ...
- SpringBoot 项目中配置多个 Jackson 的 ObjectMapper ,以及配置遇到的坑
目录 问题说明 原因排查分析 结论总结 Jackson 自动装配分析 问题说明 我们都知道,SpringBoot 项目中,如果引入了 Jackson 的包,哪怕不配置,SpringBoot 也会帮我们 ...