JAVA_Lesson8(传智播客笔记之继承、单例设计模式懒汉式、饿汉式)
数组对象工具的建立(重要的是这种思想)
主函数是静态的,主函数需要调用的也需要static。
当有2个.java文件时,先编译含有函数功能的.java文件,再编译含主函数的.java文件。(因为主函数中要用到该函数)
Question:编译含main的.java文件,会出现2个.class文件?
其实系统已经帮你做过来了这个事情。(java编译器发现该类中用到了其他类,会去classpath或者.(当前目录)下去找,若没有仍然没有会去和这个类名相同的.java文件,找到后再对其进行编译。)
有些类中只提供了工具和方法,一个非静态方法都没有,全是静态的。那么就用static,不需要创建对象(也可以创建,就是有点多余,没有意思)那么干脆就不让你创建对象,可以在类中的构造函数私有化使用return语句(对象一创建就需要初始化)。
文档注释(这一集没有细看):
Javadoc(java安装目录下Bin文件下的一个工具)可以提取文档注释。
面向对象(单例设计模式)
设计模式:对问题行之有效的解决方式都记录下来,比较通用的东西。(对产生的问题优化的过程记录下来了)
单例设计模式:解决的问题:可以保证一个类在内存中的对象唯一性。
需求分析:什么时候需要保证类在内存中的对象唯一性呢?就是想实现配置信息的共享操作(就是A对配置信息操作过后能保存,B对配置信息操作时和A初步对配置信息创建的对象不一样)。 解决方案:用全静态(生命周期过长,不能采纳这样的方法)。
如何保证对象的唯一性:
1. 不允许其他程序用new创建该类对象。
2. 在该类中创建一个本类实例。
3. 对外提供一个方法,让其他程序可以获取该对象。
步骤(牛人已经想好了的办法):
1. 私有化该类构造函数。(让其无法初始化对象)
2. 通过new在本类中创建一个本类对象。
3. 定义一个公有的方法,将创建的对象返回。
Class Single{Static Single s=new Single(); //步骤2 类名调用的前提Private Single() //步骤1{}Public static Single getInstance() 类名调用的前提{Return s; //步骤3}}Class SingleDemo{Public static void main(String[] args){New Single().getInstance();(无法new了,人家已经私有化了。我们是不能创建对象,可以考虑类名调用)Single ss=Single.getInstance();//这样我们就拿到了这个类的实例。Single ss=Single.s;//右边因为是静态变量,可以直接引用。这样做虽然可以用,但是不可控。用上面的可以给获取实例加入一些条件,往实参里面传入参数,符合就给你用,不符合就不让你用。有了方法就有了可控的可能,例如可以在方法中加入if。
}}
可以测试:
Single s1=Single.getInstance();Single s2=Single.getInstance();Sop(s1==s2); //测试结果为真,可以保证唯一性。
内存图解:
单例设计模式(懒汉式)
Class Single //类一加载,对象就已经存在了。饿汉式(开发多用这个,懒汉式被多线程并发访问时,有可能不能保证对象的唯一性,存在安全隐患)用单例的模式就是为了获取你对象的。{Static Single s=new Single(); //步骤2 类名调用的前提Private Single() //步骤1{}Public static Single getInstance() 类名调用的前提{Return s; //步骤3}}
饿汉式
Class Single2 //类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象//延迟加载形式(面试多考这个)懒汉式{Private static Single2 s=null;Private Single2(){}Private static Single2 getInstance(){If(s==null)S=new Single2();Return s;}}
继承
面向对象的三大属性:(封装、继承、多态)
父类(基类、超类)
继承好处:1.提高代码的复用性
2. 类与类之间产生关系,给多态产生前提。(没有继承就没有多态。)
继承就是向上不断抽取共性的过程。
单继承与多继承
Java中支持单继承,不直接支持多继承,但对C++中的多继承进行改良。
单继承(一个子类只能有一个直接父类)
多继承(一个子类中有多个直接父类,java中对其进行改良了) 因为当2个父类中有2个相同的方法时,子类中调用时不知道该调用哪一个。但是java支持多重继承。
当要使用一个继承体系时:
1. 查看该体系中的顶层类,了解该体系的基本功能
2. 创建体系最子类对象,完成功能的使用
在java中多继承是通过“多实现”来实现的。
定义继承
什么时候定义继承? 存在着所属关系的时候(xxx是yyy中的一种),就定义继承。
子类中成员变量的特点:
Class Fu{Int num=4;}Class Zi extends Fu{Int num=5;Void show(){Sop(num+”...”+num);}}Class ExtendsDemo2{Public static void main(String[] args){Zi z=new Zi();Z.show();}}
打印结果为:5...5(自己本空间有就不去父类找)跟我猜测的结果一样
但是并不是覆盖了。但是怎么去操作父类中的num呢?
当本类的成员和局部变量重名用this区分,类似的,当子类中的成员变量同名用super来区分。This和super的用法很相似 。
This:代表了一个本类对象的引用
Super:代表了一个父类空间。
子父类内存图解(了解即可,开发中用的很少,父类有的一般子类不会重新写,一般拿来直接用即可,而且通常情况下num均是私有的,直接使用setNumber方法和getNumber方法即可):
子类不能直接访问父类私有内容。但是可以通过super.getNumber()可以访问。(但是面试常见)
子父类成员函数特点:
但是特殊情况,子类和父类中成员函数一致时。会运行子类函数,类似于“覆盖”,但是不属于覆盖,这是函数在子父类中的特性(函数有2个特性:1.重载。同一个类中2.覆盖:子类中,覆盖也称之为重写)。直接运行自己的成员函数即可:
覆盖的前提:函数声明必须得一致,而重载不区分函数返回值类型。
覆盖注意事项:
1. 子类覆盖父类方法,子类权限必须要大于等于父类权限。(public、privatae以及默认权限)
2. 当权限相同时,若父类的方法为static时,子类不能对其覆盖。或者子类单方为static也不行,只有当双方都为static才可以覆盖。(这种情况很少见,等学了多态就清楚原因)
什么时候使用覆盖操作?
不建议对源代码进行直接修改,可以再搞一个类。当对一个类进行子类的拓展时,子类需要保留父类的功能声明,但是要定义子类中该功能的特有功能,就要用覆盖操作来完成。
JAVA_Lesson8(传智播客笔记之继承、单例设计模式懒汉式、饿汉式)相关推荐
- 传智播客python笔记_python传智播客笔记--第十天:隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写...
封装,继承,多态 隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写 -**************************************************** ...
- JAVA_Lesson14(传智播客笔记之多线程)
多线程间通信-示例 之间是很多线程都在执行同一项任务,但是现在他们处理的任务不同(处理的还是同一资源). 线程间通信-等待唤醒机制(握手机制) 应该有个判断里面是否有资源的标记flag,判断是否有资源 ...
- photoshop基础教程视频-贺叶铭-传智播客-笔记
界面构成 1.菜单栏 2.工具箱 3.工具属性栏 4.悬浮面板 5.画布 ctrl+n 新建对话框 (新建画布) 画布200*200大小,是指以毫米为单位,当不说单位,默认是毫米. 打开对话框:ctr ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十五讲:HTML教程笔记
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十五讲:HTML教程笔记 摘要:通过前节<第十三讲:盒子的定位实例>学习了网站建设中的DIV+CSS中实例综合应用介绍.本节对HTML试题笔记进 ...
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)
day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复 ...
- php从入门到精通19天笔记,传智播客-PHP从入门到精通(19天)-video
教程名称:传智播客-PHP从入门到精通(19天)-video 教程目录:├PHP传智社区学习资源.zip├下载必看 .txt├│ ├10目录访问权限(包括分布式权限).wmv│ ├11多站点配置. ...
- 【传智播客】Libevent学习笔记(三):事件循环
目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第34讲:PHP 封装、继承、多态
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第34讲:PHP 封装.继承.多态 封装就是把抽象出的数据和对数据的操作封装在一起,通过public. protected和private进行修饰.继承可以 ...
- 传智oracle,传智播客Oracle笔记
Oracle笔记 oracle 传智播客_ORACLE经典视频教程 笔记(2008-09-09 15:32:34) 标签:it 分类:Oracle 1.3个默认用户 sys chang_on_inst ...
最新文章
- Error in x$e : $ operator is invalid for atomic vectors
- oracle中forall in,oracle10g的forall功能加强
- windows 启动停止 java进程
- 简单的makefile模板
- 【bzoj1146】 [CTSC2008]网络管理Network【树链剖分+树套树+二分 线段树套Treap】
- JavaScript文档对象模型DOM节点操作之父节点和子节点(2)
- wince 开发_正运动技术运动控制卡应用开发教程之Python
- 慢日志之一:开启mysql慢查询日志并使用mysqldumpslow命令查看,分析诊断工具之四...
- c# oracle 中文列名,sql中中文列名
- java-net-php-python-jsp固定资产管理系统计算机毕业设计程序
- 国际能源署: 分散式系统是穷乡能源普及最具经济效益的解方
- 光电式液位传感器和电容式液位传感器的区别
- 【Go】解析X509
- prometheus 配置服务器监控、服务监控、容器中服务监控与告警
- Arnold材质节点篇-摄像机
- 华为nova3i 计算机在哪里,华为nova3i常见问题汇总,你想了解的都在这里
- Linux26期 6月21日
- 19.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)
- PHP高级工程面试题汇总(2018.05)
- 使用dd命令制作U盘启动盘
热门文章
- 计算机思维与音乐有什么关系,音乐与创造性思维
- 在windows server2008中安装并管理mysql
- 21级数据结构与算法实验6——图论
- C语言用指针写一个投票程序,投票系统设计,C语言编写投票及排序系统(框架)...
- acro autoExpandParent在Tree组件内不生效
- 等级保护5个级别详细说明-行云管家
- 你用过这5个谷歌浏览器的插件吗?
- 基于ssm的流浪猫狗救助系统(springmvc spring mybatis mysql jsp)1002
- 配置 Docker 镜像加速 -小白实操记录
- 企业支付宝,登录限制,大额三年,不可用余额,支付关闭,