JAVA 面向对象 类和对象

本页面更新日期: 2016年07月17日

前言

Java 是面向对象的程序设计语言, Java 语言提供了 定义类, 成员变量, 方法 等基本功能.

类 可以被认为是一种自定义的数据类型.

可以使用类来 定义变量,所有使用类定义的变量都是 引用变量.

它们将会引用到 类的对象.

类用于描述客观世界里 某一类对象的共同特征.

而对象则是 类的具体存在.

Java 使用 类的构造器 来创建该类的对象.

Java 也支持面向对象的三大特征: 封装/继承/多态

Java提供了 private / protected/ public 三个访问控制修饰符来实现良好的封装.

提供了 extends 关键字来让 子类继承父类.

子类继承父类就可以继承 父类的成员变量和方法.

如果访问控制允许, 子类实例可以直接调用 父类里定义的方法.

继承是实现类复用的重要手段.

使用继承关系来实现复用时, 子类对象可以直接赋值给父类变量.

这个变量具有 多态性, 会让编程更加灵活.

构造器用于对 类实例进行初始化操作. 构造器支持重载.

如果多个重载的构造器里包含了相同的初始化代码, 则可以把这些初始化代码放置在普通初始化块里完成.

在类初始化阶段被执行.

如果继承树里的某一个类需要被初始化时, 系统将会同时初始化该类的所有父类.

定义类

面向对象的程序设计过程中有两个重要概念: 类(class) 和 对象(object 也被称为实例, instance).

其中 类是某一批对象的抽象, 可以把类理解成某种概念.

对象 才时一个具体存在的实体.

从这个概念上来看, 日常所说的人, 其实都是人的实例, 而不是人类.

Java语言是面向对象的程序设计语言, 类和对象 是面向对象的核心内容.

Java语言提供了对 创建类和创建对象 的语法支持.

Java语言里定义类的简单语法如下:

[修饰符] class 类名
{
    零到多个 构造器定义...
    零到多个 成员变量...
    零到多个 方法...
}

在上面的语法格式中, 修饰符可以是 public / final/ abstract 或者省略不写. (修饰符的作用以后我们再讲).

其中 类名 必需是由一个或多个有意义的单词连缀而成, 每个单词 首字母大写, 其它字母 全部小写.

单词与单词之间不要使用任何分隔符.

对于定义类而言, 可以包含三种最常见的成员: 构造器/成员变量/方法.

三种成员都可以定义 零个或多个. 如果三种成员都不写, 就是定义了一个空类, 这样没有实际意义.

类里面定义各成员的顺序可以随意, 各成员之间 可以相互调用.

但需要指出的是, 被 static 修饰的成员 不能访问没有 static 修饰的成员.

成员变量用于定义该类或该类的实例所包含的状态数据.

方法则用于定义该类或该类的实例的行为特征或功能实现.

构造器用于构造该类的实例.Java语言通过 new 关键词来调用构造器, 从而返回该类的实例.

构造器 是一个类创建对象的根本途径.

如果一个类没有构造器, 这个类通常无法创建实例.

因此, Java语言提供了一个功能: 如果程序员没有为一个类编写构造器.

则系统会为该类提供一个默认的构造器.

一旦程序员为类提供了构造器, 系统将不再为该类提供构造器.

定义成员变量的语法格式如下:

[修饰符] 类型 成员变量名 [默认值];

定义成员变量语法格式的详细说明如下:

  • 修饰符: 可以省略, 也可以是 public/protected/private/static/final . 其中 public/protected/private 三个最多只能选一个出现, 不过可以与后面的 static/final 组合起来修饰成员变量.
  • 类型: 类型可以是Java语言允许的任何数据类型, 包括之前说过的基本类型和现在介绍的引用类型.
  • 成员变量名: 成员变量名应该由一个或多个有意义的单词连缀而成, 第一个单词首字母小写,后面每个单词首字母大写.例如: helloWorld .单词与单词之间不要使用任何分隔符.
  • 默认值: 定义成员变量可以指定一个默认值, 也可以不写.

定义方法的语法格式如下:

[修饰符] 方法返回值类型 方法名(形参列表)
{
    //由零条到多条 可执行性语句组成的方法体
}

