Java 学习(0分)

  • 主题发起人 主题发起人 ddev
  • 开始时间 开始时间
D

ddev

Unregistered / Unconfirmed
GUEST, unregistred user!
以前,一直对 Java 有着偏见,认为这种语言,相比于 C/C++ 而言,实在不能
同日而语。但经过一段时间的“勉强”学习,却发现了 Java 之所以火爆的根由,并且也
逐渐明白了一点 C/C++ 和 Java 之间的差别和不同的用途,所以也觉得:C/C++ 要学,
Java 也不能放下。下面是我的几个理由:
1、C/C++ 好在哪,Java 不好在哪
说到 C/C++,许多人可能会马上联系到 Delphi ---- 几乎已是 Pascal 的代名词
了。这两种语言唯一的差别在于:表达 ----- 我这么认为。C/C++ 的表达趋于简洁,其中
最常用的 ++/--,<</>>,{}, 及即时的变量定义,最让我喜爱,再加上 type* 的指针表达,
比起 Delphi 中必须定义两个类型实在是要强得多。除此之外,Delphi 的内嵌过程却比 C/C++
要方便,所以在函数的表达上,可能 Delphi 要有一些优势 ---- 因为我们不再需要在你的
函数库中实现许多可能仅需要在一两个函数中使用的“偏僻”函数了。在类的表达上,Delphi
的 propety 属性声明的确要比 C/C++ 高明。至于其它,我认为没有什么根本的区别。
为什么要提到 Delphi 呢?虽然 Java 的语法形式借鉴了 C/C++,但在类的处理手法
上,却相比于 Delphi 要更接近。你认为不是?下面是比较:
C/C++ 不是单根类,Delphi/Java 却是;
C/C++ 允许多重继承,Delphi/Java 只承认单继承,但可实现多个接口;
C/C++ 有名字空间,Delphi 只承认单元,Java 采用目录 ---- 相比而言,只是单元
的一个变种;
Delphi 有明确的组件概念,Java 也是,如果从代码本身而非布署考虑,Java Bean/
Java Enterprise Bean 不都是一个组件么?C/C++ 采用的通用的类处理,没有对组件进行特定
的特征处理及特征描述,因此,从一般意义上来讲,C++ 没有组件。
...

所以综合来说:Java 从语言形式来讲,是 C++ 的包装 + Delphi 的思想。因此,
比较 C++/Java 就很明显了。
Java 的不好在于:原生程序只需要很少的特定的文件;Java 必须有虚拟机。所以
原生程序一般很容易布署;而 Java 却必须有一整套的配置,这也是 Java 的复杂之一;
其二、Java 是解释的,原生程序是编译的,在资源消耗及运行速度上,Java 要差;
其三、Java 编码实现是低代价的,但应用服务器却很昂贵,因此,在 EJB 几乎必须
的企业环境中,如果不考虑盗版,那么你的程序几乎就是无用 ---- 除非你限定为大公司开发。
C/C++ 没有这个问题,原生程序发布后就不需要更多的运行费用。
其四、Java 是独家产品,这个世界以后会怎么样,你无从得知。C/C++ 已经成为业
界标准,有大量的技术支持,可以说:C/C++ 要比 Java 更值得信赖。
...

那么,为什么要学 Java 呢?我认为只有有限的几个原因,但却直接影响到全局:
一、能够实现更灵活的 C/S 或 B/S 企业环境。EJB 本身就是为解决这个问题,而在
其它环境中,你必须自己去考虑和实现;
二、没有平台忧患,不会因为以后可能的“平台大战”或者不同的用户平台而使你的程序失效;
三、即使在一般应用中,JSP+Servlet 的开发成本也要比 CGI 低得多,而且能够提供
PHP/ASP/CGI 都难以实现的复杂用户交互(Applet)。
就这么几条,就足以让你有学习 Java 的动力了。


