Java编程思想学习心得
-----------------------------------------------------------------------------------
2008-12-4
1.java对象存储在栈中基本类型存储在堆栈中
2.作为一个类的成员使用时,java才确保给定其默认值。(局部变量不是适应)
3.javadoc命令只能始于/** ...*/ 为public和protected成员进行文档注释,
private和“包内可访问成员”的注释会被忽略掉,但是可以用-private标记来输出。
4.关系操作符==和!=适应所有的对象,但是他们比较对象的引用是不是相同,如果要比较对象的内容
是否相等的话要用equals()方法,如果自己没有改写这个方法的话,还是比较对象的引用。
5.for(int i=0,j=0;i<10&&j!=11;i++,j++),只有for循环才具备在控制表达式里定义变量的能力。其他
任何条件或循环语句,都不可以采用这种方法。
------------------------------------------------------------------------------------------------
2008-12-5
1.this:关键字的作用。返回本对象的引用,在构造器中调用构造器。
2.将所有的对象放于String表达式之中,就可以轻易的将他们强制转换为String的表达形式。
3.如果编译单元完全不带public类也是可能的,在这种情况下,你可以随意对文件命名。
4.请注意,类既不可以是private的,也不可以是protected的。所以对于类的访问权限,你仅有两个选择:
包访问权或者是public。(内部类可以是private或是protected的,这是特例。)
5.Java允许生成空白final,是指被声明为final但又未给定初值的数据成员。
如:private final int j;//Blank final 你必须在构造方法中对此final进行赋值。
类中所有的private方法读被隐含是final的。(你可以对private方法增加final修饰符,但这是无意义的。)
6.只有非private方法才可以被重载,但是我们要密切注意重载private方法的现象,虽然编译不会出错,但是
不回按我们所期望的来执行。在子类中,对于基类中的private方法,我们最好用一个不同的名字。
------------------------------------------------------------------------------------------------
2008-12-8
内部类的特性:将一个类的定义放到另一个类的定义内部。
1.如果你想从外部类的非静态方法之外的任意位置创建某个内部类对象你必须象main()方法中的那样,具体地
指明这个对象的类型:OuterClassName.InnerClassName。
2.可以创建继承接口的内部匿名类对象。
嵌套类:如果你不需要内部类对象与其外围类对象之间的联系,你可以将内部类声明为static。
普通的内部类对象隐含地保存了一个引用,指向它的外围类对象。然而,当内部类为static时,情况就不一样了
嵌套类以为着:
a. 要创建嵌套类对象,并不需要起外围类的对象。
b.不能从嵌套类的对象中访问非静态的外围类对象。
c.普通内部类的属性与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static属性,也不 能包含嵌套类。
局部类部类:在代码块里创建的内部类,局部内部类不能有访问说明符,它可以访问当前代码块内的常量,和次外围类所有的成员。
每个内部类都能独立地继承自一个(接口)实现,所以无论外围类是否已经继承了某个实现,对于内部类都无影响。
------------------------------------------------------------------------------------------------
2008-12-9
1.重新抛出异常会把异常抛给上一级环境中的异常处理程序。同一个try块的后续catch字句将被忽略。此外,异常对象的所有信息读得以保持,高一级环境中捕获次异常的处理程序可以从这里的异常对象中得到所有信息。
2.异常链:捕获一个异常然后抛出另有个异常,并且希望把原始异常的信息保存下来。
3.一个出现在基类方法中的异常说明中的异常,不一定回出现在派生类方法的异常说明里,这点同继承的规则不同在继承中,基类的方法必须出现在派生类里,在继承和重载过程中,方法的“异常说明的接口”不是变大了而是变小了。
4.当你重写方法时,你只能抛出在父类方法的异常说明里列出的那些异常。因为这样的话,对父类能工作的代码应用到字类对象的时候,一样能工作(这是面向对象的基本概念),异常也不例外。
------------------------------------------------------------------------------------------------
2008-12-10
复制数组:用System.arraycopy(),比用for循环复制要快很多。
Java提供两种比较功能:
1.实现java.lang.Comparable接口。
2.实现java.util.comparator接口。
collection:一组独立的元素。
map:一组成对的键值对(key-value)对象
容器的缺点:未知类型。容器只保存object型的引用。
List:保证维护元素特定的顺序。
ArrayList:数组实现的list,允许对元素进行快速随机访问,但是向list中间插入与移除元素很慢。
LinkedList:双向链表实现,向list中间插入与移除元素很快,随机访问则相对较慢。
Set:不保存重复的元素。每个元素都上唯一的,不保证元素的次序。
HashSet:为快速查找设计的set,存入Hashset的对象必须定义了hashCode().
TreeSet:保持次序的Set,底层为数结构。使用它可以从Set中提取有序的序列。
LinkedHashSet:具有HashSet的查询速度,内部使用链表维护元素的顺序,在使用迭代器遍历Set时,
结果会按元素插入的次序显示。
------------------------------------------------------------------------------------------------
正确的equals()方法必须满足下列5个条件。
1.自反性:对任意的x,x.equals(x)一定返回true。
2.对称性:对于任意的x,y,若y.equals(x)为true,则x.equals(y)也为ture。
3.传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
4.一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
5.对于任何非空引用值 x,x.equals(null) 都应返回 false。
------------------------------------------------------------------------------------------------
2008-12-11
1.匿名内部类既可以实现一个接口,又可以继承类(具体类或者抽象类)。
2.如果定义一个匿名内部类,它要访问在它外部定义的一个变量,这个变量必须使用final关键字来修饰。
如下面的例子:
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/**
* @author lin
*
*/
public class DirList {
//not using final in anonymous inner class
public static FilenameFilter filter(final String regex){//注意此处的 final
return new FilenameFilter(){
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(
new File(name).getName()).matches();
}
};
}
/**
* @param args
*/
public static void main(String[] args) {
File path = new File(".");
String [] list;
if(args.length==0)
list=path.list();
else
list=path.list(filter(args[0]));
for(int i=0;i<list.length;i++)
System.out.println(list[i]);
}
}
posted on 2008-12-12 08:59
fly 阅读(635)
评论(0) 编辑 收藏 所属分类:
java学习