定义方法语法格式详细说明:

  • 修饰符: 可以省略, 也可以是 public/protected/private/static/final/abstract.其中 public/protected/private 三个最多出现一个. abstract 和 final 两者最多一个. 它们可以和 static 组合起来修饰方法.
  • 方法返回值类型: 返回值类型可以是 Java语言允许的任何数据类型. 包括基本类型和引用类型; 如果声明了方法返回值类型, 则方法体内必需有一个有效的 return 语句, 该语句返回一个变量或表达式, 这个变量或者表达式的类型必需与此处声明的类型匹配. 除此之外, 如果一个方法没有返回值, 则必需使用 void 来声明没有返回值.
  • 方法名: 方法名的命名规则与成员变量的命名规则相同.
  • 形参列表: 形参列表用于定义该方法可以接受的参数, 形参列表由零组到多组[参数类型 形参名] 组合而成. 多组参数之间以英文逗号 , 隔开. 形参类型和形参名之间以英文空格隔开. 一旦在定义方法时指定了形参列表, 则调用该方法时必需传入对应的参数值–也就是说, 谁调用方法, 谁负责为形参赋值.

方法体里多条可执行语句之间有 严格的执行顺序 排在方法体前面的语句总是先执行.

static 是一个特殊的关键字, 它可以用于 修饰方法/成员变量等成员.

static 修饰的成员表明 它属于这个类本身 , 而不属于该类的单个实例.

因此通常把 static 修饰的成员变量和方法 称为类变量/类方法.

不使用 static 修饰的方法/成员变量 则属于该类的单个实例, 而不属于该类.

因此通常把不使用 static 修饰的成员变量和方法称为 实例变量/实例方法.

由于static的英文直译就是静态的意思.

因此有时也把 static 修饰的成员变量和方法称为静态变量和静态方法.

把不使用static修饰的成员变量和方法称为非静态变量和非静态方法.

静态成员不能直接访问非静态成员

定义构造器的语法格式

[修饰符] 构造器名(形参列表)
{
    //由零条到多条 可执行语句组成的构造器执行体
}

定义构造器语法格式详细说明:

  • 修饰符: 可以省略, 也可以是 public/protected/private 其中之一
  • 构造器名: 构造器名字必需和类名相同
  • 形参列表: 和定义方法形参列表的格式完全相同.

值得指出的是, 构造器既不能定义返回值类型, 也不能使用 void 声明构造器没有返回值.

如果构造器定义了返回值类型, 或者使用 void 声明构造器没有返回值. 编译虽然不会报错.

但 Java会把这个所谓的构造器当成方法来处理–它就不再是构造器.

现在, 结合之前的内容定义一个类

public class Person
{
    //下面定义了两个成员变量
    public String name;
    public int age;

    //下面定义了一个say方法
    public void say(String content)
    {
        System.out.println(content);
    }
}

上面的 Person类代码里没有定义构造器.

我们上面说过, 你没有定义, Java就会默认给一个构造器. 但是你肉眼是看不见的. 同时, 系统提供的构造器是没有任何参数的.

定义类之后, 接下来就可以使用该类了.

Java类的大致作用如下:

  • 定义变量
  • 创建对象
  • 调用类的类方法或访问类的类变量

下面,先介绍使用类来定义变量和创建对象

对象的产生和使用

创建对象的根本途径是使用构造器.

通过 new 关键字来调用某个类的构造器即可创建这个类的实例.

上面我们写了一个 Person类 , 下面写一个 PersonTest 类

//使用Person类来定义一个Person类型的变量
Person p;
//通过 new 关键字调用 Person 类的构造器, 返回一个 Person 实例
p = new Person();

上面代码可以简写为如下形式:

//定义 p 变量的同时为 p 变量赋值
Person p = new Person();

创建对象之后, 就可以使用该对象了.

Java 对象大致有如下作用:

  • 访问对象的实例变量
  • 调用对象的方法

如果访问权限允许, 类里定义的方法和成员变量都可以通过类或实例进行调用.

类或实例访问方法或成员变量的语法是: 类.类变量/方法 或 实例.实例变量/方法

在这种方式中, 类或实例是主调者, 用于访问该类或该实例的成员变量或方法.

其中, static 修饰的方法和成员变量, 既可以通过类来调用, 也可以通过实例来调用.

而没有使用 static 修饰的方法或成员变量, 只能通过实例来调用.

下面代码通过 Person 实例来调用 Person 的成员变量和方法

//访问 p 的 name 实例变量, 直接为该变量赋值
p.name = "萌萌";
//调用 p 的 say() 方法, 声明 say() 方法时定义了一个形参
//调用该方法必须为形参指定一个值
p.say("呵呵哒呵呵呵呵哒");
//直接输出 p 的 name 实例变量
System.out.println(p.name);