2、Java 初步
有人说 C/C++ 难学,Java 却很容量上手,我想,这种想法肯定错误 ---- Java 不会比
C/C++ 有多少学习上的优势。所以,你不要想取巧,希望3-5天能够学会 Java。应该以一种全新
语言的姿态去学习,或许会让你在挫折中有承受的勇气,否则 --- 你会失去耐心的。给你一个
简单的理由:如果希望在特定的平台上编程,C/C++ 要求你理解系统 API,所以难;Java 可以
使你绕开这点,但换来的是一个全新的 API,所以你同样要经历痛苦。
Java 的语法形式与 C/C++ 基本一致;Java 的类处理与 Delphi 大同小异,但它不再
需要类似于 C/C++ 的头文件或者 Delphi 的 Interface 接口部分。基本上是哪儿定义就在哪儿
实现 ---- 这会使你的代码很难读。以前有人报怨 C/C++ 的头文件,现在可以体会一下了。在我
看来,C/C++ 的头文件,能够使你在整体上有一种控制感和全局感;Java 没有,所以你必须很好
地写好注释,以备档待查。
其次,C/C++ 提创简洁,许多复杂的计算可以用中间变量来简化代码的复杂度和提高代码
的可读性;但 Java 却似乎在提创复杂,虽然没有一个文档这么讲,但许多代码都是这么写的。对
于我而言,还是愿意保持 C/C++ 的风格,尽量学着写简单而明确的代码。因为 Java 已经够复杂了,
如果再加 Perl 正规式一样的“天书”,不读得吐血才怪。
在我的学习计划中,将 Java 的学习分为以下几个部分:
1、Java 基础:学习 Java 语法,基本的 I/O 流,JDBC 及 Java Bean;
2、JSP/Servlet/Applet:这总体认为可以归为一类,是 WEB 的基础部分;
3、TCP/IP 编程:网络应用的基础部分
4、EJB 企业应用:Java 的地堡,最后的攻坚,没有它,Java 只会是一个鸡肋。
这是 Java 的重心,也是最后的守望,成不成就全看此招了。

--------------------------------------------------------------------------------------
说明:我是一个 Java 的初学者,所言所写必定会有NNN个错误或漏洞,所以希望 Java 的高手能够
不吝指导,多加建议,以方便与我同样的初学者能够快速入门,少走弯路,少范错误。在此表示感谢。
我会在以后的学习中,不断地补充我的痛苦经历,作为一个开始,我已经说得太多了。~_^
 

一、基本概念
1、什么是 JavaBean
所有可重用的,功能完整的 Java 类,都可以称为 JavaBean。有人认为只有可视化的
组件才能称之为 JavaBean 。我认为不是很正确,一个 Collection 也能够称之为一个组件,如
果限于组件,概念上来讲是太狭义了。
2、什么是 EJB
EJB 是一个服务相关的,分布的组件,如:Session Bean, Entry Bean 及 Message Bean。
其实,称之为组件还不如称之为服务明了 ---- 我这么认为。
3、面向对象
C++/Object Pascal 是面向对象的,Java 也是面向对象的,差别在于:Java 是完全面
向对象的,即“一切都是对象”;而 C++/Object Pascal 是对象兼容,它有原生的基本类型,
有过程/函数。
4、Applet/Servlet
Applet 是基于 WEB 浏览器,在客户端运行的 Java 程序;Servlet 是服务器端的,它并
不与 Applet 对应。Applet 是 Java Application 的另一种“活法”。
5、AWT/Swing
标准的可视组件。是为 Java Applet/Application 提供用户交互的 GUI 部件。在新程序中,一般推荐只使用 Swing。
 
从你目前的理解程度来看,很快你就会精通java的。
希望像你这样知道该怎么学习的程序员越多越好。
 

二、Java 的类
对于一般的面向对象语言而言,一个类即表示一个实体;但对 Java 而言,情况稍有不同。
因为,即使你定义这样一个简单的东西: private int myData;
不说外层必须有 class
包装,即使 int 本身,也是一个类。也就是说,Java 中对于类的概念太泛了,因此有必要提出一
个新的概念:JavaBean。JavaBean 是 Java 中所有实体对象的基础,即使是 EJB,其处理手法也
与 JavaBean 完全一致,所不同的只是应用上的差异和限定而已。由于 Java 处处是对象,对于一
般处理中的一个“类”就会与 Java 本身的固有的类混淆,因此提出一个新名词:JavaBean。可以
这样理解:JavaBean = C++/Object Pascal 的 class。没有必要对它有太多的考虑。原因如下:
如果你说按C++的说法要建立一个类,即定义:

class MyClass {
private:
...
public:
...
}

这个类必定是对某种事物的描述或处理,它应该是功能型的。从概念上来讲很容易理解。

但在 Java 中,所有东西都必须包在一个类中,如果采用 C++ 的说法,那么就不能体现
一个类所需要的完成特定功能为目标的“类”的完整性,所以需要一个 JavaBean,这是跨过简单
的 Java 固有类而面向事务处理或特定描述的功能性的“类”。有一个比方:
如果把一本书看成是 Java 的一个类,那么,《Java 编程思想》就可以称为一个 JavaBean。理解层次和方位不同而已。
 
