LINUKS BLOG

Make progress is the topic for ever...

My Photo
Name:
Location: China

It's a fans of computer/ Computer is my favorite/ Making progress is the topic for ever...

Thursday, February 14, 2008

Basic 是最为重要的,所以要有一块专门的地儿去做这事儿.


&.

ThinkingJava3_c02 : javadoc---Java API 文档生成器的使用   javadoc Example.java -d dir

 

&.

保留两位小数 DecimalFormat的使用

java.text.DecimalFormat df =new java.text.DecimalFormat("0.00");
String str1=df.format(50000);
String str2=df.format(8);

&.

equals() 与==的使用

String s="Hello" "Hello" s=="Hello":s.equals("Hello") true:true

String s=new String("Hello"); "Hello" s=="Hello":s.equals("Hello") false:true

==与!=比较的是引用(reference)

equal比较的是内容(content)/上下文

如果是比较两个对象时,而又没有重写equals()方法,只能调用object中的equals()方法,就不会相等,除非二者有相等的hashcode,而如果要想得到相等的结果,只是能重写hashcode的equals()方法

 

&.

关于赋值的一点奇妙的现象

class Number{
 int i;
}
class E072_Assign{
 public static void main(String[] args){
  Number n1=new Number();
  Number n2=new Number();
  n1.i=9;
  n2.i=27;
  System.out.println("1: n1.i="+n1.i+" "+"n2.i="+n2.i);
  n1=n2;
  System.out.println("2: n1.i="+n1.i+" "+"n2.i="+n2.i);
  n1.i=47;
  System.out.println("3: n1.i="+n1.i+" "+"n2.i="+n2.i);
 }
}

首先研究一下上面的这段程序代码,如果没有仔细认真思考的话,我们很容易得出错误的结果的

而正确的结果是这样的:

1: n1.i=9 n2.i=27
2: n1.i=27 n2.i=27
3: n1.i=47 n2.i=47

其中最让人不可理解的主要是第三条,主要是因为赋值主要是对reference修改的.因而修改n1.i就会关联到n2

 

&.

finalize() VS System.gc()

 ystem.gc()建议(但不是要求)java虚拟机执行垃圾回收
一个对象的finalize()方法在它被垃圾回收器回收时被调用

 inalize的什么时候执行,是无法预料的,一般来说不会去写的。
 于System.gc()来说,系统的垃圾回收不是每时每刻都在做的,刚被释放的对象一定马上会被虚拟机处理,在内存很紧张的情况下,可以使用这个方法来强制让 虚拟机进行垃圾回收,但是这样做的效率是低下的,执行时会花掉一些时间。

public class E12_FinalizeAlwaysCalled {
  protected void finalize() {
  System.out.println("Finalize called");
  }
  public static void main(String args[]) {
  new E12_FinalizeAlwaysCalled();
  System.gc();//如果这里没有,将会是另一番景象
  }
} ///:~

 

&.

关于二维数组的几点体会

1.double数组的定义: double[][] array=new double[vSize1][vSize2];

2.二维数组的for循环: 

    for(int i=0;i<array.length;i++){ // 这里的length是第一维数组的大小

        for(int j=0;j<array[i].length;i++){ //这里的length是第二维数组的大小

            ...

        }

    }

3.对于main函数中的有返回值的方法调用:

    public static void maint(String[] args){

        double[][] array=TwoDDoubleArray(3,3,1.0,10.0);// 注意这里没有new,并且前面要加上类型,只有方法名加参数

 

    }

 

&.

public && protected && friendly && private:

1. public 任何类和方法都可以访问
2. protect 可被同一个包内访问,包外的话,只能由继承该类的子类访问。
3. fiendly 同一个包内的才可以访问。
4. private 只能在该类的内部访问

 

&.

final && static :

1.  被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要类被加载,该成员变量就会存在,不引用任何对象. 静态变量在内存中只有一个拷贝,而实例变量,在每创建一个对像时就会有一个拷贝.

2. final变量(常量)
  用final修饰的成员变量表示常量,值一旦给定就无法改变!

3.  static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
  对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
  对于方法,表示不可覆盖,并且可以通过类名直接访问。

&.

Abstract:

1.一个没有Abstract方法 的抽象类是不能在main函数中实例化的.

2.一个Abstract类是可以继承并且实例化的.

3.如果一个类没有足够的信息来描述一个对象的话,那么这个类就是一个抽象类

4.在abstractclass方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是staticfinal的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstractclass。
从编程的角度来看,abstractclass和interface都可以用来实现"designbycontract"的思想。但是在具体的使用上面还是有一些区别的。
首先,abstractclass在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。
其次,在abstractclass的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。
5.关于接口和另外一个不知道是什么东西 接口是需要实现其所有方法的,而另外一个则不需要实现所有方法,而只需要实现需要实现的方法即可@??????

&

1.

0 Comments:

Post a Comment

<< Home