-------android培训、java培训、期待与您交流! ----------

什么叫做面向对象?

想要了解什么事面向对象,我们首先需要了解,什么是面向过程。

所谓的面向过程,指的是在编程期间,我们的思路走向和注重点,主要放在事物发展的过程之上。即忽略了是谁发出过程的动作,强调的是行为本身,而不是行为的发出者。相对而言,面向对象的出发点和面向过程正好是相反的。面向对象它本身的编程思想,主要强调的是发出动作的动作发出者的本身,并将事务进展的过程归结于对应的对象身上。没有对象,就没有它发出的动作,这就是面向对象的特点。

面向对象思想的由来

如果我们说,面向过程是过程为先。那么,面向对象就是对象为先,对象包含过程。早期的BASIC、C等语言就是面向过程的语言,由于在编程语言的发展过程中,我们发现了每回都需要去大量的功能中,选择我们所需要的功能特别麻烦。所以,我们才开发出了面向对象语言。

面向对象的三大特征

面向对象思想的最为显著的体现就是这三大特征:封装、继承、多态。

只有实现了这三大特征的语言,我们才能将之称为面向对象语言。

所以说,面向对象语言的使用特点,也由此派生而来。即:

1.找对象、建立对象;

2.使用对象;

3.维护对象间关系。

类和对象:

类:class(非Class,注意这点很重要),类是对现实事物的抽象描述。这里的现实事物,指的是Java中定义的各种具有一系列相关特点的概念的集合。

对象:对象是由概念而来的具体实例化的个例。Java中,我们由类产生对应于该类所代表概念的个体。这种个体可以是单一的,也可以是复数的。即一个满足该类定义概念的实例,和多个在个性上有所区别的满足该类定义概念的实例。

简单的来讲,类即是概念,对象即是概念的实体。即,概念上有:

class ClassAndObject

{

public static void main(String[] args)

{

//这个A就是一个概念的集合,我们将之称为类

class A

{

//这里面包含的就是这个概念的定义,以及实例化对象的方法

}

//下面的a就是一个由概念A派生出来的个体,我们称之为对象

A a = new A();

}

}

类类型变量总是指向该类产生的实体,用以代表该实体。具体到实践中,我们通常都是这样用的:

class TypistAndTyping

{

public static void main(String[] args)

{

//我们使用打字员这个概念,来“任命”一位打字员a

//即,用概念定义一个实例化的个体a

typist a = new typist("Mr.Bang",1);

//打字员开始打字。即,实体a调用自身方法:

a.typing();

}

}

//比如我们定义一个类,名称为打字员,那么一个打字员的任务是什么呢?

/*当然是打字啦。于是,这就是我们要做的,我们要为一个概念定义上他所

*代表的方法,不论是特性方法,还是共性方法(通常,我们将个性方法都

*放在另一个类中,用继承来实现就可以了)。

*/

public class typist

{

/*既然我们定义了打字员这个类,那么我们就必须放点什么和打字员相

*关的东西在这个类中。以便这个类有意义,Java中,我们默认是不定

*义无意义的类的。而定义的项目中,包含了这个概念所具有的属性、

*动作、初始化方法。

*/

//属性-------------------------------------------------------------------

//打字员是具有属性的,这些属性是由这个概念本身决定的,如:

String id; //打字员编号

int salary; //打字员的薪金,不要问我为什么只有整数。。

//功能-------------------------------------------------------------------

//打字员该具有什么功能呢?当然是打字啦~

void typing()

{

//原谅我这节的不正经吧。。

System.out.println("typing");//没错,就是打字~

//什么?你问别的方法?没有了。1块钱的员工,人家能给你打字就不错了。。

}

//构造方法---------------------------------------------------------------

/* 我们上面定义了打字员这个类的对应属性和它的特有方法:打字。

*接下我们就需要考虑,怎样来通过这个概念实例化一个该概念的实例了。

*想要将一个类实例化,我们首先需要考虑的是这个类有没有必须初始化

*的参数(即属性),如果没有,则定义一个空实例化方法即可,我们将

*这种方法称为空构造函数。

* 当一个类需要或者必须有初始化的参数时,我们就可以定义一个传

*参的构造方法,这样的构造方法,我们称之为带参数的构造函数,简称

*含参构造函数。

*/

//很显然,打字员需要含参构造函数,我们假设没有数据不明的打字员

void typist(String id, int salary)

{

//传参:

this.id = id;

this.salary = salary;

}

}

