Java——面向对象的编程学习之属性和方法

时间: 2023-07-29 admin 互联网

Java——面向对象的编程学习之属性和方法

Java——面向对象的编程学习之属性和方法

Java类的属性和方法

  • 面向过程(POP)与面向对象(OOP)
  • 面向对象的两个要素
  • 属性(field)
  • 属性 vs 局部变量
  • 方法(Method)
  • 类的实例化

面向过程(POP)与面向对象(OOP)

二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

面向对象的两个要素

类(Class)和对象(Object)是面向对象的核心概念。
:是对一类事物的描述,是抽象的、概念上的定义;
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)。
面向对象程序设计的重点是类的设计,类的设计,其核心是其内部成员的设计。在Java——面向对象的编程学习引言部分,已经介绍过,类的成员主要包括属性、方法、构造器、代码块、内部类。本文将详细介绍Java类中的属性和方法。

属性(field)

对应类中的成员变量,顾名思义,属性主要用来描述某个类具有哪些特征,例如我们定义一个Person类,用来描述一个人,人通常都具有姓名、身高、体重、性别、年龄等特征。因此,我们可以在Person类中声明如下属性:

class Person{int age;double height;double weight;String gender;String name;
}

上述四个变量就称为Person类的属性。

属性 vs 局部变量

  • 相同点

    • 定义变量的格式:数据类型 变量名=变量值
    • 先声明,后使用
    • 变量都有其对应的作用域
  • 不同点:

    • 在类中声明的位置的不同
      属性:直接定义在类的一对{}内
      局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
    • 关于权限修饰符的不同
      属性:可以在声明属性时,指明其权限,使用权限修饰符。
      常用的权限修饰符:private、public、缺省、protected(在介绍封装性时会讲)
      局部变量:不可以使用权限修饰符。
    • 默认初始化值的情况:
      属性:类的属性,根据其类型,都有默认初始化值。
      整型(byte、short、int、long):0
      浮点型(float、double):0.0
      字符型(char):0(或’\u0000’)
      布尔型(boolean):false
      引用数据类型(类、数组、接口):null
      局部变量:没有默认初始化值。
      意味着,我们在调用局部变量之前,一定要显式赋值。特别地:形参在调用时,我们赋值即可
    • 在内存中加载的位置不同
      属性:加载到堆空间中(非static)
      局部变量:加载到栈空间中

方法(Method)

在面向过程的编程中,我们通常称其为函数,在Java面向对象的编程中,我们可以简单的将方法理解成定义在类中的函数。这些函数可以用来实现或者描述一个类的某些功能或作用。还是以Person类举例,正常来讲,人都可以吃饭、睡觉和走路,那么,我们可以在Person类中,定义如下方法:

class Person{int age;double height;double weight;String gender;String name;public void eat(){System.out.println("人可以吃饭");}public void sleep(){System.out.println(name + "可以睡觉");}public void walk(){System.out.println(name + "可以走路");}public void smoking(){if(age >= 18){System.out.println(name + "可以抽烟了");}else{System.out.println(name + "的年龄为:" + age + "不可以抽烟");}}}

在上述代码中,eat(),sleep(),walk(),smoking()四个函数就称为Person类的四个方法。在方法中,我们可以调用之前定义的属性,进行相应的操作。

  1. 声明:
权限修饰符 返回值类型 方法名 (形参列表){方法体
}
关于static、final、abstract后面再讲
  1. 说明:
    • 关于权限修饰符:
      Java规定的4种权限修饰符:private、public、缺省、protected,封装性再讲
    • 返回值类型:有返回值 VS 没有返回值
      方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return数据”。
      方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不使用return。但是,如果使用的话,只能“return;”,表示结束此方法的意思。
    • 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”
    • 形参列表:方法可以声明0个,1个,或多个形参。
      格式:数据类型1 形参1,数据类型2 形参2,…
    • 方法体:方法功能的体现。

注意:方法中不可以再定义方法!

类的实例化

当我们创建好一个类后,想要调用类的属性或者方法,通常要对类进行实例化,换句话来说就是创建类的对象。同上面描述一样,类是抽象的,而对象是具体的。当我们想使用类的内部成员时,一般采用“对象.属性”(注意中间有个点)和“对象.方法”的形式进行调用。例如,当我们创建好Person类后,想要对其属性进行赋值:

//测试类
class PersonTest{public static void main(String[] args) {//实例化一个对象Person p1 = new Person();p1.name = "Tom";p1.age = 30;p1.walk();p1.eat();p1.smoking();}
}

实例化一个对象的代码:类名 对象名 = new 类名();
注意:此时Person类中定义的属性和方法都是非static的(关于static后面会讲)。因此,我们每new一个对象,每个对象都有一套独立的属性和方法,对象A属性的改变,不影响对象B。

//测试类
class PersonTest{public static void main(String[] args) {//实例化一个对象Person p1 = new Person();p1.name = "Tom";//实例化一个对象Person p2 = new Person();p2.name = "Jerry";System.out.println(p1.name);  // 输出TomSystem.out.println(p2.name);  // 输出JerrySystem.out.println("****************");Person p3 = p1;p3.name = "张三";System.out.println(p1.name);  // 输出张三}
}

但是,当我们通过“Person p3 = p1;”这种方式创建一个新的对象时,如果通过对象p3对属性进行修改,那么p1的相应属性也会变化,这是因为,“Person p3 = p1;”这种方式是将p1的地址值赋给了p3,使得p1和p3指向了堆空间中的同一个对象实体。关于对象的内存解析可以参考。