Java的面向对象(尚硅谷)

面向对象的思想概述

程序员从面向过程的执行者转化成了面向对象的指挥者

面向对象分析方法分析问题的思路和步骤:

  • 根据问题需要,选择问题所针对的现实世界中的实体。
  • 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
  • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序 语言,把类构造成计算机能够识别和处理的数据结构。
  • 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

类(Class)和对象(Object)是面向对象的核心概念。

  • 类是对一类事物的描述,是抽象的、概念上的定义 
  • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。

“万事万物皆对象”

可以理解为:类 = 抽象概念的人;对象 = 实实在在的某个人。面向对象程序设计的重点是类的设计,类的设计,其实就是类的成员的设计

Java类及类的成员

现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同 理,Java代码世界是由诸多个不同功能的类构成的。现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、… 那么, Java中用类class来描述事物也是如此。常见的类的成员有:

  • 属 性:对应类中的成员变量
  • 行 为:对应类中的成员方法

类的语法格式:

修饰符 class 类名{
    属性声明;
    方法声明;
}

对象的创建和使用

创建对象语法

类名 对象名 = new 类名();

对象的使用

对象名.对象成员

的方式访问对象成员(包括属性和方法)

说明: 如果创建了一个类的 多个对象,对于类中 定义的属性,每个对 象都拥有各自的一套 副本,且互不干扰。

类的访问机制:

  • 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过。)
  • 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中 定义的成员。

匿名对象

我们也可以不定义对象的句柄,而直接调用这个对象的方法。这 样的对象叫做匿名对象。如:new Person().shout();

使用情况:

  • 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
  • 我们经常将匿名对象作为实参传递给一个方法调用。

类的成员之一: 属性(field)

语法格式:

修饰符 数据类型 属性名 = 初始化值 ;

  •  说明1: 修饰符
    • 常用的权限修饰符有:private、缺省、protected、public
    • 其他修饰符:static、final (暂不考虑)
    • 具体修饰符表示什么后面会写
  • 说明2:数据类型
    • 任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
  • 说明3:属性名
    • 属于标识符,符合命名规则和规范即可。

变量的分类:成员变量与局部变量

  • 在方法体外,类体内声明的变量称为成员变量。
  • 在方法体内部声明的变量称为局部变量。

注意:二者在初始化值方面的异同:

  • 同:都有生命周期
  • 异:局部变量除形参外,均需显式初始化。

成员变量(属性)和局部变量的区别?

 对象属性的默认初始化赋值

当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了 基本数据类型之外的变量类型都是引用类型。

 类的成员之二: 方法(method)

什么是方法(method、函数):

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中 也称为函数或过程。
  • 将功能封装为方法的目的是,可以实现代码重用,简化代码
  • Java里的方法不能独立存在,所有的方法必须定义在类里。

方法的声明格式:

修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
    方法体程序代码
    return 返回值;
}

其中:

  • 修饰符:public,缺省,private, protected等
  • 返回值类型:
    • 没有返回值:void。
    • 有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用 方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意” 形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开 返回值:方法在执行完毕后返还给调用它的程序的数据。

如:

public class Person{
    private int age;
    public int getAge(){    //声明方法getAge()
        return age;
    };
    public void setAge(int i){    //声明方法setAge
    age=i;    //将参数i的值赋给类的成员变量age
    };
}

方法的调用

方法通过方法名被调用,且只有被调用才会执行。

注 意:

  • 方法被调用一次,就会执行一次
  • 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
  • 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
  • 方法中只能调用方法或属性,不可以在方法内部定义方法。

方法的重载

  • 重载的概念
    • 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。
  • 重载的特点:
    • 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类 型)。调用时,根据方法参数列表的不同来区别。
  • 重载示例:
//返回两个整数的和
int add(int x,int y){
    return x+y;
}
//返回三个整数的和
int add(int x,int y,int z){
    return x+y+z;
}
//返回两个小数的和
double add(double x,double y){
    return x+y;
}

可变形参的方法

JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定 义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可 变的实参。

说明:

  • 声明格式:方法名(参数的类型名 ...参数名)
  • 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  • 可变个数形参的方法与同名的方法之间,彼此构成重载
  • 可变参数方法的使用与方法参数部分使用数组是一致的
  • 方法的参数部分有可变形参,需要放在形参声明的最后
  • 在一个方法的形参位置,最多只能声明一个可变个数形参

方法参数的值传递机制

方法,必须由其所在类或对象调用才有意义。若方法含有参数:

形参:方法声明时的参数

实参:方法调用时实际传给形参的参数值

Java的实参值如何传入方法呢?

Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

递归方法

递归方法:一个方法体内调用它自身。

方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。

递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死 循环。

面向对象特征之一: 封装与隐藏

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提 高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露 的暴露出来。这就是封装性的设计思想。

Java中通过将数据声明为私有的(private),再提供公共的(public) 方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:

  • 隐藏一个类中不需要对外提供的实现细节;
  • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑, 限制对属性的不合理操作;
  • 便于修改,增强代码的可维护性;

四种访问权限修饰符

Java权限修饰符public、protected、(缺省)、private置于类的成员定义前, 用来限定对象对该类成员的访问权限。

对于class的权限修饰只可以用public和default(缺省)。

  • public类可以在任意地方被访问。
  • default类只可以被同一个包内部的类访问。

类的成员之三: 构造器(或构造方法)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值