`
chelsea
  • 浏览: 118225 次
  • 来自: ...
社区版块
存档分类
最新评论

The Java Programming Language Notes

    博客分类:
 
阅读更多

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 的角落)

分享到:
评论

相关推荐

    javanotes7.pdf

    从这本书的标签“java jdk7 jdk javanotes”可以推测,它主要针对Java 7版本,包含了Java Development Kit(JDK)的使用方法和特性。由于本书是为教学目的编写的,因此它的内容应该比较注重初学者对Java语言的理解和...

    java7帮助文档

    JRE 7 provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language. The following conceptual diagram ...

    Lotus Domino Designer 6 Programming Guide, Volume 1_Overview and Formula Language

    ### Lotus Domino Designer 6 Programming Guide, Volume 1: Overview and Formula Language #### 一、概述 《Lotus Domino Designer 6 Programming Guide, Volume 1》是针对Lotus Domino Designer 6软件的一本...

    Fundamentals of Computer Graphics With Java

    While it is most commonly used with the C programming language, Jogl gives Java programmers access to all the features of OpenGL. The version of Jogl that was used in this course was 1.1.1a. A new ...

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    An example-filled guide to the Java programming language and core APIs. Java Technology Home Page Training for the Java programming language Directory of various training resources. Demonstration ...

    程序语言设计原理习题解答

    15.4 The First Functional Programming Language: LISP 624 15.5 An Introduction to Scheme 628 15.6 COMMON LISP 645 15.7 ML 645 15.8 Haskell 649 15.9 Applications of Functional Languages 653 ...

    计算机英语第二版清华第5单元.pdf

    The chapter introduces programming as a set of instructions, or statements, written in a specific programming language that a computer follows to convert raw data into meaningful information....

    Object-Oriented Software Construction 2nd

    31.1 PERSISTENCE FROM THE LANGUAGE 1037 31.2 BEYOND PERSISTENCE CLOSURE 1039 31.3 SCHEMA EVOLUTION 1041 31.4 FROM PERSISTENCE TO DATABASES 1047 31.5 OBJECT-RELATIONAL INTEROPERABILITY 1048 31.6 OBJECT...

    CommonsWare.The.Busy.Coders.Guide.to.Android.Development.Version.8.2.2017

    The Android platform gives developers a fair bit of control while still supporting a familiar programming language. However, the frameworks, GUI widgets, and development model is different than any ...

    Python Pocket Reference 2009 (epub 格式)

    This edition also incorporates notes about prominent enhancements in the imminent Python 3.1 release, which is intended to subsume Python 3.0 (in this book, Python 3.0 generally refers to the language...

    Scipy - Scipy Lecture Notes

    The Python Language **2.1 First Steps** Getting started with Python involves familiarizing yourself with basic syntax and semantics. Python emphasizes code readability and allows programmers to ...

    java_library.zip

    Java Code Library is a powerful multi-language source code Library with the following benefits: 1. Built-in library with 50,000++ lines of code 2. Quick and powerful search engine 3. Powerful ...

    外文翻译 stus MVC

    Function pointer arrays were the good old days of structured programming in C. Life is better now that we have Java technology, XML, J2EE, and all that. The Struts Controller is a servlet that maps ...

    Python程序设计(第二版).chm

    PyView: An Image and Notes Slideshow Section 9.6. PyDraw: Painting and Moving Graphics Section 9.7. PyClock: An Analog/Digital Clock Widget Section 9.8. PyToe: A Tic-Tac-Toe Game Widget ...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    Note that this guide is not a C++ tutorial: we assume that the reader is familiar with the language. Header Files In general, every .cc file should have an associated .h file. There are some common ...

    python3.6.5参考手册 chm

    Python参考手册,官方正式版参考手册,chm版。以下摘取部分内容:Navigation index modules | next | Python » 3.6.5 Documentation » Python Documentation contents What’s New in Python ...PEP 343: The ‘with...

    cs2150-notes:有关UVa CS2150,程序和数据表示形式的说明

    程序设计语言(Programming Language)是人与计算机之间沟通的桥梁。它们允许我们用易于理解的方式描述算法,然后由编译器或解释器转换为机器可以执行的指令。程序设计语言分为编译型和解释型两种类型,编译型语言如...

Global site tag (gtag.js) - Google Analytics