构造方法:

什么是构造方法,上面的例子中,我们已经给出了它的两种分类。即:空构造函数和含参构造函数。这里我们只解释一下构造方法这个概念本身。当然,作为一个概念,它本身就是可以设置为类的,而我们也在反射机制上这么做了,这就是Constructor类代表的概念。

构造方法,指的是当一个已经设置为类的概念期望实例化一个该类相关对象的时候,所需要做的准备工作,包括了对该对象的初始化,和其他相关联操作,这样的一个过程。因此,构造方法本身还是一个过程。只不过,该过程发生在该类对象产生之前,是每个实例化对象所必须经历的过程。相同的同一类对象,如果构造方法只有一个,那么该类的所有对象的产生,所使用的构造方法都是完全相同的。而不同类之间,不考虑继承,就算是都只有空构造函数,其产生类的本质都是不一样的。

即,不同类的构造方法不同。

注意:构造方法不用设定返回值(类型设为void即可),方法名必须和类名相同,且不能使用return语句。

构造代码块:

什么是构造代码块?想要清楚什么是构造代码块,首先就得搞清楚什么是构造代码。构造代码,就是在某个类创建对象时,对对象进行初始化操作的代码。这和构造函数的不同在于,不论是什么样的构造函数,在调用构造函数之前,都会先执行构造代码进行操作。而构造代码块,就是指这些构造代码的代码块集合。例如:

classTectonicBlockDemo

{

public static void main(String[] args)

{

//建立一个Man类对象a

Man a = newMan("Mr.Bang",28);

//显示a的信息

a.show();

}

}

public class Man

{

//Man类的成员变量(属性)

String name;

int age;

//构造代码块:

{

name = "wang";

age = 18;

System.out.println("haha!"+name+": "+age);

}

//构造方法:

void Man(String name, int age)

{

this.name = name;

this.age = age;

}

//显示信息函数

public void show()

{

System.out.println(name+":"+age);//注意显示的和构造代码块不同

}

}

上面这道例题的结果为:haha!wang: 18

Mr.bang: 28

从结果,我们不难发现,构造代码块先于构造函数执行。

实际上,我们的执行顺序可以简略的写为:父类->静态构造代码块->构造代码块->构造函数

补充:匿名对象

什么叫做匿名对象?匿名对象就是指不用类类变量指定的对象,就是匿名对象,比如说:

new typist("K", 20 ); //这就是一个匿名对象

因此,我们可以看出,如果我们只需要使用一次该类的实例,我们就可以使用这种匿名对象的方式,来创建一个实例,调用我们需要的变量、方法(通常这种情况都是调用方法)。当然,我们还有更简便的方式,即使用public修饰对应方法即可。但是public修饰的这种方式,在某种需要保护该方法,但又期望通过反射调用一次该对象的方法的情况,我们就可以使用这种方式。当然,这种方法只是对具体情况的一种折中的方式,个人认为,应该视具体情况而定进行使用。

匿名对象也可以用作实际参数传递。这通常用于对某个同类对象的重新还原初始设置之用。比如:

class anonymousObject

{

public static void main(String[] args)

{

//建立B类对象b,并为成员变量i其赋初值2

B b = new B(2);

//显示对象b中的i值

b.show();

//使用匿名对象,来重新初始化对象b

b = new B();

//显示对象b,在重新初始化后的i值

b.show()

}

}

//测试类B:

public class B

{

private int i = 1;

//B类构造函数

void B(int i)

{

this.i = i;

}

void B(){}

//成员变量i的显示函数

public void show()

{

System.out.println(i);

}

}

上面这个例子中,我们就使用了匿名对象来再次初始化已经对成员变量赋过值的B类对象b。从结果不难看出,原来的i值2,经过匿名对象的初始化,变成了1。实现了还原。

