(第四章)
一.对象与类
1.访问器方法:之访问对象而不修改对象
2.工厂方法:类似LocalDate和NumberFormat类使用静态工厂方法来构造对象。
eg.LocalDate.now()
原因:①无法命名构造器,构造器的名字必须与类名相同。
②当使用构造其实无法改变所构造的对象类型,而Factory方法将返回一个DecimalFormat类对象,这是NumberFormat的子类。
3.方法参数:java总是采用按值调用,方法不能修改传递给它的任何参数变量的内容。
java对对象采用的不是引用调用,实际上对象引用是按值传递的。
一个方法不能修改一个基本数据的参数。一个方法可以改变一个对象参数的状态。一个方法不能让对象参数引用一个新的对象。参数变量做了更换,而实际的对象不改变。
5.静态导入
导入的时候:import static java.lang.Math.*;
可直接调用方法而不需加类名前缀,数学运算等比较实用。
6.方法注释
@param 变量描述 @return描述 @throws描述
通用注释:@author姓名 @version文本 @since文本(始于)@see引用
二.继承
1.超类的引用不能赋予子类。(不能向下转型)
2.强制类型转换:将某个类的对象转换成另一个类的对象引用
Manager boss=(Manager)staff[0];
用处为:暂时忽视对象的实际类型之后使用对象的全部功能。
3.Object类是所有类的超类
①equals方法:java语言规范要求equals方法拥有自反性对称性传递性一致性,如果方法内写入了instanceof来判断类的归属问题,则无法体现对称性。
②hashCode:
散列码是有对象导出的一个整形值。如果两个对象不同,基本上散列码也各不相同。调用string类的hashcode方法可以得到散列码。hashcode方法定义在object类中,其值为对象的存储地址。
③toString方法:未覆盖则调用的是object类的打印对象所属的类名和散列码。
④getClass:包含对象信息的类对象。
4.泛型数组列表
①Arraylist<emploee>staff=new ArrayList<>()动态大小的数组。尖括号中需要放置引用变量,需要基本类型时可使用对象包装器类(Integer、Long。。。)。
②用add方法将元素添加到数组列表中,当数组满时将自动扩大空间,
③staff.add();在尾端添加
staff.add(n,e);在某个位置添加
但是如果能够提前分配好数组大小而不用扩大运行将更加迅速,确认不会添加新元素后,用trimTosize方法去掉余下的部分。
staff.size()//类似于 a.length
staff.set(i,harry);//类似于a[i]=harry;
Employee e=staff.get(i);//类似于Employee e =a[i];
for(Employee e:staff)
//similar to
for(int i=0;i<staff.size();i++){
Employee e = staff.get(i);
}
④自动装箱:调用list.add(3)------>自动list.add(Integer.valueOf(3));
补充一点二维数组:
int[] y[]----int[][] y,故y为二维数组。
5.参数数量可变的方法
eg
public static double max(double... values)
{
double largest=Double.NEGATIVE_INFINITY;
for(double v:valuse) if(v>largest) lartgest=v;
return largest;
}
// 可以像下面这样调用这个方法
//double m =max(3.1,40.4,-5);
6.反射
反射机制可以用来:①在运行时分析类的能力
②在运行时查看对象*编写一个toString方法供所有类使用
③实现通用的数组操作代码
④利用Method对象
有关反射的内容,由于内容比较重要,在深入学习后将专门做笔记。