重读《Thinking in Java》,这次选择的是侯捷翻译的第二版,翻译的真好:)
第一章 对象导论
一些观点:
编程语言其实是提供了一种抽象:汇编语言对低层的实体机器进行了少量的抽象,c,fortran等命令型或解释型语言则在汇编语言之上再进行抽象,而始终是没有摆脱以电脑结构来思考问题的窘境。新的编程语言需要提供机器和实际问题的映射模型(另一种形式的抽象)。
一些问题:
1. Java的访问权限介绍:public,private,protected,default
2. Java中对象如何生成和存储?参考1
Java对象的生成不受用户控制,在实现上,java将基本类型变量和对象引用变量存储于栈内存,将其它对象存储于堆内存,而将静态对象存储于特别开辟的静态存储区?
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。
单根继承的好处?
3. 什么是多态?待补充~~~
多态是实现接口和实现的分离的一种手段
4. Java的泛型?需要学习
5. Java7对多核编程的优势到底在哪?
Java编程的准则:
l 考虑组合优于考虑继承。
l C++将对象的生成方式交给用户,以期得到最大的效率,如果想取得更好的效率,将对象放在栈内存或静态存储区中。
第二章 万物皆为对象
用以操控对象的那些标识符,实际上只是对象的引用而已。
可以讲Java类中的某个成员变量设为静态,那么它就存储在静态存储空间,但不可以把对象本身置于静态存储空间。
Wrapper class?外覆类
Java为变量提供初始值,当且仅当变量是class内的成员的时候,即变量为局部变量的时候,Java不会提供初始值。所以,给变量赋初始值是一个好的习惯。
在类文件的开始需要通过import导入一些外部类,通过“a.b.*;”导入一群类的方法很方便,但是会影响编译的时间。为什么?
一些问题
1. Java基本类型所占用的字节?
boolean:未明确定义
byte:1字节
char:2
short:2
int4
long:8
float:4
double:8
所有基本数值类型都是有符号
2. Java的Biginteger类和BigDecimal类的实现原理是怎样的?
在计算机中,数字大都是使用二进制补码来表示的。Java的BigInteger使用一个整数数组来表示二进制的数值,使用一个标识来表示数的符号。这样,在计算加减乘除的时候可以减小符号的影响。
对于JDK中的BigInteger和BigDecimal的实现,需要继续研读。
如何计算任意整数的阶乘
3. 简单介绍一下java.lang包。To be continued
提供利用 Java 编程语言进行程序设计的基础类。最重要的类是 Object(它是类层次结构的根)和 Class(它的实例表示正在运行的应用程序中的类)。
把基本类型的值当成一个对象来表示通常很有必要。包装器类 Boolean、Character、Integer、Long、Float 和 Double 就是用于这个目的。例如,一个 Double 类型的对象包含了一个类型为 double 的字段,这表示如果引用某个值,则可以将该值存储在引用类型的变量中。这些类还提供了大量用于转换基值的方法,并支持一些标准方法,比如 equals 和 hashCode。Void 类是一个非实例化的类,它保持一个对表示基本类型 void 的 Class 对象的引用。
类 Math 提供了常用的数学函数,比如正弦、余弦和平方根。类似地,类 String 和 StringBuffer 提供了常用的字符串操作。
类 ClassLoader、Process、Runtime、SecurityManager 和 System 提供了管理类的动态加载、外部进程创建、主机环境查询(比如时间)和安全策略实施等“系统操作”。
类 Throwable 包含了可能由 throw 语句抛出的对象(§14.16)。Throwable 的子类表示错误和异常。