(面向对象)2020.10.19-20


拓展补充: 面向对象.

面向对象

面向对象的理解:
 是Java解决问题的一种思想或是一种解题思路,概括:在Java中,一切都是都是对象。
 实质就是:找对象解决问题。
 对象:有生命的、无生命的、具体的、抽象的…
 思想的由来:基于面向过程的思想
面向过程:
 也是一种思想或是一种解题思路,注重强调的是过程(步骤—>方法)。—执行者角色。
面向对象:
 注重强调是结果,指挥对象(包含所需的功能—方法)来完成解决问题----指挥者角色
 总结:找对象—调用方法; 封装(创建)对象—调用方法;

面向对象特征

封装 继承 多态

类和对象的关系

类:
 是一种数据类型,并且是引用类型的一种—class类型,是一个抽象的概念。
 抽象:将一种事物的共性的属性和行为的抽取,定义在某一类型中。
 映射到Java的世界中来:
 一种类型: 使用class关键字来定义
 属性:使用变量来描述
 行为:使用方法来描述
 格式:
   修饰符 class 类型名{
      一组变量
       一组方法
   }
对象:
 就是这种事物的一个真实的个体
 使用关键字new来创建。
 格式:
   类名 对象名 = new 类名();
 访问类中的属性和行为:
   对象名.属性名
   对象名.方法名(参数)
类中的属性和行为,统称都叫做类的成员。属性:成员变量;行为:成员方法。
  根据类可以创建n个对象,每个对象都有自己的属性信息数据,对于对象来说,这些属性也叫做对象的变量或实例变量。(对象也叫做实例)
 Person p = new Person()实例化过程(对象的创建)
  1.加载person.class文件到方法区
  2.在堆中开辟空间,并分配地址值
  3.在该空间中,存储属性默认值
  4.将地址值赋值给p引用变量
 注意:一个class文件只加载一次。
 
 对象数组定义时,需要人工初始化,直接使用会产生空指针异常。
 注意问题: 类实例对象数组的定义初始化问题.

成员变量和局部变量的区别

1.定义位置
 成员变量 : 定义在类中,方法的外边
 局部变量 : 方法上或方法中或语句中
2. 存储位置(内存)
 成员变量: 堆中
 局部变量: 栈中
3. 生命周期(在内存中时长)
 成员变量:随着对象的创建而存在,随着对象被回收而消失
 局部变量:随着方法进栈而存在,随着方法出栈而消失
4.有无默认值
 成员变量 : 有默认值,可以直接操作
 局部变量: 没有默认值,不能直接操作,必须赋值后才可以操作
5.作用域
 成员变量: 整个类中都可以使用
 局部变量: 只能在哪定义在哪使用,其他地方不可以使用

匿名对象

理解:
 指的就是没有名字的对象。即:没有任何引用所指向的对象。
格式:
 new 类名();
总结:
 创建对象无非访问的就是属性和方法。
 1.访问属性: 没有意义,赋值后,对象就成为垃圾,等待被回收
 2.访问方法: 有点意义,但是只能调用一次,通常用来测试方法
 3.作为方法的返回值
 主方法里直接打印--返回的对象是垃圾
 主方法定义一个对象接受返回值,再打印输出--返回的对象不是垃圾 
 4.作为方法的参数传递
在这里插入图片描述

封装

概念:
 将对象的属性和行为隐藏起来,对外提供公共的访问方式。
 隐藏:
  使用private关键字修饰属性和行为。
 好处:
  1.提高了安全性
  2.隐藏对象的实现细节
  3.提高了复用性

private

私有的意思,是一个权限修饰符。
   可以修饰类中的成员,即修饰属性和方法。
   被修饰的内容,只能在当前类中访问,其他类中不能直接操作。

public

公共指的就是public修饰的内容。
  属性,能对其进行获取和赋值操作。
  属性私有化,外部其他类无法访问,因此在当前类中,应该提供访问方式,能间接操作。
  在类中提供一个赋值和获取的方法,
  格式:
   public void set属性名(类型 变量名){}
   public 类型 get属性名(){}
  名字规范: setXxx getXxx
  方法私有化,外部其他类不可以直接操作,可以在类中定义公共方法,在这个方法中调用私有方法,外部类中调用这个公共方法。

this

问题:
  成员位置和局部位置 变量名重名。
 解决:
  使用this关键字即可。
  this:代表的是对象的引用,谁调用就代表谁。
     可以调用属性和方法。

构造方法

别名: 构造函数、构造器
格式:
  构造方法也是方法,是一个比较特殊的方法。
