面向对象概述、this关键字、代码块以及局部变量和成员变量

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、成员变量与局部变量区别

  1. 存在位置不一样 :
      成员变量 :方法外类内
      局部变量 :方法内 / 代码块内
  2. 使用范围不一样
      成员变量 :整个类
      局部变量 :整个方法 / 整个代码块中
  3. 存入内存位置不一样
      成员变量 :堆里
      局部变量 :栈中
  4. 生命周期不一样
      成员变量 :随着类的对象创建产生;随着对象被回收而消失
      局部变量 :随着方法的调用 / 代码块的执行而产生;随着方法调用完毕 / 代码块执行完毕而消失
  5. 访问权限修饰符
      成员变量 :public protected default(缺省) private
      局部变量 :不能被 public protected private修饰符修饰

public static void main(String[] args) {
    System.out.println("请您们小手抖一抖,点赞评论加收藏");
    System.out.println("谢谢您们!么么哒!");
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值