您的位置:首页 > 编程语言 > Java开发

一些有意思Java知识

2009-04-08 15:27 176 查看
 

一些有意思的知识
1.为什么要编程... 1
2.Hello,world!的由来... 1
3.过程分解... 2
 

1.为什么要编程

 在大学里,计算机系的第一门课程往往选择程序设计,而并非选择去讲述计算机内部的构造,例如CPU的工作原理,内存与CPU和主板之间是怎样调用数据等等。这令很多计算机科学家感到不解,因为这会让人们长生一种印象:计算机科学=编程。虽然那些训练有素的计算机科学家往往会花费很多时间来编程,但是计算机科学本身所涵盖的内容却远远不止程序设计。那么为什么我们还要在一开始就学习程序设计呢?
斯坦福大学的著名计算机科学家Don Knuth回答了这个问题,他说计算机科学中的各个方面或多或少与算法(algorithm)相关。
     算法:按步骤描述如何完成一个任务的规则。
例如我们用的PC机中,CPU是怎样处理数据,它的单位时间内只能处理一条指令,但是我们在操作的时候却感觉CPU好像同时在处理多条数据,那是因为现在CPU的处理速度非常的快,我们的操纵非常的缓慢,假如我们的操作速度和CPU处理速度相同,那我们非要发疯了不可,我们要一个一个步骤的处理我们东西。程序是计算机指令的集合,它以文件形式储存在磁盘上,而进程就是一个执行的程序,Windows早错系统是支持多进程的操作系统,即同一时间可以执行多个程序,实际上CPU轮流执行的程序。每个进程又有许多的线程组成,在我们JAVA中就又控制线程的功能,里面牵涉到很复杂的算法,来控制程序,在CPU中轮流执行。
     Don Knuth说:有人曾说一个人只有教给别人某件事时才会真的明白这件事。实际上一个人只有告诉计算机如何去做一件事时才会真正明白这件事,即用算法来表达这件事在计算机中如何实现。
     Knuth把计算机科学中具有共性的思考过程称为算法性思考,所以我们学习程序设计不仅仅是因为它是计算机科学中最重要的一个方面,更因为它是阐述计算机科学家如何解决问题的最佳途径。
我们所学习的JAVA书名叫“使用JAVA语言理解程序逻辑”,重点就在理解程序的执行逻辑,这个逻辑也就是我们对一个编程题目所有具备的思路。如何去分析问题,何如去拆分问题。去认真的体会书中的编程思路,这只是我的一点肤浅的见解,希望大家看后有所帮助,

2.Hello,world!的由来

  .“Hello,world”的编程传统由Brian Kernighan和Dennis Ritchie引入,他们两人在20世纪70年代发明类C语言。一种面向过程开发的相当经典的程序语言,我个人认为C多数用在开发单片机程序上。1978年他们所写书中的第一个完整的C语言程序就是“Hello world”程序。从那时起Brian Kernighan和Dennis Ritchie以及他们的书The C Programimng Languae
(《C语言编程》)就被人亲切的称为“K&&R”。
              后来很多主流的程序设计语言都借用了C语言的一些基本语法格式,这些利于程序员从C语言转换到这些新的语言。C++和Java都从C语言中借鉴类大量核心语法。
Brian Kernighan和Dennis Ritchie还制定了一套规范程序中大括号位置和各种缩进格式的方法,被称为“K&&R样式”。Sun公司开发的Java语言推广这种样式以及现今流行的各种面向对象的编程语言都推广这种样式。
3.程序中的错误
 早在1949年,计算领域的先驱Maurice Wilkes说过一句话,这句话至今依然适用:
只要我们一开始编程,就会惊讶的发现程序并不能恰好象原本设想的那样运行。程序必须要经过调试。我记得有段时间我认识到了在我的编程生涯中,有很大一部分时光是用于寻找程序中的错误。
当你在编程的时候会遇到以下三种错误:
1)               误用Java产生的语法错误(syntax error)。这是一种语法格式上的错误,并且能被Java编辑器发现的。
2)               编写的代码在执行后没有得到预期结果时而产生的逻辑错误(logic error)。我感觉占90%。
3)               另外一种是运行时错误(running error),它属于比较严重的逻辑错误,会阻止程序继续运行,往往会抛出异常。(我在编写程序的时候经常遇到,很头疼)。
第一种错误只要我们能正确的运用Java的条条框框,且编辑器也会提示,一般可以更改
第二种错误中,逻辑错误也被称为bug(臭虫)。程序员用“臭虫满天”和“像臭虫一般”来形容写的很糟糕的程序。在程序中查找和排除的过程叫做debugging。这种程序往往不会抛异常,但可以根据在控制台中的输出的界面,找出当初我们想要实现但是实现方法不对的那段程序(这个很管用)然后修改,再者需要进调试界面慢慢的找吧。如果细心是可以找到的。
第三种错误,往往会在控制台中抛出异常,throws开头的红字,可能下面还有n多的红线,也许看到这,我们的心也快凉了,辛辛苦苦写的程序,到头来却得到几行红字,但我们可以根据它快速的定位,程序走到那个地方走不过去了,我的感觉是双击throws下面的那行异常,一般都是错误的所在,至于后面的异常,大多数都是因为调用了该方法或属性的结果。

