一、教材学习内容(4.类和对象)
1、编程语言的几个发展对象:面对机器语言(01代码)、面向过程语言(C语言)、面对对象语言,其中面向对象语言有三个特点:1)封装性2)继承性3)多态性
2、类(class)的创建包括1)类声明2)类体 两部分组成
3、成员变量1)类型:可以是Java中的任何一种类型。 2)有效范围:成员变量在整个类内都有效,其有效性与它在类体中的书写的先后位置无关。3)编程风格:①一行只声明一个变量②首单词字母小写,第二个单词开始首字母大写③变量名字见名知意
4、方法由1)方法头,即声明2)方法体,即定义 两部分组成,其中方法的名字定义与成员变量相同
5、区分成员变量与局部变量,若局部变量的名字与成员变量名字相同,那么成员变量在该局部变量的生存域中被隐藏,如果想要调用该成员变量,可以用this.成员变量名调用。
6、成员变量可以有默认值,而局部变量没有默认值!因此在使用局部变量之前必须为它赋予初值。
7、构造方法1) 方法名必须与类名相同。2)不要声明返回类型。3)不能被static、final修饰。构造方法不能被子类继承,所以用final和abstract修饰没有意义。构造方法用于初始化一个新建的对象,所以用static修饰没有意义。
特别的,允许一个类中有多个构造方法(重载构造函数),若类中没有编写构造函数,则系统会默认地为该类创建一个无参的构造函数,且方法体没有语句。
8、创建对象 类名 对象名=new 构造函数名(参数列表)
关于创建对象时的默认值:
整形——0
浮点型——0.0
波尔型——flase
引用型——null
9、对象的引用存放在栈中,对象的实体存放在堆中。栈存取速度快,堆动态分配内存大小。
10、避免使用空对象,否则会报错。
11、一个类的两个对象若具有相同的引用,则二者就拥有完全相同的变量。
特别的,在编写程序时尽量避免使用匿名对象去访问自己的变量,以免引起混乱。
12、可变参数:指在声明方法时不给出参数列表中从某项开始直至最后一项参数的名字和个数,但这些参数的类型必须相同,用“...”表示若干参数(比起数组,个数的变化更加灵活)
特别的,可以用参数名.length查询参数列表的长度。
简单例子,用可变参数求多个数的和(个数不确定)
public class Varable {
public static void main(String[] args) {
System.out.println(add(2, 3));
System.out.println(add(2, 3, 5));
}
public static int add(int x, int... args) {
int sum = x;
for (int i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
}
13、组合和复用:1)“黑盒”复用,即当前对象只能委托被组合对象并调用其方法2)当前对象可以随意更改被组合对象。
class Circle {
double radius,area;
void setRadius(double r) {
radius=r;
}
double getRadius() {
return radius;
}
double getArea(){
area=3.14*radius*radius;
return area;
}
}
class Circular {
Circle bottom;
double height;
void setBottom(Circle c) {
bottom = c;
}
void setHeight(double h) {
height = h;
}
double getVolme() {
if(bottom == null)
return -1;
else
return bottom.getArea()*height/3.0;
}
double getBottomRadius() {
return bottom.getRadius();
}
public void setBottomRadius(double r){
bottom.setRadius(r);
}
}
public class Seven{
public static void main(String args[]) {
Circle circle = new Circle(); //【代码1】
circle.setRadius(10); //【代码2】
Circular circular = new Circular(); //【代码3】
System.out.println("circle的引用:"+circle);
System.out.println("圆锥的bottom的引用:"+circular.bottom);
circular.setHeight(5);
circular.setBottom(circle); //【代码4】
System.out.println("circle的引用:"+circle);
System.out.println("圆锥的bottom的引用:"+circular.bottom);
System.out.println("圆锥的体积:"+circular.getVolme());
System.out.println("修改circle的半径,bottom的半径同样变化");
circle.setRadius(20); //【代码5】
System.out.println("bottom的半径:"+circular.getBottomRadius());
System.out.println("重新创建circle,cirlce的引用将发生变化");
circle = new Circle(); //重新创建circle 【代码6】
System.out.println("circle的引用:"+circle);
System.out.println("但是不影响circular的bottom的引用");
System.out.println("圆锥的bottom的引用:"+circular.bottom);
}
}
二、教材学习中的问题和解决过程
暂无
三、代码调试过程中的问题
暂无
四、学习思考和感悟
暂无
五、学习进度条
代码函数(新增/积累) | 博客量(新增/积累) | 学习时间(新增/积累) | 重要成长 | |
目标 | 7000行 | 30篇 | 400h | |
第四周 | 868/1620 | 2/5 | 19/46 |