Java概览(java语言编程艺术笔记)

Java入门(1)——注释,面向对象,问题分解

 

注释

 

简单程序里广泛注释显然是愚蠢的,但是设计更大的,更复杂的程序是一种非常有用的记录。

 

面向对象

 

扩展类的实例同时也是现有类的实例。

 

这个怎么理解?虽然我知道类这个概念是源于面向对象的。现有类应该是个基础,扩展类则继承了现有类的属性:

 

举个例子:人——》周杰伦。周杰伦继承了人的固有属性,但是同时也有自己发音不清的个性。所以人是现有类,周杰伦是扩展类。或者说人是超级类,周杰伦是子类。

 

这里有个问题,供我日后解答:

 

java里有类,也有函数(这个我现在不知道叫什么,但和c里的函数很像,所以姑且叫它为函数)。这是为什么呢,因此我也难以理解面向对象和面向过程到底有什么本质区别,难道仅仅是思维过程的不同吗?面向对象讲求的是分解的思想而面向过程讲求的是过程。

 

其实这些一切的东西用c语言中的函数不就可以搞定吗。C的函数像一个黑箱,提供了几个输入的接口和输出的接口,java的类也是这样,只是把函数做的更灵活了,可以只调用其中的一小部分内容,通过属性。然而为什么java还允许写一些类似函数的“私有”的东西呢?

 

这里不得不提一点,如果有了尽可能多的函数那么可以解决尽可能多的问题,当这些函数多到一定数量时对生活的影响将是巨大的,如果有个公司肯将所有编程用到的函数弄一个数据库,当然我不知道这个库的大小是否在可实现的数量级,程序员的工作不再是编码而是挑选适合的函数用到程序里(现在的程序员也是这样吧,我不知道),或许那时编程已经类似于桌面软件一般的简单,进入我刚刚设想的数据库,搜索功能,输入参数,成功解决。

 

问题分解

 

一个程序分成若干小部分的过程。因此选择一个恰当的分解路径将是一个程序中比较困难的部分。

 

分解原则:

 

每个子问题应该执行一个在概念上简单的任务,这里无需关注在具体的实现过程是多么复杂。如何检验这任务在概念上是简单的呢?通过对它的命名,是否能对它进行准确而又简单的命名。

每个子问题应该执行尽可能通用的任务,而不是只用一遍,那还不如不分解呢。因此在评定程序的实施方案是尽可能通用的分解也成了一个重要的方面。

(本次笔记来自于《karellearnsjava》第二章)

 

Java入门(2)——bug,结构化程序,软件工程,算法

 

Bug

对于初学者来说bug肯定是很多,常见的有以下几点:

语法错误:

变量,方法名字书写错误。

将私有方法直接写在public里面。

将else写在if里面。

逻辑错误:

Fenceposterror,就是栅栏柱错误。少算了一个或者多算了一个。

Oboe(offbyoneerror),缺了一个错误,也是栅栏柱错误的一种。

解决以上两种错误的方法是,写成类似的代码:

while(条件){

执行语句

}

执行语句

第三类bug:

这个完全是我生造的概念,指的是不能将程序设计的更具有普遍性,给日后的开发管理带来难度,其实这是最大的却最很难关注的bug。

 

结构化程序:

在学会循环语言之前,同学们所写的程序,都是线性的。

循环的具体选择原则:

for循环:已知程序的循环次数。

while循环:未知程序的循环次数。

当然在大多数情况下他们是可以转换的(应该是这样的吧。)

 

软件工程:

软件工程是为了让程序的开发复杂性,即开发难度降低到可管理的范围内的一系列方法。其中最重要的方法论,便是自上而下设计(逐步求精)。

自上而下设计(逐步求精):

原则是从一个问题的顶部开始程序设子。也就是从程序最概念化,抽象化的地方开始程序设计,例如helloworld程序可以被我们概念化的称为问好。然后具体到,问什么好用什么方式问。

用这样的方法可以得到程序大体框架,然后逐步分层解决。

因此一个程序可能被分成很多方法,一个方法被调用时必须满足的条件被称为前置条件,于此相对,后置条件则指一个方法完成后必须达成的条件。

 

算法:

设计一个问题的解决思路的过程被称为算法设计。其中解决问题的方法就被称为算法。

算法必须具备以下要素。

清晰而且毫不含糊的表达形式。

该思路的每一步都应该是可行的。

在有限的几部之后,该思路总是会终止的,而不是死循环。

 

(本次笔记来自于《karellearnsjava》第三,四,五章。)

6/15/201207:06

 

Java入门(3)——计算机发展及初探,算法及编程过程,面向对象

 

计算机发展及初探

发展

计算机发展迅速,但也只是近几百年的故事。如果把公元前两千多年的算盘算上的话,计算机发展路线酷似一个底数大于1的指数函数。

计算机科学

与其说计算机科学是关于计算机的科学,毋宁说是一门解决问题的科学。

硬件

算法及编程过程

算法

算法是抽象的问题解决方案,对于编程新人来说具体编程的实现难度大于算法的,而随着编程经验的增加,算法的设计越来越成为一件有挑战的事。

