当前位置:网站首页 > Java基础 > 正文

类和对象java基础



6.1 面向对象概述

面向对象思想是人类最自然的一种思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及展示这些对象的行为,以解决这些对象面临的一些实际问题。程序开发中引入了面向对象设计的概念,其实质就是对现实世界中的对象进行建模操作。

6.1.1 对象

现实世界中,随处可见的一种事物就是对象,对象是事物存在的实体,如人、书桌、计算机、高楼大厦等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。

通常都会将对象划分为两个部分,即静态部分与动态部分。静态部分,顾名思义,就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身的属性,如一个人,其属性包括高矮、胖瘦、性别、年龄等。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分)。人类通过探讨对象的属性和观察对象的行为来了解对象。

在计算机的世界里,面向对象程序设计的思想要以对象来思考问题,首先要将现实世界的实体抽象为对象,然后考虑这个对象具备的属性和行为。

6.1.2 类

如果将现实世界中的一个事物抽象为对象,类就是这类对象的统称,如鸟类、家禽类、人类等。类是构造对象时所依赖的规范,对象就是符合某个类的定义所产生出来的实例。

类是世间事物的抽象称呼,而对象则是这个事物相对应的实体。如果面临实际问题,通常需要实例化类对象来解决。

类是封装对象的属性和行为的载体,反过来说,具有相同属性和行为的一类实体被称为类。

在Java语言中,类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,所以类包括对象的属性和方法。

6.1.3 封装

面向对象程序设计具有三大特点:封装性、继承性和多态性。

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。

采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易地直接操作此数据结构,只能执行类允许公开的数据。这样就避免了外部操作对内部数据的影响,提高了程序的可维护性。

6.1.4 继承

类与类之间同样具有关系,这种关系被称为关联。关联主要描述两个类之间的一般二元关系,例如,一个百货公司类与销售员类就是一个关联,学生类与教师类也是一个关联。两个类之间的关系有很多种,继承是关联中的一种。

当处理一个问题时,可以将一些有用的类保留下来,在遇到同样问题时拿来复用。设计软件时,使用继承思想可以缩短软件开发的周期,复用那些已经定义好的类可以提高系统性能,减少系统在使用过程中出现错误的概率。

注:子类的实例都是父类的实例,但不能说父类的实例是子类的实例。

6.1.5 多态

将父类对象应用于子类的特征就是多态。多态允许以统一的风格编写程序,以处理种类繁多的已存在的类及相关类。

多态的实现并不依赖于具体类,而是依赖于抽象类和接口,抽象类不能实例化对象。在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个方法的标准,而不给出实现的具体流程,实质上这个方法也是抽象的。

在多态的机制中,比抽象类更方便的方法是将抽象类定义为接口。由抽象方法组成的集合就是接口。

以“绘制图形”为例,将“绘制图形”作为一个接口的抽象方法,然后使图形类实现这个接口,同时实现“绘制图形”这个抽象方法,当三角形类需要绘制时,就可以继承图形类,重写其中的“绘制图形”方法,并改写这个方法为“绘制三角形”,这样就可以通过这个标准绘制不同的图形。

6.2 类

类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。

1. 定义成员方法的语法格式:

权限修饰符 返回值类型 方法名(参数类型 参数名) {

... //方法体

return 返回值;

}

注:Java中的成员方法无返回值,可以使用void关键字表示。

2. Java语言中的修饰符权限

注:当声明类时不使用public、protected和private修饰符设置类的权限,则这个类预设为包存取范围,即只有同一个包中的类可以调用这个类的成员变量或成员方法。类的权限设定会约束类成员的权限设定。

3. this关键字

在Java语言中规定使用this关键字来代表本类对象的引用,this关键字被隐式地用于引用对象的成员变量和方法。

事实上,this引用的就是本类的一个对象。在局部变量或方法参数覆盖了成员变量时,就要添加this关键字明确引用的是类成员还是局部变量或方法的参数。

this除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。

6.3 类的构造方法

构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。

构造方法的特点:

