18.1、面向对象基本原则 18.1.1、面向抽象原则 抽象类特点: a、抽象类中可以有abstract方法,也可以有非abstract方法。 b、抽象类不能用new运算符创建对象。 c
如果一个类是隐藏的,当使用Visual Studio代码的对象脚本扩展时,它不会在类引用中列出,也不会在studio检查器的工作区窗口中列出,也不会在对象脚本资源管理器窗格中列出。(但是,如果在“打开”对话框中键入该类的名称,或者在使用VS Code - ObjectScript时将其保存到本地工作区,仍然可以在Studio中打开该类。)
假设某个项目组分为需求组(Requirement Group,简称RG)、美工组(Page Group,简称PG)、代码组(Code Group,简称CG),还有一个项目经理,刚开始的时候客户(甲方)很乐意和每个组探讨,比如和需求组讨论需求,和美工讨论页面,和代码组讨论实现,告诉他们修改这里,删除这里,增加这些等等,这是一种比较常见的甲乙方合作模式,甲方深入到乙方的项目开发中,我们把这个模式用类图表示一下:
在 Java 中如果想让一个类不能被继承和修改,这时我们应该使用 final 关键字对类进行修饰。不过这种要么可以继承,要么不能继承的机制不够灵活,有些时候我们可能想让某个类可以被某些类型继承,但是又不能随意继承,是做不到的。Java 15 尝试解决这个问题,引入了 sealed 类,被 sealed 修饰的类可以指定子类。这样这个类就只能被指定的类继承。
最新通知 ●回复"每日一练"获取以前的题目! ●【新】Android视频更新了!(回复【安卓视频】获取下载链接) ●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接) ●【新】HTML5知识点视频更新了!(回复【前端资料】获取下载链接) ●答案公布时间:为每期发布题目的第二天 ★【新】回复“测试题”获取昨天发布的软件工程师初级阶段测试题答案 ★【新】回复“学习资料”获取java学习电子文档 ★【新】需要求职简历模板的可以加小编微信xxf960513 聊天系统 ●我希望大家积极参与答题!有什么不
绑定:一个方法的调用与方法所在的类关联起来。java中的绑定分为静态绑定和动态绑定,又被称作前期绑定和后期绑定。 静态绑定:(final、static、private)在程序执行前已经被绑定,也就是说在编译过程中就已经知道这个方法是哪个类的方法,此时由编译器获取其他连接程序实现。 动态绑定:在运行根据具体对象的类型进行绑定。 1.静态绑定 private:不能被继承,则不能通过子类对象调用,而只能通过类本身的对象进行调用,所以可以说private方法和方法所属的类绑定; final:fina
在整个io包中,唯一表示与文件本身有关的类就是File类。使用File类可以进行创建或删除文件等常用操作,要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下
简评:作为一位 Android 开发者,Android Studio 肯定是每天都要打交道的,熟练掌握其中的快捷键等技巧可以提高我们不少的效率。
enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,被enum关键字修饰的类型就是枚举类型,此类继承了Enum类,形式如下:
之前我们介绍的基本类型、类、接口、枚举都是在表示和操作数据,操作的过程中可能有很多出错的情况,出错的原因可能是多方面的,有的是不可控的内部原因,比如内存不够了、磁盘满了,有的是不可控的外部原因,比如网络连接有问题,更多的可能是程序的编程错误,比如引用变量未初始化就直接调用实例方法。 这些非正常情况在Java中统一被认为是异常,Java使用异常机制来统一处理,由于内容较多,我们分为两节来介绍,本节介绍异常的初步概念,以及异常类本身,下节主要介绍异常的处理。 我们先来通过一些例子认识一下异常。 初始异常 Nul
追求高内聚highly cohesive 和松耦合 loosely couple 的解决方案是面向对象设计基本核心原则。这里列出OO设计中十大原则:
枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java. lang.Enum类,而不是继承Object类,因此枚举类不能显式继承其他父类。 使用enum定义非抽象的枚举类时默认会使用final修饰,因此枚举类不能派生子类。 枚举类的构造方法只能使用private访问修饰符,如果省略,则默认使用private修饰;如果强制指定访问修饰符,则只能指定为private。 枚举类的所有实例必须在枚举类的类体第一行显式列出,否则该枚举类永远不能产生实例。列出的枚举实例默认使用public static final进行修饰。
泛型(Generics )是把类型参数化,运用于类、接口、方法中,可以通过执行泛型类型调用 分配一个类型,将用分配的具体类型替换泛型类型。然后,所分配的类型将用于限制容器内使用的值,这样就无需进行类型转换,还可以在编译时提供更强的类型检查。
本课程源码共享于 https://github.com/tree1123/learning-scala
此关键字指定类编译器应该将此方法放在它为类创建的例程中列出的方法之后。此关键字用于极少数需要控制类编译器为方法生成代码的顺序的情况。
如果在子类中定义了一个与父类签名相同的方法,那么子类中的这个方法就会覆盖父类中这个相同签名的方法。这里需要注意一点,在覆盖一个方法的时候,子类方法不能低于父类方法的可见性,比如一个同样方法签名的方法在父类中的修饰符是 public,而在子类中是 private。
它们可以在任何使用常规元组的地方使用,并且他们添加了按名称而不是位置索引访问字段的功能。
所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
一、异常基础 1、基础 try/except/else:【else是可选的】捕捉由代码中的异常并恢复,匹配except里面的错误,并执行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序) try首行底下的代码块代表此语句的主要动作:试着执行的程序代码。except分句定义try代码块内引发的异常处理器,而else分句(如果有)则是提供没有发生异常时候要执行的处理器。 try/finally: 无论异常是否发生,都执行清理行为 (发生异常时程序会中断程序,只不过会执行finally后的代码) raise: 手动在代码中接触发异常。 assert: 有条件地在程序代码中触发异常。 assert几乎都是用来收集用户定义的约束条件 with/as 在Python2.6和后续版本中实现环境管理器。 用户定义的异常要写成类的实例,而不是字符串、。 finally可以和except和else分句出现在相同的try语句内、 扩展 try/except/finally 可以在同一个try语句内混合except和finally分句:finally一定回执行,无论是否有异常引发,而且不也不管异常是否被except分句捕捉到。finally有没有异常都执行 try/except/else: except捕捉到对应的异常才执行。else 没有异常才执行、 也就是说except分句会捕捉try代码块执行时所有发生的任何异常,而else分句只在try代码执行没有发生异常时才执行,finally分句无法释放发生异常都执行。 2、try语句分句形式 分句形式 说明 except: 捕捉所有(其他)异常类型 except name: 只捕捉特定的异常 except name,value: 捕捉所有的异常和其额外的数据(或实例) except (name1,name2) 捕捉任何列出的异常 except (name1,name2),value: 捕捉任何列出的异常,并取得其额外数据 else: 如果没有引发异常,就运行 finally: 总是会运行此代码块,无论是否发生异常 空的except分句会捕捉任何程序执行时所引发的而未被捕捉到的异常。要取得发生的实际异常,可以从内置的 sys模块取出sys.exc_info函数的调用结果。这会返回一个元组,而元组之前两个元素会自动包含当前异常的名称, 以及相关的额外数据(如果有)。就基于类的异常而言,这两个元素分别对应的是异常的类以及引发类的实例。 sys.exc_info结果是获得最近引发的异常更好的方式。如果没有处理器正在处理,就返回包含了三个None值的元组。 否则,将会返回(type,value和traceback) *type是正在处理的异常的异常类型(一个基于类的异常的类对象) *value是异常参数(它的关联值或raise的第二个参数,如果异常类型为类对象,就一定是类实例) *traceback是一个traceback对象,代表异常最初发生时所调用的堆栈。 3、try/else分句 不要将else中的代码放入try:中。保证except处理器只会因为包装在try中代码真正的失败而执行,而不是为else中的情况行为失败而执行。 else分句,让逻辑封明确 4、try/finally分句 python先运行try: 下的代码块: 如果try代码块运行时没有异常发生,Python会跳至finally代码块。然后整个try语句后继续执行下去。 如果try代码块运行时有发生异常,Python依然会回来运行finally代码块,但是接着会把异常向上传递到较高的try语句或顶层的默认处理器。程序不会在try语句继续执行。 try: Uppercase(open('/etc/rc.conf'),output).process() finally: open('/etc/rc.conf').close 5、统一try/except/finally分句 2.5版本后可统一(包括2.5版本) try: main-action: except Exception1: hander1 except Exception2: hander2 ... else: else-block finally: finally-block 这语句中main-action代码会先执行。如果该程序代码(m
从上面的代码中可以看到,我们继承内置类型dict并重写了它的__setitem__方法,但是只有使用d['two'] = 2才生效了
Java 是面向对象的程序设计语言,类是面向对象的重要内容,可以把了当成一种自定义类型。可以使用类来定义变量,这种类型的变量统称为引用变量。
如果您曾经为UIKit或AppKit(Apple的iOS和macOS原始用户界面框架)编程,您会知道它们使用类而非结构体来构造视图。SwiftUI并非如此:我们更喜欢将结构体用于整体视图,这有两个原因。
如果您曾经为 UIKit 或 AppKit(Apple 的 iOS 和 macOS 原始用户界面框架)编程,您会知道它们使用类而非结构体来构造视图。SwiftUI 并非如此:我们更喜欢将结构体用于整体视图,这有两个原因。
这篇主要描述Python的新风格对象(new-style objects),如下:
枚举类简介: Java5新增了一个enum关键字(它与class、interface关键字的地位相同),用以定义枚举类。枚举类也是一种特殊的类,所以也具有和类相同的变量和方法,也可以定义自己的构造器。 枚举类入门: 枚举类定义: package com.alibaba.oop; //定义了一个枚举类, public enum EnumTest { //在第一行列出4个枚举实例 SPRING,SUMMER,FALL,WINTER; } 枚举类使用: public class TestEnum
主机:localhost,端口口:3306,用户名:root,密码:123456。
然而,使用 super() 最安全,也不易过时。调用框架或不受自己控制的类层次结构中的 方法时,尤其适合使用 super()。
从Java 8 到 Java 20,Java 已经走过了漫长的道路,自 Java 8 以来,Java 生态系统发生了很多变化。最显着的变化是 Java 的发布节奏。Java 8 于 2014 年发布,Java 17 于 2021 年发布。这两个版本之间相隔了 7 年。Java17是一个长期支持(LTS)的版本,会有更稳定和持久的维护和更新。
继承这个概念做java开发的同学应该都很熟悉了,继承指的是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。数据库设计的时候也是有继承关系的,在数据库设计方法论中继承有三种,分别是具体表继承(Concrete Table Inheritance)、单表继承(Single Table Inheritance)、类表继承(Class Table Inheritance)。我们实际设计中经常会不经意中使用到数据库到继承,下面分别介绍一下他们的概念:
Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型:
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
大家好啊,我是汤圆,今天给大家带来的是《Java中的泛型 - 细节篇》,希望对大家有帮助,谢谢
Java SE 15(即将于 2020 年 9 月发布)引入封印类作为预览特性。封印类和接口对可扩展它们的子类型具有更多的控制权, 这对于一般的领域建模和构建更安全的平台库来说都是很有用的。
前言 在我们很多时候设计代码都是需要用到各种不一样的设计模式的,接下来着几篇给大家领略一下设计模式。知道设计模式的作用,以及在代码的具体体现。很多时候我们看不懂代码就是因为我们不知道它使用的设计模式。 国庆的我很痛苦,学习是痛苦的,成长是快乐的! 一、什么是面向对象 1)面向对象(Object-Orientation,简称OO)是一种系统建模技术/编程思想。 2)面向对象编程(Object-Orientation Programming,简称OOP)是按照OO的方法学来开发程序的编程方式 3) 面向
李宁老师已经在「极客起源」 微信公众号推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。读者可以在「极客起源」 公众号中输入 160442 开始学习。
如果你和我一样,已经使用Java 8很长时间了,觉得需要了解一下Java的新特性,那么这篇文章就是为你准备的。
转一篇他人写的数据库设计技巧,感觉也不一定都正确,开拓一下思路吧。 说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,从而实现封装。 数据库的最初雏形据说源自美国一个奶牛场的记账薄(纸质的,由此可见,数据库并不一定是存储在电脑里的数据^_^),里面记录的是该奶牛场的收支账目,程序员在将其整理、录入到电脑中时从中受到启发。当按照规定好的数据结构所采集到的数据量大到一定程度后,出于程序执行效率的考虑,程序员将其中的检索、更新维护等功能分离出来,做成单独调用的模块,这个模块后来就慢慢发展、演变成现在我们所接触到的数据库管理系统(DBMS)——程序开发中的一个重要分支。 下面进入正题,首先按我个人所接触过的程序给数据库设计人员的功底分一下类: 1、没有系统学习过数据结构的程序员。这类程序员的作品往往只是他们的即兴玩具,他们往往习惯只设计有限的几个表,实现某类功能的数据全部塞在一个表中,各表之间几乎毫无关联。网上不少的免费管理软件都是这样的东西,当程序功能有限,数据量不多的时候,其程序运行起来没有什么问题,但是如果用其管理比较重要的数据,风险性非常大。 2、系统学习过数据结构,但是还没有开发过对程序效率要求比较高的管理软件的程序员。这类人多半刚从学校毕业不久,他们在设计数据库表结构时,严格按照教科书上的规定,死扣E-R图和3NF(别灰心,所有的数据库设计高手都是从这一步开始的)。他们的作品,对于一般的access型轻量级的管理软件,已经够用。但是一旦该系统需要添加新功能,原有的数据库表差不多得进行大换血。 3、第二类程序员,在经历过数次程序效率的提升,以及功能升级的折腾后,终于升级成为数据库设计的老鸟,第一类程序员眼中的高人。这类程序员可以胜任二十个表以上的中型商业数据管理系统的开发工作。他们知道该在什么样的情况下保留一定的冗余数据来提高程序效率,而且其设计的数据库可拓展性较好,当用户需要添加新功能时,原有数据库表只需做少量修改即可。 4、在经历过上十个类似数据库管理软件的重复设计后,第三类程序员中坚持下来没有转行,而是希望从中找出“偷懒”窍门的有心人会慢慢觉悟,从而完成量变到质变的转换。他们所设计的数据库表结构有一定的远见,能够预测到未来功能升级所需要的数据,从而预先留下伏笔。这类程序员目前大多晋级成数据挖掘方面的高级软件开发人员。 5、第三类程序员或第四类程序员,在对现有的各家数据库管理系统的原理和开发都有一定的钻研后,要么在其基础上进行二次开发,要么自行开发一套有自主版权的通用数据库管理系统。 我个人正处于第三类的末期,所以下面所列出的一些设计技巧只适合第二类和部分第三类数据库设计人员。同时,由于我很少碰到有兴趣在这方面深钻下去的同行,所以文中难免出现错误和遗漏,在此先行声明,欢迎大家指正,不要藏私哦8) 一、树型关系的数据表 不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构: 类别表_1(Type_table_1) 名称 类型 约束条件 说明 type_id int 无重复 类别标识,主键 type_name char(50) 不允许为空 类型名称,不允许重复 type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值 这样的设计短小精悍,完全满足3NF,而且可以满足用户的所有要求。是不是这样就行呢?答案是NO!Why? 我们来估计一下用户希望如何罗列出这个表的数据的。对用户而言,他当然期望按他所设定的层次关系一次罗列出所有的类别,例如这样: 总类别 类别1 类别1.1 类别1.1.1 类别1.2 类别2 类别2.1 类别3 类别3.1 类别3.2 …… 看看为了实现这样的列表显示(树的先序遍历),要对上面的表进行多少次检索?注
这个项目较小,因为需要的大部分功能都已经在上一个项目中编写好了。在这个项目中,你将看到给既有Python程序添加GUI非常容易。
编译并运行下面代码,请选择描述正确的项。 public class XiuShiFu{ int i =10; private static float pi=3.0f;//(1) public static void main(string [] args) { public inti= 20;//(2) final doubled= 4.0d;//(3) System.out.println(i+d +pi) ;} } (a) 编译正确,输出结果28.0 (b) 编译错误,(1) 处有错误 (c) 编译错
在方法生成器方法的情况下,指定生成器应在生成列出的方法后调用。当需要控制方法生成器的调用顺序时,此关键字非常有用。
Java 是一个支持并发、基于类和面向对象的计算机编程语言。面向对象软件开发具有以下优点:
python异常: python在运行时错误称为异常 语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译。 逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成、计算或者出结果需要的过程无法执行等。 默认情况下:python脚本执行过程中出现异常后,脚本执行将被终止。 python 异常是一个对象,表示错误或意外的情况 在python检测到一个错误时,将触发一个异常: python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号。 程序员也可以在代码中托运触发异常 python异常也可以理解为:程序出现了错误,而在正常控制流以外采取的行为 第一阶段:解释器触发异常,此时当前程序流将被打断。 第二阶段:异常处理,如忽略非致命错误、减轻错误带来的影响等。 异常的功用 错误处理: python的默认处理:停止程序,打印错误消息 使用try语句处理异常,并从异常中恢复 事件通知: 用于发出有效状态信号 特殊情况处理: 无法调整代码去处理的场景 终止行为: try/finally语句可确保执行必需的结束处理机制 非常规控制流程: 异常是一种高级跳转(goto)机制 异常对象 python异常是内置的经典类exception的子类的实例 为了向后兼容,python还允许使用字符串或任何经典类实例 python2.5之后,exception是从BaseException继承的新式类(即exception的父类是BaseException类) python自身引发的所有异常都是Exception的子类的实例 大多的标准异常都是由StandardError派生的,其有3个抽象的子类 ArithmeticError:由于算术错误而引发的异常基类;包括:OverflowError、ZeroDivisionError、FloatingPorintError LookupError:容器在接收到一个无效的键或索引时引发的异常的基类;包括:IndexError、KeyError EnvironmentError:由于外部原因而导致的异常的基类;包括:IOError、OSError、WindowsError 标准异常类 AssertionError:断言语句失败 AttributeError:属性引用或赋值失败 FloatingPointError:浮点型运算失败 IOError:I/O操作失败 ImportError:import语句不能找到要导入的模块,或者不能找到该模块特别请求的名称。 IndentationError:解析器遇到了一个由于错误的缩进而引发的语法错误 IndexError:用来索引序列的整数超出了范围。 KeyError:用来索引映射的键不在映射中 KeyboardInterrupt:用户按了中断键(ctrl+c、ctrl+break、delete键) MemoryError:运算耗尽内存 NameError:引用了一个不存在的变量名 NotImplementedError:由抽象基类引发的异常,用于指示一个具体的子类必须覆盖一个方法 OSError:由模块os中的函数引发的异常,用来指示平台相关的错误 OverflowError:整数运算的结果太大导致溢出 SyntaxError:语法错误 SystemError:python解释器本身或某些扩展模块中的内部错误 TypeError:对某对象执行了不支持的操作 UnboundLocalError:引用未绑定值的本地变量 UnicodeError:在Unicode的字符串之间进行转换时发生的错误 ValueError:应用于某个对象的操作或函数,这个对象具有正确的类型,但确有不适当的值 WindowsError:模块OS中的函数引发的异常,用于指示与windowsSHUDR QAYK ZeroDivisionError:除数为0引发的异常 检测和处理异常: 异常通过try语句来检测:任何在try语句块中的代码都会被监测,以检查有无异常发生。 tr语句主要有两种形式: try-except:检测和处理异常 可以有多个e
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。
老孟导读:从学习Flutter到现在将近2年的时间,前后一共整理了179个Flutter组件的基础用法、接口说明以及使用场景,现在分享给大家,文档使用Markdown书写,希望可以帮助到你。
Java在线文档,也被称为Java API(应用编程接口)文档, 是java程序员的重要参考资料,它详细列出了Java语言的所有类、接口、方法以及参数等信息,使得我们能够了解和利用Java提供的各种功能。
1、tableau连接mysql 2、tableau常用组件的学习 1)基本筛选器(类似mysql中的where) ① 基本筛选器——维度筛选器 ② 基本筛选器——度量筛选器 ③ 基本筛选器——日期筛选器(实际就是维度筛选器) 2)上下文筛选器(类似于mysql中的and) 3)条件筛选器 4)tableau顶部筛选器(类似于mysql中的limit) 5)tableau通配符筛选器(类似于mysql中的like) 6)tableau中的排序问题(类似于mysql中的order by) 7)字段的合并、拆分与分层 8)分组:数据源分组、文件夹分组 9)计算字段(很重要) 10)参数的使用(以前不太会,好好看看) 11)集合的使用(以前不太会,好好看看)
面向对象(Object Oriented,OO)其是以对象模型为基础进行的抽象过程,并在应用过程中形成了描述自己的抽象概念定义,包括对象、类、封装、继承以及多态等。
模板方法同样也是一种很实用的方法,目的是提高代码复用,并且统一大体的算法流程,比如一个一台电脑主机,定义好放置CPU,硬盘,内存等空位后,就形成了一个骨架,那么这个就是模板,具体的CPU,内存,硬盘是什么牌子型号则不需要考虑,这些是具体到业务中的实现类所负责的事情.
在java.IO包中,File 类是唯一一个与文件本身操作有关的类,但是不涉及到文件的具体内容。文件本身指的是:创建、删除等操作
是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
领取专属 10元无门槛券
手把手带您无忧上云