`
helloxyworld
  • 浏览: 5933 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多
     这篇文章是阅读完了thinking in java的第一章做的非总结性的总结随笔. 希望对某些人有所帮助.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

    

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

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

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

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

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

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");
	}
}



  首先看一下他们之间的层次关系吧! 如下图.

  一般我就是这么用多态的... 就是参数直接写成父类的. 然后其实new的时候是子类的,就可以调用子类的方法了.可能理解的不透彻,希望大牛们能帮着指点一下.


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

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

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


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



     希望写的东西能给大家一些启发,也欢迎大家指出我的错误.
分享到:
评论

相关推荐

    java程序员简历模版

    java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版...

    thinking in java 原版及其练习答案

    本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel具有亲和力的文字和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元...

    如何成为一名Java初级程序员

    如何成为一名Java初级程序员

    java程序员笔试题java程序员笔试题

    java程序员笔试题java程序员笔试题

    JAVA程序员之路-----看专业程序员的成长之路

    JAVA程序员之路-----看专业程序员的成长之路

    一个Java程序员的C++学习之路

    一个Java程序员的C++学习之路,给想学习C++的朋友一些个人的意见。

    Thinking in Java(4th_en)_7

     从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念...

    优秀程序员之路 Java开发经验及技巧大汇总

    优秀程序员之路 Java开发经验及技巧大汇总优秀程序员之路 Java开发经验及技巧大汇总优秀程序员之路 Java开发经验及技巧大汇总优秀程序员之路 Java开发经验及技巧大汇总优秀程序员之路 Java开发经验及技巧大汇总优秀...

    java程序员之路

    java程序员之路 讲述从开始接触,到成为JSP专业编程人员的经历过程

    JAVA程序员之路书

    JAVA程序员之路JAVA程序员之路JAVA程序员之路

    Thinking in Java(4th_en)_5

     从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念...

    Thinking In Java 中文版第四版

    本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和...

    PHP程序员简历模板 iOS程序员简历模板 Android程序员简历模板 Web前端程序员简历模板 Java程序员简历等等

    Java程序员简历模板 C/C++程序员简历模板 NodeJS程序员简历模板 架构师简历模板 通用程序员简历模板PHP程序员简历模板 iOS程序员简历模板 Android程序员简历模板 Web前端程序员简历模板 Java程序员简历模板 C/C++...

    JAVA程序员简历模板(最新版)

    JAVA程序员简历模板 JAVA程序员简历模板

    Thinking in Java 4rd 第四版原版

    学习java入门黄金书籍pdf每位java程序员都应该阅读

    java程序员面试交流项目经验

    java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...

    Thinking in Java 英文版

    Thinking in Java 可以说是最好的Java入门教程,被程序员们奉为至宝,但是中文翻译版看起来不是很方便,本资源是Thinking in Java的纯英文版看起来真的不一样

    java程序员到架构师之路.pdf

    java程序员到架构师之路.pdf

    Thinking in Java 4th Edition(中文扫描版-带目录和源码)

    本书共22章,包括操作符、控制执行流程、访问权限...这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。

    无广告java程序员入门宝典thinking_in_java第三版

    外国大师写的java经典名著,中国java程序员的象征,这本书有些地方深奥到好些10年经验的高手都无法解释,但是偏偏让新手看起来比其他书易懂,精妙之处非言语所能表达,只能说,thinking in java ,你值得拥有。

Global site tag (gtag.js) - Google Analytics