1)构造方法没有返回值;

2)构造方法的名称要与本类的名称相同。

注:在定义构造方法时,构造方法没有返回值,普通方法没有返回值使用void修饰,构造方法不需要void修饰。

定义构造方法的语法格式:

代码语言:javascript
复制
 
 

在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也将被初始化。

如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法。

注:在无参构造方法中可以使用this关键字调用有参的构造方法,但使用这种方式只可以在无参构造方法中的第一句使用this调用有参构造方法。

6.4 静态变量、常量和方法

由static关键字修饰的变量、常量和方法被称作静态变量、常量和方法。被声明为static的变量、常量和方法被称为静态成员,静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”调用静态成员。

语法:类名.静态类成员

静态数据与静态方法的作用通常是为了提供共享数据或方法,静态成员同样遵循着public、private和protected修饰符的约束。

在Java语言中对静态方法有两点规定:

1)在静态方法中不可以使用this关键字;

2)在静态方法中不可以直接调用非静态方法。

注:Java中规定不能将方法体内的局部变量声明为static的。

技巧:如果在执行类时,希望先执行类的初始化动作,可以使用static定义一个静态区域,当这段代码被执行时,首先执行static块中的程序,并且只会执行一次:

代码语言:javascript
复制
 
 
6.5 类的主方法

主方法是类的入口点,它定义了程序从何处开始,主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。

语法:

代码语言:javascript
复制
 
 

特点:

1)主方法是静态的,如果直接在主方法中调用其他方法,则该方法必须也是静态的;

2)主方法没有返回值;

3)主方法的形参为数组,其中args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数。

6.6 对象
6.6.1 对象的创建

对象可以认为是在一类事物中抽象出某一个特例,可以通过这个特例来处理这类事物出现的问题。在Java语言中使用new操作符调用构造方法创建对象。

语法:

代码语言:javascript
复制
 
 

其中a是构造方法的参数。

test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间。

每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。

注:使用new操作符创建对象,创建对象的同时,将自动调用构造方法中的代码。

6.6.2 访问对象的属性和行为

用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。

类和对象java基础

如果i被定义为静态成员变量,即使使用两个对象对同一个静态成员变量进行操作,依然可以改变静态成员变量的值,因为在内存中两个对象同时指向同一块内存区域:

6.6.3 对象的引用

引用语法:类名 对象引用名称

引用与对象相关联的语法:Book book = new Book()

注:引用只是存放一个对象的内存地址,并非存放一个对象。

6.6.4 对象的比较

在Java语言中有两种比较对象的方式,分别是“==”和equals()方法:equals()方法用于比较两个对象引用所指的内容是否相等;“==”运算符比较两个对象的地址是否相等。

6.6.5 对象的销毁

Java有一套完整的垃圾回收机制,垃圾回收器会自动回收无用却占用内存的资源。

被Java虚拟机视为“垃圾”的两种情况:

1)对象引用超过其作用范围,这个对象将被视为垃圾;

2)将对象赋值为null。

垃圾回收器只能回收那些由new操作符创建的对象。

在Java中提供了一个finalize()方法,这个方法是Object类的方法,它被声明为protected。用户可以在自己的类中定义这个方法,在垃圾回收时会首先调用该方法,在下一次回收动作发生时,才真正回收被对象占用的内存。

  • 上一篇: java ee 基础后
  • 下一篇: pythen是java的基础吗
  • 版权声明


    相关文章:

  • java ee 基础后2024-11-07 22:34:04
  • 尚硅谷java基础学习笔记2024-11-07 22:34:04
  • java基础概念注解2024-11-07 22:34:04
  • java面试基础代码题及答案2024-11-07 22:34:04
  • java基础分支简答题2024-11-07 22:34:04
  • pythen是java的基础吗2024-11-07 22:34:04
  • java基础题红绿配色2024-11-07 22:34:04
  • Java基础中级面试2024-11-07 22:34:04
  • java语言基础编程题2024-11-07 22:34:04
  • java基础404讲解2024-11-07 22:34:04