3.过程分解

 C语言的作者之一Brian Kernighan曾经说过,“计算机程序设计的关键是如何控制它的发杂性”。人类处理细节的能力有限,我们不可能一次性处理很发杂的问题。相反,我们可以结构话我们需要解决的问题,然后把它分解成一个个独立的片段加以解决。在程序设计中,我们把这种原则上的方法称为分解(decomposition)。
  分解
   把一个整体划分为多个清晰的部分,使得每一部分都要比整体更简单更容易解决。
  在面向过程的编程设计语言中,例如C语言,分解的含义是将复杂任务划分为子任务。这是一种面向动词或称为面向行为(action-oriented)的方法,主要思想是将这个行为分解成一系列子行为。这种技术被成为过程分解(procedural decomposition)。
  在Java(包括我们要学习的C#)语言中采用了另一种分解问题方法:面向名词或称为面向对象(Object –oriented)的方法。我们不再把问题看成是由若干个子动作组成的动作,而是把他们看作一组需要交互的对象集合。
   为了说明过程分解,我们举一个烘焙蛋糕的例子。你可以把这个问题划分为以下这些子问题:
l         制作面糊
l         烘焙蛋糕
l         制作糖皮
l         在蛋糕表面裹上一层糖皮
其实每个任务都有相关的细节步骤。比如拿制作面糊来说,你要:
l         混合面粉原料
l         搅拌白糖和黄油
l         打鸡蛋
l         搅拌面糊
这样,你就把整个任务划分开来,将每个子问题都分解成更小的子任务。最后,得到的是一些简单到无需进一步说明的子任务(即, 可以一步完成的动作)。
图1描述类这个分解的过程的一部分。“制作蛋糕”是最高级别的工作。它由四个低一级别的工作来定义:“制作面糊”,“烘焙”,“制作糖皮”和“为蛋糕裹糖皮”。“制作面糊”又可以用四个更低一级的工作来定义,其他三个任务也可以这样逐级定义。这样的图叫结构图(在程序设计的前期阶段,尤为重要,是整个程序的架构,有兴趣可以看看UML建模,在软件开发过程中,基本上都是系统架构师做的,比尔盖茨几十年都是微软的首席架构师,一个软件的好坏,系统架构起着甚为重要的作用(我个人认为),我在清华紫光软件部的时候,在学习软件中曾看过一个大型B/S软件的架构,由于在大学不好好学习,什么都看不懂,我就傻眼了)。
                        
 在分析问题上我们常用两种方法:“自底向上”(bottom-up)和 “自顶向下”(top-down)的方法。对于制作蛋糕而言,你通常会从顶层开始分析,“如果想要做蛋糕,首先要做面糊,然后烘焙它,然后制作糖皮,最后把糖皮裹在蛋糕上。如果想要做面糊,首先要。。。。。。”
这就是一种用自顶向下方法分析问题的实例,从最高层开始,然后初级细化。
  自底向上的分析过程类似于这样:“我现在可以做什么?可以混合原料面粉。如果我再把白糖和黄油搅拌好,然后再打几个鸡蛋并且与混合的面粉搅拌在一起,这样面糊就做好了。如果我再把面糊烘焙一下,这样没有糖皮的蛋糕就做好了。如果我再。。。。。”这样就是自底向上的方法分析问题的过程,它从完成底层的工作开始,把这些工作汇集到一起一步步完成更高级的工作。
最后要说的就是一个术语,专业程序员会分阶段开发程序,他们并不是一次性的完成程序的所有功能,而是首先解决一部分问题,然后一部分一部分的添加小问题的解决方法,一直到所有问题都全部解决完毕。这个过程叫“渐进式开发(interative enhancement或者 stepwise refinement)”例如我们所做的Java“购物系统” 。
一些小的有意思的知识,可以看看,时间太晚了,脑袋糊涂,可能中间有错误的地方。
参考的资料我也没有考证,希望正确。
                                                                            
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息