Thinking In Java学习之50问(ZZ)

前言
作为一个搞了几年Java的老朋友而言,几乎都是摸着石头过河,许多Java方面的技术细节,只知其然,不知所以然。从前做过一些框架和底层的JAVA设计和开发,但是有些技术细节不够严谨,所以有必要在理论上丰富一下自我。先看看TIJ,然后找一些设计模式来研读一下。
Bruce Eckel所写,侯建所译的Thinking系列,大名鼎鼎,但是买来之后一直束之高阁,等到今天再来翻看,Thinking In Java已经到了第4版了,Java已经进入了1.5,所以在网上找了一份英文原版(www.bruceeckel.com)和shhgs的中文版(http://www.wgqqh.com/shhgs/tij.html)进行对照研读,此过程中,列出了若干问题,Blog之日后自省.  /WiseKing  2005/11
 
chapter I Introduction to Objects
1。如何理解对象的状态(state),行为(behavior)和身份(identify)?
2。理解类的重用方式:合成(Composition)和继承(inheritance)?
3。interface与abstract class?
4。java语言的容器类(Container)包括啥?通常用哪个类取出容器内的元素?
5。java中的类都是单根继承的吗?
6。啥是覆盖overriding,重载overloading?
 
chapter II Everything is an Object
7。指向对象的是指针(pointer),还是引用(reference)?
8。Java中的内存是如何分配的?数据存储的6个地方是哪里?
9。原始(primitive)类型都有哪些?他们是在堆(heap)中分配还是栈(stack)中分配?char是多少位(bit)的?
10。类(class)中的成员变量(fields)必须要附初值吗,如果是final的又将怎样?函数中定义的变量使用前必须要附初值吗?
11。用static定义类数据(class datas)与类方法(class methods)的理解?
 
chapter III Controlling Program Flow
12。equals和==在比较对象时候的区别,自定义的对象可以直接使用equals比较吗?
13。什么是逻辑运算符的短接(short circuiting)?
14。移位运算符有哪些?,>>>是啥?
 
chapter IV Initialization & Cleanup
15。编程规范上要求类的成员函数名首字母都要小写,除了那种函数?
16。对原始类型参数的重载函数的调用规则是什么?
17。interface可以定义成员变量吗?如果能有啥要求?
18。如何在构造函数里正确地调用构造函数?
19。静态(static)函数只能调用静态函数或静态成员变量?
20。final, finally, finallize的区别?
21。如何理解java“传送带”方式的内存分配?
 
chapter V  Hiding the Implementation
22。谈谈java中的访问控制符,啥是package访问权限(package access, 有时也称作友员friendly)?
23。下面的代码中i和j的访问控制权限是一回事吗?friendly可以被继承类访问吗?
public class Test{
  int i;
  private int j;
}
24。类只有两种访问权限,是哪两种?如果不希望别人访问这个类,怎么办(Singleton)?

chapter VI  Reusing Classes
25。基类中的private方法如果在继承类中被实现,则其不是覆盖,也不是重载,问什么?
26。在构造派生类的过程中,基类的构造函数总是先得到调用,然后再初始(且只初始)该派生类的成员变量,最后调用该派生类的构造函数正文?例子:
class Meal {
  Meal() { System.out.println("Meal()"); }
}

class Bread {
  Bread() { System.out.println("Bread()"); }
}

class Cheese {
  Cheese() { System.out.println("Cheese()"); }
}

class Lettuce {
  Lettuce() { System.out.println("Lettuce()"); }
}

class Lunch extends Meal {
  Lunch() { System.out.println("Lunch()"); }
}

class PortableLunch extends Lunch {
  PortableLunch() { System.out.println("PortableLunch()");}
}

public class Sandwich extends PortableLunch {
  private Bread b = new Bread();
  private Cheese c = new Cheese();
  private Lettuce l = new Lettuce();
  public Sandwich() {
    System.out.println("Sandwich()");
  }
  public static void main(String[] args) {
    new Sandwich();
  }
}
27。如果在基类中调用抽象方法(该方法在继承类中实现),调用顺序又如何?例子:
abstract class Glyph {
  abstract void draw();
  Glyph() {
    System.out.println("Glyph() before draw()");
    draw();
    System.out.println("Glyph() after draw()");
  }
}

class RoundGlyph extends Glyph {
  private int radius = 1;
  RoundGlyph(int r) {
    radius = r;
    System.out.println(
      "RoundGlyph.RoundGlyph(), radius = " + radius);
  }
  void draw() {
    System.out.println(
      "RoundGlyph.draw(), radius = " + radius);
  }
}

public class PolyConstructors {
  public static void main(String[] args) {
    new RoundGlyph(5);
  }
}
 
chapter VII Polymorphism
28。如何正确理解多态?
29。什么是多态中类和基类之间的上传(up casting)和下传(down casting)?
 
chapter VIII Interfaces & Inner Classes
 
chapter IX   Error Handling with Exceptions
30. Error和Exception区别?
31。在异常处理中,一个try可以跟随多个catch,但每个catch都有一个且只能有一个特定类型的参数
32。Exception的基类是啥?该类有一个著名的方法printStackTrace()
Throwable<--Exception<--OthersException.
33。throws与throw区别?finally和final的区别?
34。编译时所有的异常都需要在代码中进行处理,除了一类异常,是啥?
RuntimeException.
35。列举常见的RuntimeException?
NullPointerException, ArrayIndexOutOfBoundsException,..
 
Chapter X   Detecting Types
36。如何使用instaceof, calss.forName()?
37。会使用reflect吗?
 
Chapter XI   Collections of Objects
38。数组与其它容器的区别体现在三个方面:效率,类型可识别和可持用原数据类型(primitives),那么由此带来的限制是什么呢?(不可动态扩展,类型固定)
39。数组需要两极构造,一是指数组长度空间的构造,二是指数组单元的构造
40。java2的容器根据所持有对象的方式分为两类:Collection(有一定规律的独立元素)和Map(存储键-值对应的pair), 在Collection中存在两个概念List和Set, List强调顺序性,而Set强调不能保存重复单元
41。熟悉一下JDK(1.4)的容器类的关系图,这样你就会知道HashMap, Vector, ArrayList从哪里继承而来
42。ArrayList和LinkedList的区别,各在什么时候使用最好?
 
Chapter XII The Java I/O System
43。懂得使用这些类File, InputStream, outputStream, System.in, System.out,
44。什么是序列化Serializable,Serilizable和Externalizable的区别?
 
Chapter XIII Concurrency
45。定义的线程类可以是继承Thread基类或者实现Runnable接口(如果该类还需要继承别的类),对于Thread类,启动线程的方法是? 我们的程序中要实现的方法是?(start(), run())
Runnable也要实现run()方法,并且调用时候要使用(new Thread(new RunnableThread(),.)).start()
46。线程中的sleep()和yield()方法
47。线程的优先级priority
48。什么是守护线程(Daemon-thread)?如何设置一个线程为守护线程?
49。关键词synchronized的正确理解与使用,关键段(有时你只需要防止多个线程同时访问方法中的某一部分,而不是整个方法)?
50。线程间的协作wait(),notify(),interrupt()
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值