java学习笔记1

1.java类中的静态域与静态方法:

静态域与静态方法需要使用static关键字,

静态域:将域定于为static,每个类中都有这样一个域,而每个对象对该域有一个自己的拷贝,

public class Employee {

private static int nextID=1;

private int id;

 

public int getId() {

return id;

}

public void setId(int id) {

nextID++;

this.id = nextID;

}

}

Employee 的所有实例共享一个nextID,各拥有一个id.

静态常量:

class Math

{

public static final double  PI=3.1415926;

}

Math类中,PI为一个静态常量,不容再修改,且可以通过Math.PI直接访问。

 

静态方法:一种不能想对象实施操作的方法。例如Math类中的pow方法。

class MyMath

{

public  static final double  PI=3.1415926;

public static double getPI()

{

return PI;

}

};

静态方法不能操作对象中的非静态成员,但可以操作对象中的静态域(如过域是非final的,还可以进行修改操作。)

class MyMath

{

public  static  double  PI=3.1415926;

public static double getPI()

{

return PI;

}

public static void setPI()

{

PI++;

}

};

可以通过类名访问静态域。(访问指getset)。

 

2.类构造器用法

初始化数据具有多种途径,以下是构造过程中的构造顺序。

1).所有数据域被初始化位默认值(0false,null)

2).按照在类中声明的次序,依次执行所有域初始化语句和初始化块。

3).如果构造器第一行调用了其他的构造函数,则执行第二个构造函数。

4).执行构造函数的主体。

class Employee {

private static int nextID=1;

private int id;

private String name;

private double salary;

public Employee () {

name="";

salary=0;

}

 

//初始化块

{

id=nextID;

nextID++;

}

 

     static    //静态初始化块

{

Random generator=new Random();

nextId=generator.nextInt(1000);

}

}

 

3.类设计技巧

1).一定要将数据设置为私有,不要破坏类的封装性。

2).一定要对数据进行初始化

3)不要在类中使用果断的基本类型(不要将多个字段表示成一个属性,例如,地址可以定义成一个类,包含country,province,city等,而不要单独定义country字段,city字段,province字段)

4)不是所有的域都需要独立的域访问器和域更改器。有些字段在使用的时候需要加以限制。

5)使用标准格式进行类的定义。

6)将职责过多的类进行分解。

7)类名和方法名要能够体现他们的职责。

 

关于继承中的几点要求:

1)只能在继承层次间使用类型转换

2)在将超类(父类)转换成子类之前,应该使用instanceof进行检查。

3)若不希望一个类被继承,可以将该类设置为final类,不希望类中某一方法被重写,可以将该方法设置为final

4)抽象类的对象变量只能应用非抽象的子类

 

Java用于控制可见性的四个访问修饰符

1)仅对本类可见-----private

2)对所有类可见-----public

3)对本包和所有子类可见----protected

4)对本包可见-----默认

 

相等测试与继承

Java要求equals方法具有下面的一些特征:

1)自反性:对于任何非空引用Xx.equals(x)应该返回true

2)对称性:对于任何引用x和引用y,当且仅当y.equals(x)返回true ,x.equals(y)也要返回true

3)传递性:对于任何引用x,y,z,如果x.equals(y),y.equals(z),x.equals(z)也要返回true

4)一致性:如果xy的引用对象没有发生变化,反复调用x.equals(y)得到同样的结果。

 

 

Java 中的可变量参数

public static double Max(double...ds)

{

double largest=Double.MIN_VALUE;

for(double v:ds)

{

if(v>largest)

{

largest=v;

}

}

return largest;

}

ds的类型是double[]

 

Java 中的反射学习

Java 运行时系统为所有的对象维护一个被称为运行时的类型标示,这个信息保存着每个对象所属的类足迹,保存这些信息的类被称为Class.

1)ObjectgetClass()方法将会返回一个Class类型的实例.

Employee e ;

e.getClass().getName()   //返回 "Employee"

2)通过Class.forName(String className)来获得Class 实例

Class a=Class.forName("Employee") //如果有包名,则需要加上包名

Class date=Class.forName("java.util.Date")

3)如果T是任意的Java类型,T.class将代表匹配的类对象

    Class cl1=Date.class;

Class cl2=int.class;

通过classnewInstance()方法可以创建一个类的实例e.getClass().newInstance()

利用反射写的一个扩展数组的方法

public static Object  goodArrrayGrow(Object a)

{

Class cl=a.getClass();

if(cl.isArray())

{

return null;

}

Class componentType=cl.getComponentType();

int length=Array.getLength(a);

int newLength=length*11/10+10;

Object newArray=Array.newInstance(componentType, newLength);

System.arraycopy(a, 0, newArray, 0, length);

return newLength;

 

}

 

接口学习

为了让类实现一个接口,通常需要完成如下的操作

1)将类声明为实现给定接口

2)对接口中的所有方法经行实现

在接口中,所有的方法默认都是public的也只能是public的,可以使用abstract修饰词,因而在类中实现接口的时候必须制定接口的方法为public (实现接口的类的方法的的访问权限应该比接口中的权限高)

3)接口中的方法不能实现,只能在实现接口的类中实现

posted @ 2011-12-19 10:55  黎明露珠  阅读(311)  评论(0编辑  收藏  举报