之前的笔记中也提到过算法的三个要素:准确定义,有效,有限。

编程过程

  1. 创建及编辑程序
  2. 编译
  3. 调试
  4. 维护

语言类型:

1.编译型:在不同的硬件上有不同的编译器,将源文件转换为机器指令,根本原因在于基本硬件使用的是不同的机器语言。

2.解释型:将代码转换为解释器可认的中间语言,这些语言在通过解释器执行,而不是像编译型直接装换为机器语言。

Java采用的是结合策略:Java将源代码编译为普通的中间语言。java为了跨平台的同时保持程序的运行效率引入了虚拟机的概念。虚拟机将中间语言链接后的代码翻译为机器语言。具体的过程如图:

 

面向对象

在“面向过程”的语言中,程序是由过程或是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

本次笔记来自于《Java语言的科学与艺术》

 

6/21/201209:06

 

Java入门(4)——编程示例:Java程序结构,程序欣赏方式,类和对象,图形程序

 

Java程序结构

 

如图一个入门级别java程序的结构是这样的,注释,输入,主类。

注释:

注释有两种方式,一种是:/*注释内容*/,通常用于整段的注释;一种是//用于单行注释。

输入:

Java可以方便的使用程序库,这些程序库通常是其他编程人员写的工具的集合。通常大多数程序在注释后会包含import行。

主类:

这显然是java程序的主体,一般包括标题行和类定义的主体。我们可以从标题行得到重要的关于程序主体的信息,又可以在类定义的主体体会程序细节。上图程序中extends是java关键字中的一员,她表示HelloProgram是GraphicsProgram的子类,因此GraphicsPogram能做的,HelloProgram都能做。类的主体中则包括了java方法的一个示例,方法中包含的便是语句,准确的说语句才是程序的主体,虽然这里整个程序只有这一条语句。无论什么时候运行java程序,计算机总是执行包含在主类的run方法主体中的语句。

 

程序欣赏方式:

整体观:整体观只要求知其功能,而不必知其细节,实现。需要了解每行语句,或者每个方法,甚至每个程序的功能。

细节观:细节观则要求知其细节,而不对整体要求。需要知道每个变量,每个关键字的具体含义,以及每个程序的具体实现。

对于初学者更多的要求是两种观点的相互转换,既不能淹没在具体语言细节里而忽略软件工程;也不应过分的整体化而导致程序无法实现。而这样做的机会则是编程,用编程学会语言,用编程学会编程。因为在实验中我们能学会很多东西。

习语或编程模式:

Java中有着很多结构化的重复性的代码,这些代码被我们称为习语或编程模式。有时候,这些模式像Java规则或库提供的宏大有冗长的故事,然而熟记这些故事可以隐藏很多细节,好比中国成语一样,有事侯短短的几个字下面就是一个丰富多彩的故事。识别并熟记这些模式可以方便程序的实现。事实上,我们并不需要可以的记背这些模式,编程到了一定的累积程度,很多细节便自动转换成了习语或编程模式。

 

类和对象:

类,是可扩充的模板。它制定了对象的特殊风格的结构。每个对象都是特殊类的实例,类可以分别作为不同对象的模板。

对象,是一个封装状态和行为的综合实体。而对象的状态由一组属性组成,这些属性适用于该对象,并且可以随时间而更改。对象的行为指对象对其内部事件或外部对象发出请求的响应。触发特殊行为的词语称为消息。

 

图形程序:

或许有人认为对于初学者来说图形程序包含了很多解决问题以外的细节,因而不太适合初学者。所以一Java作为学生的第一门语言的课程都会使用冷冰冰的控制台程序,然而这是课程设计者丝毫不管学生的声音的愚蠢行为,更多的同学渴望的是可以写出易于交互的图形程序。这点也是本书的开创性之举。

7/3/201219:07

转载于:https://www.cnblogs.com/bear-lab/archive/2013/02/13/2910677.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙os开源邀请全球开发者,全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展...

原标题:全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展万众瞩目之下,鸿蒙OS终究还是亮相了。在今日开始的华为开发者大会(HDC)上,我们熟悉的消费者业务CEO余承东首个登场,在回顾了华为消费者业务之后,余承东话题…

java 内嵌调用_Java高级开发必会的50个性能优化的细节(珍藏版)

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。● 1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率…

SDL教程4——在VS2010中设置SDL扩展库

前几节我们了解到,SDL基本库只能加载普通的BMP图像,如果我们还想加载其它格式的图片,我们就需要用到SDL的扩展库,它可以帮助我们加载BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA and PNG等格式图片。要下载SDL扩展帮助文档&#xff…

html居右显示语言设置,iOS开发:纯代码设置UIButton文字居左或者居右显示

UIButton这个控件使用,作为资深的iOS开发人员来说是小儿科,但是有些时候还是需要记录一下UIButton的一些其他用法,这样方便快速解决实际问题。比如UIButton的纯代码编程的时候,设置文字居左显示,这个问题虽然简单的不能…

联想一体机电源键不亮_联想电脑一体机B505拆机经验

