一名苦逼程序员的thinking in java 之路

这篇文章是阅读完了thinking in java的第一章做的非总结性的总结随笔. 希望对某些人有所帮助.

首先有必要说一个本人的背景,本人是一只非计算机专业出身,在计算机行业苦逼了2年的苦逼程序猿,弱势群体?

Thinking in java这本书我压根就没想过会看它, 纳尼? 太特么厚了... 不知道那天怎么的心血来潮的就翻了翻,就不小心翻了一章.

看完我就想尽量写点什么,通俗易懂的,省着时间长了,自己很多东西忘了,还能找点东西看看. 为什么不翻书看? 答曰:老外那语法实在不敢恭维啊!(可能是翻译的事,大牛建议看English版).

好了,闲话不多说了,Let's go!

第一章建议新手最好还是别看了, 当然了作者也是这么建议的(那你还写在第一章). 不过可以看看第一章最后的总结,里面说的一句话我感觉还是挺坦诚的.大体意思就是 "选好你自己的路(深思熟虑),再去选择语言,没有必要非得去学习java" , 中国的一句老话"谋而后动" 就是这个道理.

记得千万要深思熟虑. 本人就是因为干了一年java,右"转行"做了一年前端,导致薪水一直止步不前.

------ 正文传送门 -----

[b]1. 抽象过程[/b]
抽象在某种意义上讲就是"想象"(当然要合理). 从 "抽象"<---->"具体" 就产生里面向对象语言了. 举个例子来说:

'A&V女U' < --- > '苍老师' (这就是一个抽象到具体的概念了.)

而什么是对象呢? 当然了,不是你女/男朋友, '苍老师'就是对象,就是所谓的'具体'.

而什么是类呢? 必须就是 'A&V女U'....

所以,对男同胞而言, 我们喜欢的是'类'(包括好多个对象,对象多了多好啊! 你懂得.);

[b] [color=blue]类是封装性的表现,对象是封装性的具体实现![/color][/b]
[b]2. 聊一聊关于类即Class吧![/b]
我以前一直有一个困扰. Class 为什么是数据类型?

以前我总是想,类,类,里面有好多属性,好多方法,属性有int 类型,String 类型, boolean 类型. 这么多类型,那怎么Class还是数据类型呢? 现在我懂了,都是骗子,想类的时候,什么都不要想,我就问你,int b = 1, 说明的b 是int 类型. boolean flag = false,说明flag是boolean类型. 那Class cl,不就说明cl是Class类型的吗. 那Class不是数据类型是什么.千万别被类里面的乱七八糟的东西干扰了.

[b]3. 每个对象都提供服务[/b]
我感觉这个问题再好理解不过了. '苍老师'不就为广大的宅男同志提供服务嘛,所以说对象肯定是为我们服务的,所以,你需要什么样的服务,就是创建什么样的对象,当然了,首先你得确保你找到了正确的类(你不能找 '程序猿类' ---> '苍老师' 吧!)
[img]http://pic002.cnblogs.com/images/2012/415785/2012061311084034.png[/img]

[b]4. 说说可视范围吧[/b]
public(都能访问到) > propected(继承关系 可访问) > default(本包 可以访) > private(谁也访问不到) .

通常新手都喜欢用public ,编译不容易出错嘛! 不过切记,要根据具体的需求去用, 编译报错你还可以去modify ,运行时出问题,你就傻眼了.

[b]5. 封装 继承 多态[/b]
封装上面已经提了,这里就不说了.继承和多态是老生常谈的问题了. 因为本人也不敢说完全理解了继承和多态.所以从新人的角度分析分析.

曾经有一次面试,有这么一个问题, 让我说说类和接口的区别? 我当时回答的乱78遭的引来了面试官的强烈BS!

先说说我此时的想法吧! 先说说抽象的东西吧!

[color=blue](1) 类提供的是服务(对象嘛! 还记得不!) 接口提供的是一组标准.(一组当然就是相关的东西了)

(2) 一个类只能继承一个类,却可是实现多个接口.

(3)类中的服务(方法)是实现的(当然也可以不实现,加abstract去修饰方法,这种情况的类 叫做[/color][color=violet]抽象类[/color][color=blue]),接口中的方法一定不能实现(当然 如何你用Eclipse IDE的话,是会提示编译错误的).[/color]
当然了,以上都是写书面的东西,不知道为什么面试者就爱问这些东西.

说说工作中的体会吧. 继承一般是用来"建模"的. 什么是建模?

建模就是建立类与类之间关系的, 也就是几个类之间的继承关系.建模好坏直接影响你的编码水平,有时候我就感觉,建模更像是设计.不是你写了个extends,扩展了一些东西就OK的.有时候更需要一些经验的.说实在的,我现在用到继承很少,其一是公司的系统建模架构师基本都搭建好了,你只要添加逻辑就OK,另一方面也许是自己的功力还不到家吧!

[img]http://pic002.cnblogs.com/images/2012/415785/2012061313515515.jpg[/img]

如图就是一组建立好的模型,一层一层的.看着多清晰啊.

说的可能有点严重了,其实大可不怕,不能在工作中用,我自己练手还不行吗,继承随便用,多用用就知道怎么设计更好了. 不过所说的多用,不是说不经大脑的就乱用,要思考,总结,不然永远只是个猿崽子.

继承就说道这吧, 当然了,多态也建立在继承的基础之上的.

[color=green]编程的时候,经常想把一个对象不当它所属的特定类型来对待,而是将其当做基类的对象来对待.[/color] 这句是书上原话 .

什么意思呢.我写一段代码阐述一下吧!


public class PolymorphismTest {
public static void main(String[] args) {
Bird bird = new SpringCuckoo();
callFly(bird);
}

public static void callFly(Bird whickBird/*就写了Bird 就是所谓的基类*/) {
whickBird.fly();
}
}

/**
*SpringCuckoo 春娟 ,杜鹃的一种
*
*/
class SpringCuckoo extends Cuckoo{

public void fly() {
System.out.println("*** Spring Cuckoo **** 正在飞....");
}
}

/**
*Cuckoo 是布谷鸟就是杜鹃
*
*/
class Cuckoo extends Bird {
public void fly() {
System.out.println("22222222222");
}
}


/**
*Bird是鸟
*
*/
class Bird {
public void fly() {
System.out.println("111111111111111");
}
}



首先看一下他们之间的层次关系吧! 如下图.
[img]http://pic002.cnblogs.com/images/2012/415785/2012061314102280.jpg[/img]
一般我就是这么用多态的... 就是参数直接写成父类的. 然后其实new的时候是子类的,就可以调用子类的方法了.可能理解的不透彻,希望大牛们能帮着指点一下.


[b]6.关于创建对象中的内存体现[/b]
java中new对象是动态的,什么是动态的呢? 就是对象是在程序运行时才知道创建哪些对象,然后开辟相应的内存空间存放这些对象(这些都是在内存里的heap中完成的,heap),而像C++ 是在程序编译的时候就知道要创建哪些类,然后可能是在内存中穿件了一个类似于表似的东西记录下来(存放在内存的Stack区),然后在运行的时候在开辟出相应的空间.我个人是这么理解的.

[color=blue]  
C++: 1. 记录对象表(编译时) 2. 开辟空间(运行时)

  Java: 1. 记录对象表 ,开辟空间(运行时)
[/color]

从以上可以看出 在运行阶段 Java要比C++多干一件事, 所以要比C++慢一些(当然是对计算机来说). 不过对于现在越来越宽裕的内存来说,我不知道这种差异到底有多大.



希望写的东西能给大家一些启发,也欢迎大家指出我的错误.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值