之前定义方法的格式:
  修饰符 返回值类型 方法名(参数列表){
      …
      return 返回值;
  }
构造方法格式:
  修饰符 方法名(参数列表){
      …
  }
注意:
 1.没有返回值类型,即是不写,不能写成void
 2.方法体中不写return 返回值语句,要写也是return;
 3.方法名就是类名,与类名大小写一致
 4.修饰符是权限修饰符,目前:public private 默认(没有对应的关键字就是空白)
1.什么时候执行?
 当创建对象时,会调用构造方法。因此不需要手动调用。
 之前创建对象时,类中并没有定义构造方法,那么也能创建对象,说明类中有,系统自动提供的,格式为无参数,空方法体的构造方法。
 注意:类中没定义,系统提供。类中定义了,系统不再提供。
2.构造方法的作用?
 作用主要是用来给对象的属性进行初始化
3.有了构造方法需要setXxx()方法吗?
 需要,因为对于一个对象来说,构造方法只执行一次,并且时在对象创建时调用的,对于后期属性值的改变,需要使用set方法来完成,而且set方法可以多次调用。
4.构造方法 支持方法重载吗?
 支持。在类中,可以定义重载形式的构造方法
 创建对象时,根据new关键字后的格式,匹配到对应的构造方法来执行并进行初始化。
5.重载构造方法间如何调用?
 使用 this(实参); 语句来调用,并且要将该语句放在构造方法的第一行。
 目的时让 this(参数) 语句优先执行。
 注意:重载的构造方法的第一行,不能都是this(),至少要保证有一个构造方法的第一行没有 this(参数);
6.构造方法能调用普通方法吗?普通方法能调用构造方法吗?
     可以;         不可以。
对象的创建过程:
 Person p = new Person(“张三”,20);
 1.加载person.class文件到方法区
 2.在栈中有一个引用变量p,用于存储对象的引用值
 3.在堆中开辟空间,并分配地址值
 4.在空间中存储默认值
 5.属性有显示值,那么进行显示初始化
 6.执行构造方法初始化
 7.将引用值赋值给变量p,说明p引用指向了该空间
定义某一类型时,步骤:
 1.属性私有化
 2.构造方法
  无参数
  有参数
 3.set和get方法
 4.封装一个方法,用于返回属性信息的方法

static关键字

在这里插入图片描述
通过以上的代码分析,发现每创建一个对象,都有一个共性的属性值“China”。
这样处理是处理是没问题的。但是当创建的对象很多时会造成空间的浪费;如果该数据值发生了改变,维护数据的成本也变高了。
以上的问题解决就可以使用static关键字来修饰这个共性的属性值,修饰后,就在会在内存中只存储一个china数据,并且这个数据还能被该类的所有对象所共享,一旦修改,只修改一次。
在这里插入图片描述
static关键字
 静态的意思,是一个成员修饰符,即可以修饰成员变量,也可以修饰成员方法。
 修饰变量(静态变量)
  1.随着类的加载而加载,并进行初始化,随着类的消失而消失,生命周期长
  2.优先于对象而存储在内存中。
  3.被所有该类的对象所共享
  4.与对象无关,不随着对象的改变而改变,因此访问方式有两种:
   类名.变量名 推荐
   对象名.变量名 不推荐
 注意:某个数据(属性值)被所有对象所共享时,才可以使用static修饰。
 修饰方法(静态方法)
  1.定义的方法,修饰符中包含了static关键字,即静态方法
  2.静态方法调用有两种方式
   类名.静态方法名 推荐
   对象名.静态方法名 不推荐
  3.在静态方法中,能出现this关键字吗?不能
  4.静态方法不能直接访问非静态成员(变量、方法),可以直接访问静态成员
  5.非静态方法即可以访问静态的也可以访问非静态的
 静态方法----类方法或静态变量—类变量。
 程序执行入口方法:
  public static void main(String[] args){}
  public static :公共静态
  void :返回值类型
  main: 方法名,不是关键字,但是要当成关键字去记忆
  String[] : 字符串数组

静态变量和成员变量的区别

.
  1.称呼上
   静态变量: 类变量
   成员变量: 对象(实例)变量
  2.存储位置
   静态变量 :方法区
   成员变量 :堆中
  3. 生命周期
   静态变量:随着类的加载而加载,随着类的消失而消失
   成员变量:随着对象的创建而存在,随着对象被回收而消失
  4. 访问方式:
   静态变量: 类名访问或对象名访问
   成员变量: 对象名访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值