自己需要复习的: 三、多个对象 六、对象数组 七、方法的重载
一、面向对象两个要素: 类:对一类事物的描述,是抽象的概念上的。如:人 对象:实际存在的事物的个体,也称为实例。如:小红,小明 二、类中包含: 属性:类中的成员变量(属性包含默认初始化值) 方法:类中的成员方法 三、多个类对象 如果创建了一个类的多个对象,则每个对象都独立拥有一套类的属性(非static)。我们对其中一个对象的属性赋值,不影响另外一个对象的相同属性值。
Person p1 = new Person(); Person p2 = new Person(); Person p3 = p1; p1.name = "小红”; System.out.println(p1.name);//小红 System.out.println(p2.name);//null System.out.println(p1.name);//小红 p3.name = "李四”; System.out.println(p1.name);//李四p1,p2,p3在栈内存中,p1(new) p3(与p1共用)指向堆中同一个内存,p2(new)执行堆内存中另一个位置,但是未赋值所以默认为初始化值null。 四、内存解析 五.成员变量与局部变量的区别 ①声明位置不同 ②成员变量可以添加权限设置:private,default,protected,public。局部变量不可以使用权限修饰符。 ③成员变量有默认初始化值;局部变量没有局部初始化值,意味着调用局部变量之前一定要赋初值。 ④在内存中加载的位置。成员变量加载在heap中,局部变量加载在栈中。 六.对象数组
Student [] stus = new Student[20]; for(int i=0;i<stus.length;i++){ //给数组元素赋值 stus[i] = new Student(); //给student对象的属性赋值 stus[i].number = (i+1); //年纪:[1-6] stus[i].state=(int)(Math.random*(6-1+1)+6); //成绩[0-100] stus[i].score = (int)(Math.random*(100-0+1)+100); } //stus[i]:是实例化的对象的地址,输出的是地址 //stus[i].number:实例化对象的地址对应的属性值六、匿名对象 new Student.number; new Studeng.score; 这两个的调用不是同一个对象。 1.我们创建的对象,没有显式的赋给一个变量名。即为匿名对象 2.特征:匿名对象只能调用一次 3.使用:如下 传递参数new Phone是一个匿名对象,在堆中开辟空间了,但是没有栈中的变量指向。传递给show之后,赋值给栈中的phone就有了指向。 七、方法的重载 1.重载:方法名相同,参数个数或者参数类型不同 2.判断是否是重载:跟方法的权限修饰符、返回值、形参变量名、方法体都没有关系。 3.通过对象调用方法时,如何确定某一个指定的方法: 看方法名---->再看参数列表要注意参数列表的兼容性,如 如果有第一个函数,调用getSum(3,4),输出1 如果没有第一个函数,调用getSum(3,4),输出2,完成了转型。 4.重载的细节: ①.参数列表不同:参数类型、参数个数、参数顺序不同都算 ②.参数名,参数列表相同,函数类型不同,不行 ③.参数(int i,int j)(int m,int n)不算参数列表不同 八、可变个数形参的方法 jdk 5.0新增的内容 1.可变个数形参的格式:数据类型…变量名 2.当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个…都匹配到可变参数个数的show方法中。 3.如果参数个数有刚好匹配的方法,就调用匹配的方法,不需要调用可变参数的方法。如下图,show(“hello”)就调用对应的show(String s)方法,而不调用show(String…strs)。 4.可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。即:对于下面两个方法不能同时存在:会报错,重复。 show(“AA”,"“BB”,“CC”);//当做数组去用就可以 show(new String); 都通过数组遍历就可以。 5.可变个数行参只能放到形参列表的末尾。且最多只能声明一个可变形参。 九、值传递引用传递 区分传递的是普通变量,还是引用变量。 输出 15 0 20 可以在method中 a=a10 b=b20 System.exit(0);//直接停止程序,不允许执行原来main中的sou 十、递归方法