也许你应该调过tcp/ip的学习,因为这里只有api的熟悉,学习实在意义不大。
而且,jsp/servlet/ejb本来就是一体的,中间隔开一个步骤看起来好别扭的说。
 
这几天开始学习java
TMD买了一本希望的j7编程指南
错误一大堆(辩证的看其实也不算是件坏事,排队错误本身就是一种乐趣和对知识的巩固)
看了几天,java确实有点意思
虽然略有烦琐,但是别有另外一种风味
对照对object pascal的理解来理解java语言
发现在不同的外衣下有着极其相似的本质
只是学习java的外部环境不是很好,此种论坛有质量的很少(以大富翁为参照物)
希望更多的java爱好者加入讨论
楼主的高见也给了我一点学java的启发,在此表示感谢
--java菜鸟的一点感想
 
我也是一個初學者.這几天在書店看一本叫 java 技朮內幕的書.依我現在的角度來看,這本書讓我感覺到很好.
希望大家推荐一些自認為很好的書籍!
 
最受用的还是楼主的帖子,继续啊!
 
三、实例说明
写一个 Java 的 HelloWorld 是最简单也是最不实用的东西,最多只能帮助你检查一下
你的 Java 是否配置正确。而且,我想大多学习 Java 的人,差不多跟我一样,也有其他语言的
开发经历吧,因此我们可以从一个完整的程序模式来开始我们的学习。
说明:一般地,我开始学一门语言时,很少对语言本身的语法部分有过多详细的深入,
而是从一个实际的程序模式开始对照如何用这种语言去实现。因为,我认为:语法往往是最基本
的部分,今后要写程序,你必须天天和它打交道,到时根据编译器的错误提示,再细读相关内容。
一般地,我以能够读懂程序为度,也就是说:你现在对语法的掌握只要能够读懂书本的例子就行
了,浪费太多的时间去研究语法会大大影响学习进度,更何况,一门语言所有的语法规则有多少
人是真正完整掌握的?我的原则就是:自己感觉够用就行。不是我不明白,这世界变化快,说到
底,我不是研究语言的,何苦化那么多的时间? 呵呵^_^

实例是:一个建筑企业的工程核算与管理。
为什么选这个实例呢?相比于进销存体系,这个实例有它的特点:
1、它需要复杂的网格表达,而不是一般的 Form(WEB) 能够表达的特点。客户进行工程
预算时,不会希望对每个子目都有一次提交,然后再做下一个子目的,它需要一个能够动态增长
的网格,这样的目的是我们必须在客户端使用 Applet,它的数据格式一般为:
项目编号 部位 项目名称 单位 数量 单价 合价
-------------------------------------------------------------------------
一 土建部分
1001 土方工程 立方米 600.00 28.00 16800.00

二 钢架部分
4001 钢檩条 吨 4.00 3500.00 14000.00
...

它与一般的数据处理的不同在于:该数据序列是有序的,客户需要对特定部分进行汇总
分析。并且,每个这样的数据集都对应于一个工程,工程之间的数据是互不相关的,但可能会有
部分数据的统计,如统计某个时期内工程的钢消耗等。
2、每个工程的款项不是一次收取的,它一般地分为:预付款、进度款、应收款、保证
金、拖欠款等。企业根据施工进度需要甲方支付进度款,否则就停建(呵呵)。
至于其他的部分,与一般的软件没有太多的出入,如需要的统计、分析等。

整个软件环境我们以现在流行的 B/S 模式来进行。因为,如果做成 Application,意义
不大:
1、EJB 只在服务器端实现,与客户模式没有关系;
2、如果不用 EJB,那还不如用 C++/Delphi,没有必要对 Java “只爱你一个”,陈珂
虽然最漂亮,但我们的小宝最爱的还是双儿(^_^)。
下一次,我会给出这个程序的 Java 框架。然后,我们再一起前进吧...
 

补充:关于建模
我在看来,没有哪一样工具能够比 Delphi 更适于建模了(当然,如果是非可视的设计,
别找路径)。经典的原型法,可以实现无代码运行,用户也一看明白。UML 虽然强大,我认为这
是书生语言,是文言,仅供内部参考。用户不要 CASE,要的是程序。所以,Delphi 最最合适,
我真为你骄傲!当然,非可视部分,你得建立文档了,但这大多是限在服务级的后台处理部分。
用户不关心,所以我也不费心了。呵呵,希望大家不要学我。
--------------- 闲言碎语,说过丢过 ----------------
 
接受答案了.
 
继续阿!我学语言的观点很多和你相似!
 
后退
顶部