上面代码中通过 Person 实例调用了 say() 方法, 调用方法时必需为方法的形参赋值. 因此在这行代码中调用 Person 对象的 say() 方法时, 必需为 say() 方法传入一个字符串作为形参的参数值.

这个字符串将被传给 content 参数.

大部分时候, 定义一个类就是为了重复创建该类的实例 .

同一个类的多个实例具有相同的特征.

而类则是定义了多个实例的共同特征.

从某个角度来看, 定定义的是多个实例的特征.

因此类不是一种具体存在, 实例才是具体存在.

完全可以这样说, 你不是人这个类, 我也不是人这个类, 我们都只是人这个类的实例.

时间: 2024-08-29 06:30:54

JAVA 面向对象 类和对象的相关文章

Java面向对象-类与对象

Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建和使用 看下面实例 我们在com.java1234.chap03.sec01包下新建一个Person类 1 package com.java1234.chap03.sec01; 2 3 /** 4 * Person类 文件名和类名必须一致 5 * @author user 6 * 7 */ 8 pu

Java面向对象——类和对象

java面向对象的三大特征:封装.继承和多态. 类与对象 所有类是引用数据类型. 对于一个类定义而言,包含三种最常见的成员:构造器.属性.方法,三 种成员可以定义多个或零个,当为零个时,定义的是一个空类. 类里面各成员之间的定义顺序没有任何影响,各成员之间可以相互调用. 一.定义类 1,定义类的语法: [修饰符] class 类名 { 零个到多个构造器定义... 零个到多个属性... 零个到多个方法... } 修饰符:可以是public.final等 类名:是合法的标识符即可,但从程序的可读性方

Java面向对象---类与对象的关系

类是对某一类事物的描述,是抽象的.概念上的意义.对象是实际存在的该类事物的每一个个体,也被称为实例. 创建对象:包括声明对象和实例化对象 Person person;//声明 person = new Person();//实例化 创建对象内存划分 1.声明开辟一个栈空间 2.实例化开辟一个堆内存空间 3.声明指向实例化:栈空间的person指向堆空间的实例化

Java面向对象——类的成员

Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean类型成员变量的默认值是false. Int类型成员变量的默认值是0. Double类型成员变量的默认值是0.0. String类型成员变量的默认值是null. Char类型成员变量的默认值是\u0000. 类变量 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外

学习java随笔第七篇:java的类与对象

类 同一个包(同一个目录),类的创建与调用 class Man{ String name; void GetMyName() { System.out.println(name); } } public class Person { public static void main(String arges[]) { Man m=new Man(); m.name="小黄"; m.GetMyName(); } } 运行结果 不同的包(不同目录目录),类的创建与调用 package Peo

C#编程语言与面向对象——类与对象

由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 在绝大多数面向对象语言中,一个类都可以包含两种成员:字段和方法.字段与方法这两个概念是面向对象理论的术语,是通用与各种面向对象语言的.而在各种的具体面向对象语言(比如C#)中,可以简单地理解: 字段及变量,方法及函数. C#编程语言与面向对象--类与对象

关于Java构造类与对象的思考

简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: Pic3.在原版的基础上抹掉了B.foo方法: Pic4.抹掉了原版的B.foo方法,同时去掉了T.foo方法中的this关键字: 这四个图全方位地对this和super两个关键字的有无进行了测试,测试结果表明:这些版本的程序的运行结果都一样... 在这里,还是插一张流程图: 首先说一下super关键

第31节:Java基础-类与对象

前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载和构造方法的重载 方法的重载 在一个类中可以有多个方法具有相同的名字,但是这些方法的参数个数不同,或参数类型不同,即为方法的重载. class Demo{ // one void dashu(String name){ System.out.println(name); } // two void

黑马程序员-Java基础-面向对象-类和对象、封装、构造函数、this、static、饿汉式&懒汉式

第一讲  面向对象概念 1.  定义 相对于与面向过程而言的,将功能封装进对象,我们只关心具备了该功能的对象,而不用关注对象的具体细节. 面向对象的特点:使复杂问题简单化.我们只关心什么对象能处理什么事情,而不用关心具体的实现细节. 2.  面向对象特征 封装.继承.多态. 第二讲  类和对象的关系 1.  概述 类就是:对现实生活中事物的描述,可以是实体的事物也可以是一件事等: 对象是:是某类事物的实例,实实在在存在的个体: 映射到java中,描述就是class定义的类. 具体对象就是对应ja