The Java Programming Language Notes

原创 2004年07月07日 08:39:00

 

1,static member

可使用该类对象的空引用来引用该类static member
SomeClass obj = null;
obj.staticMethod();
obj.staticData = 1;

用对象引用静态成员是不被推荐的,但为什么不像C#那样禁止掉呢?

2,多重继承

面对从多个接口继承而来的签名相同的方法,子类似乎只能提供一份实现,这样语义的正确性是如何保证的呢?C#可以在子类中为从多个接口继承而来的签名相同的方法各提供一份实现

3,局部类、匿名类、接口内部类

语言在设计方面提供的创新的语法设施,唯一的问题是不要滥用

4,混乱的数组

似乎违反了那句“装苹果的篮子不是装水果的篮子”,在需要基类数组的地方可以传递子类数组,丧失了编译期类型安全性,通过运行时异常来避免错误

5,求值顺序

明确规定了从左至右,善莫大焉

6,作用域

局部变量、参数能够屏蔽成员变量
局部变量不能与参数同名
更加局部的变量不能与外围局部变量同名
善莫大焉

7,逗号表达式

没有逗号表达式,for里面那个不算

8,break label

功能强大,代替flag,goto

9,异常

相对于返回错误代码来说,异常就是那个层次的AOP

10,异常声明与返回值的不同待遇

相同的是都不能做为overload的依据,不同的是override时,异常声明可以被放宽为子类,返回值却不能基于同样的理由放宽为子类,即协变

11,类锁与实例锁

互不相干

12,服务端同步与客户端同步

前者主要保护自己的内部数据,后者主要保证调用序列

13,main

Everything has a begin, has an end-------Matrix Revolution
我猜中了开头,却猜不到这结局----仙履奇缘

Java程序以main始,却未必以main终,直到最后一个user线程退出;?假若main启动了一个user线程,该线程又启动了一个,又启动了一个,则虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙。子子孙孙,无穷匮也

先有鸡还是先有蛋?人的起源,生命的起源到底如何?或许有一天人们追溯到极点,却发现不过是JVM启动了main,世界毁灭时,不过是JVM崩溃了

扯远了,.Net的线程与此类似

14,J2SE 1.5的倒退

静态引入 Static Import
格式化的输出 Formatted Output
格式化的输入 Formatted Input
不定参数 Varargs

简直不敢相信,宁肯学C也不学C++

15,Proxy

当年C++中引入template,只是为了Generic Programming,却无意中发现了其Generative Programming的强大功能;不知道Java中的Proxy最初的意图是什么,却引起了Generative Programming另外一种形式--AOP的风潮

16,ClassLoader

在程序中开个后门,某个类的字节码从我的个人网站上下载,别被客户发现,以后想起来就改改,呵呵

17,语言、库、平台,模糊的边界

字符串连接操作符“+”,是语言的一部分还是库的一部分?
序列化/反序列化时那个可被虚拟机调用的私有的方法,是语言的一部分还是库的一部分?
SoftRefrence、WeakRefrence等被虚拟机用来处理对象引用这样的核心语言特性的类,是语言的一部分还是库的一部分?

Java不是平台无关的,它本身就是个平台;不是说它不好,只是和传统的语言有这样一些区别

18,@deprecated

比起XDoclet等工具,.Net的属性等特性,它更早的触动了Java的神经:注释居然影响了编译器的行为!总算发展出了带有标注的Java

19,override的不同理念

Java/C#:只要访问权限允许,就可以调用重写的方法,不管子类对象构造出来没有
C++:只要子类对象构造出来了,就可以调用重写的方法,不管访问权限

造成的后果就是:

Java/C#:在基类构造函数里调用方法,只要子类有权限覆写,就会调到子类的实现
C++:在基类构造函数/析构函数里调用的方法永远都是基类的实现,不会调到子类;在其它方法里面永远都是调到子类的覆写实现,不管是不是private

20,IO

字节是没语义的,因此叫Stream
字符是有语义的,因此叫Reader与Writer

需要将没语义的适配为有语义的,叫InputStreamReader,OutputStreamWriter
实用的,叫DataXXX,对象序列化的,叫ObjectXXX

21,java.io.File

放错了地方,实际是文件系统的抽象,跟IO没什么太大关系,应放到系统包里,跟Thread之类并列

22,Collections

一般的设计原则是子类重写方法的前置条件应弱于父类方法,但Collection及其子类适时的没有遵守这个原则,以此证明了任何原则都有适用范围;Collection的设计目的是尽可能通用,而不是运行时的多态,你仍然需要选择合适的具体的数据结构,尽管它有时只是通过Collection接口来引用

