自己需要复习的:
三、多个对象
六、对象数组
七、方法的重载
一、面向对象两个要素:
类:对一类事物的描述,是抽象的概念上的。如:人
对象:实际存在的事物的个体,也称为实例。如:小红,小明
二、类中包含:
属性:类中的成员变量(属性包含默认初始化值)
方法:类中的成员方法
三、多个类对象
如果创建了一个类的多个对象,则每个对象都独立拥有一套类的属性(非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
十、递归方法