Java中的类和对象


前言

为什么要用面向对象的思想设计程序呢?什么是面向对象?面向对象有哪些特征?
面向对象(面向对象编程的简称,Object Oriented Programming,OOP)是一种对现实世界理解和抽象的方法。
OOP以对象来划分系统;将属性和行为放入对象;通过呼叫对象使其执行行为来完成功能;使程序易于维护和扩展。


提示:以下是本篇文章正文内容,下面案例可供参考

一、类和对象的概念

1.对象

在编程世界中,万物皆对象。
在Java面向对象编程中,将这些对象的属性仍然称为属性,将对象具有的行为称为方法。
方法是一种动态的行为,而属性是一种静态的特征。
属性通常是名词,行为或方法通常是动词。

2.类

什么是类?
类是对具有相同属性和相同行为的对象的抽象。
通过一个类,可以创建出一个一个具体的对象,通常也被称为实例化出一个一个对象。

总的来说:
对象是具体事物,类是对一类对象的抽象。
对象有属性和行为,对象和行为由对象由对象所属的类统一描述。
从类产生对象的过程,被称为实例化。

二、Java中的类

在 Java 中,class 是用来定义类的关键字,class 关键字后面是要定义的类的名称,然后有一对大括号,大括号里写的是类的主要内容。
类的主要内容分两部分,第一部分是类的属性定义,在前面的课程中学习过,在类内部、方法外部定义的变量称为成员变量,也可以称为成员属性,或简称为“属性”。第二部分是类的方法定义,通过方法的定义,描述类(对象)具有的动态行为,这些方法也可以称为成员方法,或简称为“方法”。

创建对象:

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

创建对象时,要使用 new 关键字,后面要跟着类名(构造方法名),类名后的括号内可传递构造参数。

在Java语言中,通过.操作符来引用对象的属性和方法:

对象名.属性;
对象名.方法();

封装
面向对象的基本特性:封装、继承和多态。
封装的目的是简化编程和增强安全性。

  • 简化编程是指,封装可以让使用者不必了解具体类的内部实现细节,而只是通过提供给外部访问的方法来访问类中的属性和方法。
  • 增强安全性是指,封装可以使某个属性只能被当前类使用,从而避免其他类或对象进行误操作。

以年龄属性为例,先用private修饰stuAge属性,然后再给该属性提供两个public修饰的、保证属性安全的访问方法(setter方法和getter方法)。

实际上,使用 setter 和 getter 的解决方案用到了一个程序设计的基本原则:逻辑代码不能写在变量中,而必须写在方法或代码块中。

三、构造方法

构造方法(也称为构造函数)是一种特殊的方法,它具有以下特点。

  • 构造方法的方法名必须与类名相同。
  • 构造方法没有返回类型,在方法名前不声明返回类型(包括 void)。

构造方法的语法:

[访问修饰符] 类名([参数列表]) ;

this关键字
this 是 Java 的一个关键字,它表示“指向当前对象的引用(后文简称为‘当前对象’)”。

  • 区分成员变量和局部变量,避免命名的烦恼。
  • 调用其他构造方法。

如何使用this调用其他构造方法?
使用this调用类中其他的构造方法,this()语句必须写在构造方法的第一行。
在这里插入图片描述

需要注意的是,所有的构造方法之间不能循环调用,否则会出现类似“死循环”的现象。例如以上代码,如果在最后一个构造方法的第一行也加上this(),那么三个构造方法就会无限制的彼此调用。

构造方法有一个约定:如果在定义类时没有定义构造方法,编译系统会自动插入一个无参数的默认构造方法,这个构造方法不执行任何代码。如果在定义类时定义了有参的构造方法,没有显式地定义无参的构造方法,那么在使用构造方法创建类对象时,则不能使用默认的无参构造方法。

四、对象的初始化过程

对象的初始化,实际就是先在堆内存中申请一块用于存放对象属性值的空间,然后再给这些属性值赋上默认值、程序员期望的数据或者用户指定的数据。当堆内存中的这块空间有了值以后,再在栈空间中申请一块空间并存放引用变量,然后用栈中的引用变量指向堆中的对象,最终就可以通过栈中的引用变量访问或者修改堆中的对象了。
对象初始化时的内存演变过程如下:
1.Student temp= new Student();执行时,首先需要在堆内存中申请空间,用于存放对象的实例,这片空间上成员变量的值全部为默认值:name 的值是 null、age 的值是 0……,如图所示。
在这里插入图片描述

2.紧接着,执行声明初始化(由设计该类的开发者指定),例如在 Student 类中private int age = -1;代表程序员希望 age 属性用值-1 覆盖默认值,如图所示。
在这里插入图片描述
3.初始化块初始化。
初始化块就是在类的下一级(与成员变量和成员方法同级)用一对大括号括起来的代码块,语法形式如下:

{
	代码块
}

初始化块可以用来覆盖类的成员变量的值,初始化块的执行时机是发生在“声明初始化”之后,在“构造器初始化”之前。例如,如下的初始化代码,就用于给成员变量再次赋值,如图所示。

{
	this.name="张三";
	this.age=20;
	this.sex=1;
}

在这里插入图片描述
4.构造器初始化,例如Student temp = new Student(“李四”, 22, 1, 4);,在默认初始化,声明初始化,初始化块之后,再使用构造器覆盖各个属性的值,如图所示。

在这里插入图片描述

五、重载

在同一个类中,可以有两个或两个以上的方法具有相同的方法名,但它们的参数列表不同。这种形式被称为重载(overload)。所谓参数列表不同包括以下三种情形。

  • 参数的数量不同。
  • 参数的类型不同。
  • 参数的顺序不同。

注意,一个类的多个构造方法被视为重载,因为多个构造方法的方法名相同,而参数列表不同,符合重载的定义。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值