java编程思想

来源:互联网 发布:时间煮雨 歌词 知乎 编辑:程序博客网 时间:2024/03/29 14:06

1.1 抽象过程
    编程就是建模过程,早期的汇编语言是专门针对机器设计的,需要在要解决的问题和机器之间建立模型。
    1. 万物为对象
    2. 程序是对象集合,相互通过发送消息来调用
    3. 可以继承
    4. 每个对象都是某个类的实例
    5. 特定类型的所有对象可以接收同样的消息

1.2 每个对象都有一个接口
    通俗的说就是对象都有method

1.3 每个对象都提供服务
    许多的method组成了服务

1.4 被隐藏的具体实现
    类创建者和客户端程序员,private,protected,public

1.5 复用具体实现
    直接使用,组合,继承

1.6 继承
    通过覆盖或增加新的methond,is-a(只是覆盖),is-like-a(新方法)

1.7 多态的可互换对象
    动态绑定

1.8 单根继承结构
    相比于C++,更容易实现GC,
    创建一组类时,更容易使用其它类提供的接口,C++中可能得用多重继承

1.9 容器

    我们需要的只是一个用来存放对象的抽象概念,在具体的实践中会有不同的要求,如Map,List,Vector。

    参数化类型,Java中引入的新概念,由编译器实现,在1.4版以前,元素放入容器中会转型成Object,取出又要转成原来的类型,现在可以创建只能保存某种元素的容器。

1.10 对象的创建和生命期
    使用单根继承和对象都在堆上分配使得Java的GC实现起来相对简单。
    C++的智能指针?

1.11 异常处理,处理错误
    异常使错误处理相对容易,在C中是使用返回值,如果有内存读写错误~ ~

1.12 并发编程
    Java内置支持

1.13 Internet
    Internet的基础就是 客户端/服务器 模式,要尽量减少服务器的工作量,脚本语言可完成80%工作,剩下的20%可以由applet或Flex(flash)。Java在服务器编程有优势。

1.14 总结
    评估需要用什么语言,可以看看python。

5 初始化与清理------------------------------------------------------------------------------
    可以在构造函数中调用
    finalize(),在垃圾回收时调用,1.什么时候回收不明确,可能永远都不会回收 2.回收只与内存有关
    可以用在如调用了C++ new,在finalize()里面调用delete,或用来检查系统资源是否释放(文件是否关闭)
    Java的虚拟机会先向系统请求一大块空间,new的时候只要改变一下指针就可以,相当于在栈上分配,速度很快,垃圾回收有两种策略,停止——复制,标记——清扫
    变参函数 void print(Object... args);      print("one", "two", "three");
    枚举是一个类型,可用在switch语句中
   

7 构造器------------------------------------------------------------------------------------
8 多态--------------------------------------------------------------------------------------
    Base { "base" }
    Advense extends Base {
        String str = "str"
        Advense() { "adv" }
    }
    结果 base str adv
    类的构造函数中可以调用重载的方法,并且是多态的,要注意数据初始化
    子类可以覆盖父类的方法并改变方法的返回值(但返回值要是父类返回值的子类型)
    Java的转型都会做检查

9 接口-----------------------------------------------------------------------------------
    抽象类是不希望实例化的类,
    接口是类与类之间的约定,不做任何实际的工作,成员变量为final型
    策略模式,根据传入的类不同
    适配器将一个类的接口包装了起来
    抽象类的耦合比接口强,
    接口部分的解决了多重继承问题,因为接口是没有实现的方法,可以解决菱形继承的问题
    放入接口中的data自动成为static和final
    实现工厂模式,(工厂模式和策略模式有什么不同?)

10 内部类---------------------------------------------------------------------------------

    内部类实际上实现了多重继承


11 持有对象-------------------------------------------------------------------------------

    容器内能只放置类,由于单根继承,可以写 ArrayList list = new ArrayList();
    初始化加入多个元素 new ArrayList<Integer>(Arrays.asList(1, 2, 5))   
    ArrayList, LinkedList,
    HashSet, TreeSet, LinkedHashSet,
    HashMap, TreeMap, LinkedHashMap,

 

12 异常--------------------------------------------------------------------
    什么时候要使用异常?比如对一个函数的参数做检查要使用异常吗?
    异常处理理论上有两种模型,一种是终止模型,一种是恢复模型,但由于恢复模型太复杂,一般不用
    自定义异常类很简单,直接继承Exception,写一个无参和一个String参数的构造函数就可以了
    异常是new出来的,垃圾回收器会自动清理它,相比C++要容易多了
    finally用于做无论是否抛出异常都一定要做的事,如关闭打开的文件
    异常的优点在于对错误处理的一致性上,只要不吞咽下错误,你就一定能发现错误

13 字符串------------------------------------------------------------------
    字符串是不可变的常量
    用于String的+,+= 是Java中仅有的重载操作符,调用了StringBuilder
    如果是用循环语句拼接字符串,最好在循环中使用StringBuilder
    要学习 正则表达式

   

14 类型信息----------------------------------------------------------------
    JVM加载一个类的过程, 加载 链接 初始化
    RTTI:编译时类已存在
    反射:运行时类才存在
    RTTI在实际编程中的使用:传统的类型转换,查询类型的信息,instanceof
       



   
15 泛型--------------------------------------------------------------------
    元组的实现
    非泛型类可以使用泛型方法 <T> void f(T t)
    在对象转化成泛型对象时会擦除自身的信息,只能将泛型当作Object

16 数组--------------------------------------------------------------------
    数组相对于容器,唯一的优点是效率
    除非经过测试证明容器是瓶颈且换成数组能大大提高效率,否则应该使用容器

17 容器深入研究------------------------------------------------------------
   
18 Java I/O系统------------------------------------------------------------
    主要讲类库中的类
19 枚举类型----------------------------------------------------------------
20 注解--------------------------------------------------------------------
21 并发---------------------------------------------------------------------
22 Swing-------------------------------------------------------------------

现在就看这么多了,暂时不再系统的看了,2010.8.19