23,Iterator

不同于STL,Iterator提供了内部安全的Remove(),部分还提供了Add();但遍历终归是不安全的,又一次不同于STL,Iterator自己能感知外界变化,抛出异常来自我保护,而不是产生未定义行为

24,Timer(),Timer(true)

最常用的却不是最方便的,不得不记住参数;可以用两个创建方法,可以用两个子类,就算用参数,也应该用枚举代替布尔,噢,忘了1.5之前没有枚举,那就静态常量吧,new Timer(Timer.DEAMON)和new Timer(true),哪个更清晰?

25,脆弱的private

除了序列化/反序列化时访问权限被平台破坏,在缺省安全设置下,Class.newInstance()也能够构建ctor声明为private的类的实例,带来的效果就是,希望强迫客户代码使用IoC原则的开发者,可用放心的将bean的ctor声明为private了


(The C# Programming Language Notes)
(J2SE 5.0 的角落)

《The C Programming Language》读书笔记总结 <一>.基础篇

写了这么多年的C代码,回过头来再看《The C Programming Language》这本书,作者Brian W. Kernighan和C语言之父Dennis M. Ritchie。感觉里面的知识...
  • Eastmount
  • Eastmount
  • 2015年10月21日 16:14
  • 2067

读经典《C程序设计语言》(The C Programming Language)

作为软工专业的学生,大三下,我重新开始学习C语言,为什么呢?因为我发现在大学生涯里,我花了很多时间去刷GPA,花了很多时间去做了很多无谓的事情,以至于马上就面临找实习、找工作。自己甚至连一门语言都没有...
  • stc_XC
  • stc_XC
  • 2017年05月30日 22:54
  • 737

摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”

材质和光的交互除了反射现象,对于透明物体还存在透射现象。模拟光的透射现象通常是一个比较头痛的问题,因为需要至少计算光的两次透射方向,首先计算光从介质一进入介质二的透射方向,然后计算光从介质二进入介质一...
  • xuexiaokkk
  • xuexiaokkk
  • 2015年11月18日 16:18
  • 332

programming language 第一周作业答案

fun is_older (x : int*int*int, y : int*int*int) = if #1 x 1 y then #1 x 1 y else ...
  • winter_wu_1998
  • winter_wu_1998
  • 2018年01月10日 11:01
  • 29

88. Notes客户端开发中的Java

回顾一下,在Lotus Notes杂谈专栏中,我陆陆续续写的关于Notes里Java编程的文章也有不少:6. Lotus Notes中的开发语言、8. 从Lotusscript到Java、22. 为什...
  • starrow
  • starrow
  • 2014年12月20日 12:30
  • 4541

47. Lotus Notes中编程发送邮件(二)

在编程发送各种类似通知的邮件时,时常会需要发件人显示为某个特定的帐户,比如某个部门的名称或者管理员的名字。另一种需求是,用户收到某封邮件后,回复邮件的地址不同于发件人栏显示的地址。而正常情况下,发送邮...
  • starrow
  • starrow
  • 2013年08月17日 17:00
  • 6720

最有价值的50道java面试题

1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不...
  • qq_36721257
  • qq_36721257
  • 2018年01月03日 19:13
  • 367

《The C Programming Language》读书笔记总结 <一>.基础篇

写了这么多年的C代码,回过头来再看《The C Programming Language》这本书,作者Brian W. Kernighan和C语言之父Dennis M. Ritchie。感觉里面的...
  • paul123456789io
  • paul123456789io
  • 2017年02月09日 11:44
  • 382

反应式编程(Reactive Programming)

反应式编程(Reactive Programming)这种新的编程范式越来越受到开发人员的欢迎。在 Java 社区中比较流行的是 RxJava 和 RxJava 2。本文要介绍的是另外一个新的反应式编...
  • oHaHaChao
  • oHaHaChao
  • 2017年06月23日 15:22
  • 573

46. Lotus Notes中编程发送邮件(一)

邮件是Lotus Notes体系的核心和基本功能,以至于Send()是NotesDocument的一个方法,任何一个文档都可以被发送出去,Notes里的一封邮件也只是一个有一些特殊字段的文档。在程序开...
  • starrow
  • starrow
  • 2013年08月14日 17:24
  • 9128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:The Java Programming Language Notes
举报原因:
原因补充:

(最多只允许输入30个字)