您的位置:首页 > 编程语言 > Java开发

Java知识点小结

2014-10-05 10:18 218 查看
1. 不可以在函数内部定义enum 枚举类型,like

public void foo() {
enum LocalEnum {
A,B,C
};
原因主要是因为enum是静态嵌套类。 具体见:why cant enums be declared locally in a method

2. String 中的length方法将返回给定字符串所需要的代码单元数量。

    调用s.charAt(n)将返回位置n的代码单元。

3. StringBuilder与StringBuffer

    StringBuider的前身是StringBuffer。  StringBuffer的效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作。

    如果所有字符串在一个单线程中编辑(通常都是这样),则应该用StringBuilder替代它。这两个类的API是相同的。

4. 不要编写返回引用可变对象的访问器方法。否则会破坏封装性。如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone).

5. Java总是采用按值调用。有人可能认为Java对对象采用的是引用调用,实际上这种理解是不对的。

   首先,举个例子。

public static void swap(Employee x, Employee y)
{
Employee temp = x;
x = y;
y = temp;
}
 如果Java对对象采用的是引用调用,那么这个方法就应该能够实现交换数据的效果:

Employee a = new Employee("Alice",...);
Employee b = new Employee("Bob",...);
swap(a,b);
但是,方法并没有改变存储在变量a和变量b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。
总结下,Java 应用程序按值传递参数(引用类型或基本类型),其实都是传递他们的一份拷贝.而不是数据本身.(不是像 C++ 中那样对原始值进行操作。)

6. Java在创建一个子类时,初始化顺序为:

     父类静态代码块->子类静态代码块->父类非静态代码块->父类构造函数>子类非静态代码块->子类构造函数

public class mainjava {//父类
int a = test();
{//非静态代码块
System.out.println("父类的非静态代码块2");
}
public int test()
{
System.out.println("父类的非静态代码块1");
return 1;
}
static {
System.out.println("父类的静态代码块");
}
public mainjava(){
System.out.println("父类的构造函数");
}
}

class Son extends mainjava {
{
System.out.println("子类的非静态代码块");
}
static {
System.out.println("子类的静态代码块");
}
public Son(){
System.out.println("子类的构造方法");
}

public static void main(String[] args){
Son a = new Son()  ;
}
}

7. 关于 equals() 与 hashcode():

    如果要重写equals()方法,必须要重写hashcode()方法;

    尽量保证使用对象的同一个属性来生成hashcode()和equals()两个方法;

    任何时候只要a.equals(b), 那么a.hashcode()必须和b.hashcode()相等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 小结 总结 知识