1.OOA→OOD→OOI(用OOP实现)
OOA---Object Oriented Analysis 面向对象的分析
OOD---Object Oriented Design 面向对象的设计
OOI---Object Oriented Implementation 面向对象的实现
OOP---Object Oriented Programming 面向对象程序设计(JAVA)
2.类之间的关系
依赖:一个类的方法操纵另一个类的对象,就说一个类依赖于另一个类【uses-a】
聚合:一个类对象包含另一个类对象【has-a】
继承:类A扩展类B,即类A继承类B【is-a】
3.构造器,更改器,访问器
构造器:一种特殊的方法,用来构造并初始化对象。
(new操作符的返回值是一个引用,因为一个对象变量并没有实际包含一个对象,而仅仅引用一个对象)
更改器方法:对实例域做出修改的方法。 ( eg:xxx.setxx(); )
访问器方法:仅访问实例域(对象中的数据)而不进行修改的方法。
4. java中main方法设置为static的原因:
静态方法不需要对任何对象进行访问,在启动程序的时候还没有任何一个对象,静态的main方法将执行并创建程序所需要的对象。
5.值调用和引用调用
值调用:表示方法接受的是调用者提供的值
引用调用:表示方法接受的是调用者提供的变量地址
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
eg:
public class CallByTest {
public static void main(String[] args) {
int m=1;
CallByTest cbt=new CallByTest();
System.out.println(m);
cbt.changed(m);
System.out.println(m);
System.out.println(cbt.test);
cbt.change(cbt);
System.out.println(cbt.test);
}
public void changed(int a){ //一个尝试修改传入变量的方法
a=3;
}
public void change(CallByTest c){//一个尝试修改传入对象的实例域的方法
c.test=200;
}
private int test=100;
}
输出的结果如下:1
1
100
200
原因:当我们向一个方法中传入一个参数时,方法得到的是传入参数的一个拷贝,而不是原来那个参数。当我们传入一个变量时,方法对该变量进行拷贝,所以我们修改的是拷贝的变量,而不是传入的原变量,所以原变量不会改变。当我们传入的是一个对象的引用时,方法对该引用做一个拷贝,但拷贝出来的引用还是跟原来的引用指向同一个对象,所以通过拷贝后的引用仍然可以修改原来的对象。
6.重载
①如果一个类中的多个方法有相同的名字,不同的参数,这种特征叫做重载。当我们向具有相同名字的方法传入不同的参数时,编译器会自动进行匹配选择相对应的方法。这个过程称为重载解析。
②方法的签名:要完整地描述一个方法,需要指出方法名以及参数类型。这叫做方法的签名。eg:add(int a,int b)
返回类型不是方法签名的一部分,所以,不能有两个名字相同,参数类型也相同而返回类型不同的方法。
③方法名相同,参数类型相同而顺序不同的方法也能构成重载。
④方法的重载中,如果传入参数的类型小于接受参数的类型,传入参数类型会被提升以匹配接受的参数类型,如果传入的参数类型大于接受参数类型,则必须进行窄化转换。
7.如果一个类提供了至少一个带参数的构造器,而没有提供默认的不带参数的构造器,那么在构造对象的时候必须使用带参数的构造器,如果使用默认的不带参数的构造器会被视为不合法。
8.初始化块和静态块
初始化数据域有三种方法:1.在构造器中设置值 2.在声明中赋值 3.使用初始化块
只要构造类的对象,类中的初始化块就会被执行,一个类可以包含多个初始化块。
静态块用于对静态域进行初始化。
初始化块和静态快的区别:静态块在类第一次加载的时候执行,并且只执行一次,操作的内存在静态区。初始化块在每一个对象被创建的时候运行,操作的内存在用户区。
eg:
public class CallByTest {
public static void main(String[] args) {
CallByTest cbt1=new CallByTest();//第一次创建对象
System.out.println(CallByTest.test);
CallByTest cbt2=new CallByTest();//第二次创建对象
System.out.println(CallByTest.test);
}
{
test++; //初始化块
}
static{
test=1; //静态块
}
private static int test;
}
输出的结果为: 2
3
在类第一次被加载的时候,静态块先被执行,test被赋值为1,当对象被创建的时候,初始化块被执行,test变为2,第二次创建对象的时候,静态块不会再执行,初始化块再次被执行,test变为3.
9.初始化数组的三种方式:
①int a[]=new int[5];
②int a[]={1,2,3,4,5};
③int a[]=new int[]{1,2,3,4,5};
在java中,当把一个数组赋值给另一个数组时,复制的其实是数组的引用,所以修改数组2,赋值的数组1也会改变。
public class ArrayTest {
public static void main(String[] args) {
int a[]=new int[]{1,2,3,4,5};
int b[];
b=a;
b[0]=0;
System.out.println(Arrays.toString(a));
}
}
结果:
[0, 2, 3, 4, 5]
10.权限关键字:
public:任何人都可以使用
private:只能在同一个类里使用
protected:只能在同一个类或者同一个包使用,子类可以使用父类的protected属性,但不能使用private属性
默认friendly:只能在同一个包中使用
类只能是public或者默认的包访问权限,不能是private或者protected