编程思想
将大象装进冰箱里
这个事里面有两个对象,大象,冰箱
步骤:
1.开门
2.放大象
3.关门
面向过程
只考虑事物的发展顺序,不考虑参与在事物中的对象
现在使用该思想的语言: C, 汇编
面向对象
先考虑事物中存在哪些对象
然后再考虑事物的发展顺序
现在使用该思想的语言: Java, JavaScript, Python, C#, Object C ...
对象
万事万物皆对象
所有客观存在的事物全是对象
代码中的对象: 在代码中真实存在的事物
类
概念
多个对象抽取其共同点形成的概念,称为类
类与对象的关系
生活中: 先有对象,后有类
代码中: 先有类,后有对象
一个类可以创建多个对象
多个对象可以属于同一个类
如何创建一个类
语法:
访问权限修饰符 class 类名{
}
如创建一个猫类
public class Cat{
}
类中有什么
静态特征: 属性
作用: 描述对象的静态特征
语法:
访问权限修饰符 数据类型 属性名;
访问权限修饰符暂时使用public
声明的位置:
类中,方法以外
别名: 成员变量
注意: 一个类中可以有多个属性,也可以没有属性
动态特征(行为): 方法
作用: 描述对象的行为
语法:
访问权限修饰符 修饰符 返回值类型 方法名(形参列表){
方法体
}
访问权限修饰符暂时使用public
修饰符暂时不使用
定义方法时其他情况与学方法时一致
定义的位置:
类中,方法以外
别名: 函数,成员方法,成员函数
构造函数:
作用: 创建对象
语法:
访问权限修饰符 构造函数名(形参列表){
方法体
}
注意:
1.构造函数名与类名一致(大小写都要一致)
2.使用new关键字调用
3.一个类中可以有多个构造函数
4.多个构造函数一定会形成重载的关系
无参构造函数: 构造函数没有形参列表
全残构造函数: 构造函数的形参列表需要传入该类的所有属性值
例:
public class Dog{
public String name;
public String sex;
public int age;
public String color;
public Dog(){
}
public Dog(String name, String sex, int age, String color){
this.name = name;
this.sex = sex;
this.age = age;
this.color = color;
}
public void call(){
System.out.println(name + "汪汪汪");
}
public void eat(String food){
System.out.println(name + "吃" + food);
}
}
成员变量与局部变量
成员变量: 属性
定义的位置: 类中方法以外
有默认值: 基本数据类型默认为0,引用数据类型默认为null
生命周期: 随着对象的生成而生成,随着对象的销毁而销毁
可以使用访问权限修饰符
使用范围: 整个类中
局部变量:
定义的位置: 类中,方法中或形参中
没有默认值
生命周期: 随着所在方法的调用而生成,随着方法的执行完毕而销毁
使用范围: 声明的代码块中
不可以使用访问权限修饰符
局部变量与成员变量可以名称相同,默认使用局部变量
this关键字
含义: 谁调用this所在的方法,this就代表谁
作用:
1.当局部变量与成员变量(属性)重名时,用于区分成员变量还是局部变量
变量名: 局部变量
this.变量名: 成员变量
2.在方法中调用本类的属性或方法,此时可以忽略this不写
this.属性名/方法名(实参列表)
3.调用本类其他构造函数
要求:
1.必须在构造函数的第一行
2.不能形成递归
this(实参列表);
如何创建对象
语法:
为了好记:
类名 对象名 = new 类名(实参列表);
专业:
数据类型 对象名 = new 构造函数名(实参列表);
注意:
如果一个类中没有构造函数,系统将为其提供一个无参构造函数
如果一个类中有构造函数,那么系统将不会为其提供无参构造函数
如何使用对象调用属性或方法
属性相关:
获取
对象名.属性名
修改
对象名.属性名 = 值;
方法名:
对象名.方法名(实参列表);
总结:
写类: 先属性,再构造函数,最后方法
环境类(测试类): 先创建对象,再建立关系
对象的创建过程(了解)
数据类型 对象名 = new 构造函数名(实参列表);
步骤:
1.使用new关键字在堆内存开辟一片空间,用于存储该对象的属性与方法
2.给对象属性赋初值,基本数据类型赋值为0,引用数据类型赋值为null
3.执行构造函数中的代码
4.将堆内存中的地址(步骤1中开辟的内存地址)赋值给栈的引用(对象名)