-------android培训、java培训、期待与您交流! ----------

JAVA类与对象构造方法,java基础-1-面向对象(1)-概念介绍与类、对象、构造方法...相关推荐

  1. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  2. java保护型数据成员_Java基础知识笔记第四章:类和对象

    编程语言的几个发展阶段 面向机器语言 面向过程语言 面向对象语言:封装.继承.多态 类 类声明 classPerson{ ....... }class植物{ ....... } 类体 类使用类体来描述 ...

  3. java定义构造方法_JAVA基础学习之路(三)类定义及构造方法

    类的定义及使用 一,类的定义 classBook {//定义一个类intprice;//定义一个属性intnum;public static int getMonney(int price, intn ...

  4. 小汤学编程之JAVA基础day06——面向对象(一):类与对象

    一.类 1.类的属性      2.类的方法     3.类的分类     4.类的创建     5.扩展:成员变量和局部变量 二.对象 1.对象的创建      2.对象的使用 一.类 类就是一类事 ...

  5. java基础知识——面向对象基本概念

    文章目录 Java基本概念 源文件声明规则 Java包 Import语句 继承类型 继承的特性 继承关键字 super 与 this 关键字 构造器 方法的重写规则 重载(Overload) 重写与重 ...

  6. SQL语言基础:数据库语言概念介绍

    1.概念介绍 SQL(Structured Query Lanauage)结构化查询语言是关系数据库中最普遍使用的语言.主要包括查询.数据操纵.数据定义.数据控制功能,是一种通用的.功能强大的关系数据 ...

  7. 音频声学基础一,基本概念介绍

    1.你了解声音吗? 声学.音频简介 2.声音传播特性 简单的传播特性 3.声音的基本物理量 基本物理量--声压级的概念及计量单位 4.声压级的计量 声压计.手机声压计APP可以使用吗(麦克风型号各异如 ...

  8. java 01 02_Java知识系统回顾整理01基础02面向对象01类和对象

    一.面向对象实例--设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一 ...

  9. JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

    运行第一个JAVA程序: 这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样 ...

最新文章

  1. SPOJ 287 Smart Network Administrator
  2. 聊一聊:拿到年终奖后马上辞职,厚道吗?
  3. 谈慎独2017-12-19
  4. 区块链100问 第一问
  5. 04_ReplaceBlank
  6. 美团DSP广告策略实践
  7. Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
  8. PostgreSQL判断一个表是否存在
  9. CentOS 7 最小化安装简单配置
  10. BEAST 漏洞相关
  11. 学python能做什么类型的工作-Python职业机会–是否值得学习Python?
  12. matlab制作水印,怎么在含有水印的图像中提取出水印
  13. AndroidStudio利用android-support-multidex解决65536问题64k问题
  14. 无意中学到的,感谢通用
  15. OneNav一为主题魔改教程(七):继续完善本地网址功能,重复的网址不让保存--洞五洞洞幺
  16. 酷讯陷入迷途主动求变:3年找不到着陆市场
  17. 前端测试 —— 技术选型及入门
  18. 生活小程序摩拜单车为啥投开锁功能?生活小程序是趋势?
  19. 会议交流 | 第十六届全国知识图谱与语义计算大会 (CCKS2022)
  20. 安卓开发工程师岗位职责!一线互联网企业高级Android工程师面试题大全,附超全教程文档

热门文章

  1. WIFi天线和天线测试
  2. Web 性能测试工具
  3. 通过物联网网关如何进行三菱PLC的远程程序上下载?
  4. centos 修改Mac
  5. 屏蔽在线视频广告的方法
  6. 详解ISO13400文档-3
  7. NetApp运维使用手册
  8. 解决“下载软件仓库信息失败 检查您的网络连接”仓库 “http://ppa.launchpad.net/fcitx-team/..../”没有Release文件
  9. 华为小程序怎么弄出来_抖音死亡计算器怎么弄 抖音生命计算器在哪里用
  10. 到哪下c语言编译器,在那里可以下载到C语言的编译器