0、面向对象引入
1. 面向对象与面向过程
1) 概述
面向过程 :就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
面向对象 :是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
面向对象相对于面向过程优缺点 :
优点 :结构清晰;封装性;容易扩展,代码重用率高
缺点 :增加工作量;性能低
例如下面案例 :
若使用面向过程的设计思想,那么跟随“三步走”即可完成把大象装进冰箱的过程;而换面向对象的设计思想,则需要考虑此过程中需要有哪些对象,且每个对象中都还有哪些属性或方法
面试题 :面向对象一定优于面向过程吗?
答 :当使用场景比较复杂时优先推荐面向对象设计思想
当使用场景比较简单时优先推荐面向过程设计思想
2) 面向对象
i、面向对象本质 :是一个编程范式;基于面向过程
ii、万物皆对象理解 :比如一个蔬果类,苹果是其对象,梨子也是其对象。这个蔬果类既然叫蔬果,那么就必然包含了一切果子和蔬菜的必然特征,这些特征的集合称之为类,由类中的一些特征构成的实体则称之为类的对象
iii、类:针对一类对象进行抽取,把共有的特征抽取成了属性;把共有的行为抽取成了方法;把这一类对象抽取成了类
iv、类与对象之间的关系 :
类就是对对象的概述,对象就是类具体实现
3) 构造方法
a、与类同名,没有方法返回值类型
b、可以构建对象
c、构造方法可以给对象属性进行初始化
d、构造方法支持重载
e、当类中没有定义任何形式的构造方法时,底层JVM就会默认添加无参构造。当类中定义构造方法底层就不再提供无参构造
f、一个类中至少含有一个构造方法
//类
class Person{
//属性
String name;
int age;
//无参构造
public person(){}
//有参构造
public person(String name,int age){
this.name = name;
this.age = age;
}
}
class Teacher{
//没有定义任何形式的构造方法时,
//底层会默认添加无参构造(public teacher(){})
}
1、this关键字
this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性
a、this 为关键字,代表当前类的对象
b、this 可以代表当前类还没有创建的对象,也可以代表当前类刚创建的对象,this只是虚拟指代,也可以指代成当前类正在活动的对象
c、this 语句用在同一个类中的构造方法里,用以调用其他形式的构造方法,但是必须在构造方法首行使用
格式 :this(参数列表); //根据参数列表进行匹配
class User{
//属性
String name;
//无参构造
public user(){}
//有参构造
public user(String name){
//用在构造方法首行,可以调用其他形式的构造方法
this(); //调用上面的无参构造
//this 代表当前类还未创建的对象;this.name 代表局部属性的 name,而第二个 name 代表参数 name
this.name = name;
}
public User(String name,int age){
this(name); //调用上面的有参构造
}
//方法
public void use(){ //方法体; }
}
2、构造代码块 {}
功能 :可以进行属性初始化操作;优先于任何形式的构造方法先执行
存在位置 :类内方法外
class User{
//属性
String name;
//构造代码块
{
//对属性进行初始化操作
name = "张三";
}
}
3、局部代码块 {}
功能 :可以控制变量的生命周期,提高内存利用率
存在位置 :方法内定义 {}
class User{
//属性
String name;
//方法
public void use(){
//局部代码块
{
int num = 10;
}
//局部代码块中定义的变量,出了代码块范围后无法使用
//所以 num = 5; 会编译错误
num = 5; //编译错误(Cannot resolve symbol 'num')
}
}
4、成员变量与局部变量区别
- 存在位置不一样 :
成员变量 :方法外类内
局部变量 :方法内 / 代码块内 - 使用范围不一样
成员变量 :整个类
局部变量 :整个方法 / 整个代码块中 - 存入内存位置不一样
成员变量 :堆里
局部变量 :栈中 - 生命周期不一样
成员变量 :随着类的对象创建产生;随着对象被回收而消失
局部变量 :随着方法的调用 / 代码块的执行而产生;随着方法调用完毕 / 代码块执行完毕而消失 - 访问权限修饰符
成员变量 :public protected default(缺省) private
局部变量 :不能被 public protected private修饰符修饰
public static void main(String[] args) {
System.out.println("请您们小手抖一抖,点赞评论加收藏");
System.out.println("谢谢您们!么么哒!");
}