LINUKS BLOG
Make progress is the topic for ever...
About Me
- Name: LINUKS
- 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.