我修复联想电脑一体机的经验分享退休之后我较多的时间就是使用电脑,上上网,玩玩游戏,更多的是用电脑使用ps修图,修整照片。同时给自己的书法作品美化美化。很是方便。我这台b505的电脑,整体配置不错,就是一…

电脑入门完全自学手册_室内设计CAD施工图识读手册

室内设计全案行业班学习分为三个学习阶段第一阶段:软件技能学习,包括CAD、3DMAX、SU、PS、办公软件等第二阶段:设计理论学习,包括客户分析、方案设计、材料采买、工艺选用、预算造价等第三阶段:工程项目实战&#xff0…

[转]宝文!Apple Push Notification Service (APNS)原理与实现方案

原理 简单的说,app要单独实现消息动态更新,一种是轮询,这对用户来说会带来额外的流量。另一种方案是push,app client和server直接保持一个长连接,有新的消息时server push给app client。 这两种通过app自身实现的“pus…

if 组件是否存在_UE4 UMG简介+Slate组件问题排查

Slate 组件问题排查总结简介首先是一个工作中遇到的BUG: 用slua添加子节点到父节点上的时候,第二次打开无法显示对应的子节点Widget。对应Lua代码如下local comboBox ui_manager.ShowUI(ui_manager.UI_Config.ui_coupon_combobox,2,price,buyUIInfo.sho…

浏览器登录_经常用浏览器自动登录忘记了密码?教你一键查看网页星号密码

不知道大家有没有出现这种情况,因为一直用的网页自动填写密码来登录,所以有时候甚至把密码给忘了相信有的小伙伴有可能就会出现这种情况哈,今天小林君来教你个超简单的方法,不用安装任何软件,就可以一键查看网页上隐藏…

html图片轮播怎么做的,CSS3制作轮播图的一种方法

轮播图,网页上经常能看得见,画面比较精美,下面是纯CSS3的轮播图的一种下面是style部分:这几行都能明白吧*{margin:0;padding:0;}a{text-decoration:none}li{list-style:none;}设计宽度不要超过轮播图片的总宽度再加不到第一张1张图…

怎么让textarea占满整个td高度没用_家里没发现虫子,怎么才能确定是被什么害虫咬了?...

在家里被虫子咬,还发痒,主要有三种可能性。蚊子、跳蚤、臭虫都有可能,那么如何才能确定是被哪种害虫叮咬?接下来带大家了解三种害虫叮咬的区别!首先是蚊子,早上起来发现身上有包,先看有几处&…

上位机与1200组态步骤_组态王与 I/O 设备

组态王软件是一种通用的工业监控软件,它将过程控制设计、现场操作以及工厂资源管理融于一体,将一个企业内部的各种生产系统和应用以及信息交流汇集在一起,实现最优化管理。它基于Microsoft Windows XP/Win7/Win8/Win10/WinServer 系列操作系统…

华为鸿蒙发布2.0,华为做到了!鸿蒙2.0正式发布,苹果安卓有危机?

孩子的梦想总是天真烂漫,无论年龄大小,每个人都有属于自己的梦想,儿童节刚过华为天真的梦就照进了现实。6月2日晚间,鸿蒙2.0版本发布会如期而至,余承东正式向全世界宣布这款挑战安卓和 iOS的商用移动操作系统&#xff…

greenplum 查询出来的数字加减日期_Python实践代码总结第5集(日期相关处理)

英文的月份转数字及数字转英文import calendar# 数字转月份的简写calendar.month_abbr[12]--> Dec# 简写月份转数字list(calendar.month_abbr).index(Dec)--> 12# 数字转月份的全写calendar.month_name[12]--> December# 月份转数字list(calendar.month_name).index(D…

静态代码和动态代码的区别_无代码和低代码有哪些区别

代码是大多数软件程序和应用程序的骨干。代码是大多数软件程序和应用程序的骨干。每行代码充当一条指令:采用一种逐步性的逻辑机制,以便计算机、服务器和其他机器执行操作。想创建那些指令,就要知道如何编写代码,这项宝贵的技能有…

备注html网页代码,备注.html · dengzhao/prd_zhangyao - Gitee.com

备注$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html; };备注…

python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...

《统计学习方法》可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。本站根据网上资料用python复现了课程内容,并提供本书的代码实现、课件下载。《统计学习方法》简介《统计学习方法》全面系统…

view类不响应自定义消息_安卓平台如何给控件添加自定义操作?

在安卓应用设计和开发过程中,设计人员为了界面简洁、有独特的交互方式,可能会为控件设计特殊的操作手势,例如消息列表中单指按住消息向左滑删除消息;系统顶部的通知单指向左滑可以关闭通知等。这些操作对于普通用户非常方便&#…

html5 css登录注册实现,html5+css3实现一款注册表单实例

效果图如下:html源码:复制代码代码如下:个人信息账号:密码:重复密码:邮箱地址:其他信息个人网址:年龄:月薪:10000function showValue(value) {document.getElementById("rangevalue").innerHTMLvalue;}描述:css源码:复制代码代码如…

图解SQL的inner join、left join、right join、full outer join、union、union all的区别

对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Ven…