Java中面向对象到底是什么意思

Java中面向对象到底是什么意思,第1张

一.面向对象

  1何谓对象:在面向对象程序设计中,我们将问题空间中的元素以及他们在方案空间中的的表示物称作对象(object)

   Alan Kay总结了smalltalk中对象的5大基本特征:

  所有的东西都是对象。

  程序是一大堆对象的集合,他们通过消息传递,各个对象之间知道要做些什么。

  每个对象都分配有自己的存储空间,可容纳其他对象。

  每个对象都有一个类型。

  同一类的所有对象能接收相同的消息。

   -----而所有的编程语言的最终目的是提供一种抽象方法----

  2.对象的接口:我们向对象发出请求是通过它的接口定义的,对象的类型决定了它的接口形式。

  3.OOP中唯一关心的:就是接口是什么,就像汽车的发动机一样,我们不必要知道它的结构是什么,只要它能工作就行了。所有的程序是由一定的属性(数据)和行为(方法)组成的,不同的对象访问通过函数调用来完成,对象间的所有交流都是通过方法调用,通过对封装数据对象,很大程度上提高复用率。

  4.对象的3个主要特征:

   behavior—说明这个对象能做什么。

   State—当对象施加方法时对象的反映。

   Identity---与其他相似行为对象的区分标志,每一个对象有唯一的indentity, 而这3者是相互影响的。

  5.面向对象中最重要的思想就是类,类是模板是蓝图,从类中构造一个对象,即创建了一个类的实例。(类好比一个建材市场,其中有许多子类--各种各样的装饰材料,而我们装修自己的房子就要选择我们需要的材料,(为了建立我们自己的程序,我们必须选 择我们需要的类)这个比喻可以很形象的解释类是什么。

  6.类之间的关系:

   依赖关系:use-a A类中的一个方法操作了另一个类中的对象。

   聚合关系:has-a A类中的对象包含B类的对象。

   继承关系:is-a A继承了B类,此时A类不仅有了B类的方法,还加入了自己的方法。以便我们创建我们自己需要的对象。

  Java中定义的每一个类都必须继承另一个类,使用关键字extends,如果一个类在定义中不现实使用关键字extends,这个类就会隐式继承Object类。Object类又叫根超类,或基类。,我们从根超类继承来的叫子类。Java中每个类都是根超类的子类。

  8.接口(interface)规定了可对特定的对象发出哪些请求。

  9.继承=重新使用接口:创建出一个数据类型后,当需要新建立一个数据类型去实现相同的功能,是很没有意义的一件事,此时对其克隆后,再根据情况改进实现自己的目的就是继承。

  10.封装:就是把数据和行为结合在一起在一个包中,并对对象使用者隐藏数据的实现过程。Java用3个关键字来设置边界,从而进行对数据的隐藏。Public(共有)的定义任何人都可使用private(私有)意味着除你自己,类型创建者及那个类型的内部函数成员可以访问外其他任何人使用都会产生错误。Friendly(友好)

  意味在包(package)中是可以访问的。(以上过程也可叫方案隐藏)

  11.引用(Handle)操控对象:

   当创建一个引用时必须要对其进行初始化

   例: String s=”happy”(未建立连接)

   String s=new string(“happy”)与一个新的对象连接使用new 。此句建立了一个引用,并且连接引用并初始化对象 赋值字符串“happy”

  12对象的创建及存在时间:数据存放的地点

   1:寄存器-速度快,数量少,在cpu内部,我们对寄存器没有控制权。

   2:堆栈:驻留长规内存中,堆栈指针下移建立新的内存,上移释放内存。

   3:堆:常用内存池,保存对象,有极大的灵活性,java的数据就存放在此,但是要以时间及效率为代价。Java的对象建立是在程序运行时才决定。而c++是在设计时建立对象。

  对象的生存时间(lifetime)java提出的垃圾收集器可以很好的发现无须再用的对象,使用GC(grabage collector)垃圾收集器。清除对象,释放内存。

  为此我们就要付出一定的运行期的开销。

  13在此我们就会有这样一个印象,一个程序只是一系列对象的集合,他们的方法将其他对象作为自己的变量使用

  14主要类型: java的主要类型有:boolean,char,byte,short,int,long,float,double,void这些主类型的大小都不随机器的结构变化而变化,提供了java很好的可移植性

  15字段方法:字段又叫数据成员,成员函数又叫方法,java的全部工作就是定义类,制作累得对象及发送消息

  16一个程序只是一系列对象的集合,他们的方法将其他的对象作为自己的变量使用,而且将消息发给那些对象

  17名字的可见性:为了使名字不重复,作者可以定义自己的库,一般用自己域名的倒写形式 如: COM:Leeakutilityfoidles

  18static关键字:即使没有创建对象,也需要一愕能调用的方法,此时可以使用static

  19javalang默认自动的导入每个java程序中

  20OOP中对象使对属性和方法的封装,对象具有信息的隐蔽的性质,对细节的隐藏,对象只需要知道去这样做,而不知道如何做的细节,类的方法应谨慎控制对java数据的访问,可以用get读取方法,用set修改方法

  21:pakage:Java API中每个类和接口属于一个特定的包,包实际上市对类和接口进行组织的目录结构,提供了一种软件复用机制

  22创建可复用的类得步骤:1定义一个public类

   2选择一个包名,并把pakage语句加到可复用的类的源码中

   3编译这个类

   4把可复用的类导入其他程序中即可

  23java中提出在类定义的括号外的仅有2个语句,pakage和import

  24软件的复用性,软件的复用性就是利用紫的已有的,定义良好的的经过仔细测试的文档清晰的可移植的易于获得的软件构件开发新的软件

  以上就是java面向对象的一些基本术语的概述,其中的有些部分可以扩展的更深,看过think in java的 朋友就会有此种感觉此文章向对初学者阐述了面向对象的基本概念对已是java程序员的朋友可以对他们的基本知识做以回顾

Java语言适合初学者学习,

Java语言由语法规则和类库两部分组成,其中语法规则确定了Java程序的书写规范,学习好语法规则是Java语言,也是所有编程语言的基本功。本文主要向大家简单介绍一下Java的语法规则。 Java语言与C/C++语言有着紧密的联系,Java中的许多术语来自于C++,起语法也来自于C++。因此Java的语法和c++的语法计划一模一样。下面简单介绍一下Java的具体语法。

一、Java的词法

1、标识符

标识符是类、变量和方法等的名字,作用是让编译器能够识别它们。在Java语言中,标识符可以包含数字、字母、下划线(_)和美圆符号($),但是不能以数字作为开头。与C/C++语言不同的是,Java语言还可以将一些非拉丁字母包含在标识符中,这是因为Java语言使用的是Unicode字符,所有的十六进制00C0以上的Unicode字符都可以用在标识符中。但是Java语言的关键字是不能用来作为标识符的。

我们在使用标识符的时候应该尽量表达所要表示的类、变量、方法等的含义。另外,标识符中可以使用下划线,我们应该充分利用这一点以提高程序的可读性。

2、关键字

以下是Java的全部关键字:

abstract double int strictfp

boolean else interface super

break extends long switch

byte final native synchronized

case finally new this

catch float package throw

char for private throws

class goto protected transient

const if public try

continue implements return void

default import short volatile

do instanceof static while

尚未使用的关键字

为Java 2增加的关键字

3、注释

Java有三种形式的注释:

第一种是C语言的传统注释方式,即将“/”和“/”之间的文本都视为注释,这种注释可以跨越多行。

第二种是C++风格的注释,即将“//”之后直到行尾的文本都视为注释,这种注释只能包含一行。

第三种是Java新增加的注释方式,即将“/”和“/”之间的文本都视为注释,这种注释也可以夸耀多行。注意,这种注释方式生成的注释将作为Javadoc文档保存。

二、操作符

1、算术操作符

操作符 用途 优先级 结合性

++,-- 自动递增,自动递减 2(仅次于括号) 从右到左

+,- 一元加,一元减 2 从右到左

,/ 乘,除 3 从左到右

% 取余(求模) 3 从左到右

+,- 加,减 4 从左到右

2、布尔运算与关系运算符

操作符 用途 优先级 结合性

>,<,>=,<= 测试相对大小 6 从左到右

== 测试相等性 7 从左到右

!= 测试不等性 7 从左到右

: 根据第一个操作数返回后两个操作数之一 13 从左到右

! 非 2 从右到左

& 布尔与 8 从左到右

^ 异或 9 从左到右

| 布尔或 10 从左到右

&& 条件与 11 从左到右

|| 条件或 12 从左到右

3、位操作符

操作符 用途 优先级 结合性

~ 非(位求补) 2 从右到左

<<,>> 左移,右移 5 从左到右

>>> 当作无符号右移 5 从左到右

& 位和 8 从左到右

^ 位异或 9 从左到右

| 位或 10 从左到右

4、赋值操作符

操作符 用途 优先级 结合性

= 赋值 14 从右到左

= 操作同时赋值 14 从右到左

/= 操作同时赋值 14 从右到左

%= 操作同时赋值 14 从右到左

+= 操作同时赋值 14 从右到左

-= 操作同时赋值 14 从右到左

>>= 操作同时赋值 14 从右到左

<<= 操作同时赋值 14 从右到左

>>>= 操作同时赋值 14 从右到左

^= 操作同时赋值 14 从右到左

|= 操作同时赋值 14 从右到左

&= 操作同时赋值 14 从右到左

5、特殊操作符

cast操作符将一种数据类型转换成为另一种数据类型,cast应写成把要校正操作数的类型名放在括号中。

例如: int i; long l; l=7876547; i=(int)l; 如果给高精度的变量赋予一个低精度值,则不需校正。类型校正操作符的优先级为2,结合性为从右到左结合。

将以上讲到的操作符的优先级总结如下:

优先级 运算符 结合顺序

1 []数组运算 点运算符 ()调用方法 从左到右

2 ! ~ ++ -- +(一元加) -(一元减) ()强制类型转换 new 从右到左

3 / % 从左到右

4 +(二元加) -(二元减) 从左到右

5 >> << >>> 从左到右

6 < <= > >= instanceof 从左到右

7 == != 从左到右

8 & 从左到右

9 ^ 从左到右

10 | 从左到右

11 && 从左到右

12 || 从左到右

13 : 从左到右

14 = += -= = /= %= &= |= ^= <<= >>= >>>= 从右到左

三、常量

1、整型常量

在Java语言中,整型常量有三种形式,它们分别是:十进制、八进制、十六进制。

需要注意的是十进制数不能以0开头,这是因为八进制的数是以0开头的,而十六进制数以0x或0X开头。

2、浮点型常量

浮点数只能表示十进制数。浮点数有两种表示方法,即标准表示法和科学记数法。浮点数又分为单精度数和双精度数。

3、布尔型常量

布尔型常量有两个值:ture(或TURE)和false(或FALSE)它们分别表示真和假,这两个值用来表示事物的状态,它们必居其一。通过测量布尔值可以判断是否执行某个步骤。

4、字符型常量

字符型常量是一个单一的字符,其形式是由两个单引号引起来的一个字符。但是两个单引号引起来的不能是单引号和反斜杠,即‘’和‘\’是不正确的写法。

大家一定要记住,Java语言中的字符是16位的Unicode字符,这与C/C++等语言是不一样的。

同C/C++语言一样,Java语言也有转意序列。Java中的转意序列的功能见下表:

转义序列 标准形式 功能描述

\ 继续

\n NL 回车换行

\t HT 水平制表符

\b BS 后退一格

\r CR 回车不换行

\f FF 换页

\ 单引号

\\ \ 反斜杠

\" " 双引号

\ddd 0ddd 八进制模式

\xddd 0xddd 十六进制模式

\udddd 0xdddd Unicode双字节字符

字符串常量

字符串常量是由双引号引起来的一系列字符,与C/C++语言中不同的是,Java语言中的字符串不是通过字符数组来实现的,而是通过字符串类(即String类)来实现的。

四、变量和数据类型

在Java中,数据的类型可以分为四种:基本数据类型、数组类型、类和接口类型。任何数据都一定是上述数据类型的一种。

其中基本数据类型可以分为四大类:布尔型、字符型、整数型和浮点型。这些类型的数据与前面介绍的常量的类型基本相同,在此不再多说。下面将整数型和浮点型变量的取值范围列出:

表一、

类型 宽度 取值范围

byte 8位 -256到256

short 16位 -32768到32767

int 32位 -2147483648到2147483647

long 64位 -9223372036854775808到9223372036854775807

表二、

进制 整数 长整数

十进制 最大正整数 2147483647(2的31次方减1) 923372036854775807L(2的63次方减1)

八进制 最大正整数 077777777777(2的31次方减1) 07777777777777777777L(2的63次方减1)

最小负整数 020000000000(-2的31次方) 04000000000000000000L(-2的63次方)

十六进制 最大正整数 0x7fffffff(2的31次方减1) 0x7fffffffffffffffL(2的63次方减1)

最小负整数 0x80000000(-2的31次方) 0x8000000000000000L(-2的63次方)

浮点数能表示的数值从小到大分别是:负无穷大、负有限值、负零、正零、正有限值及正无穷大。其中正零和负零在进行数值比较的时候是相等的,但仍有办法分辨这两个值,例如在进行10/00的时候会得到正无穷大的结果。其它非零非无穷大的有限值是以sm(2^e)来表示的,s和m的取值范围见下表:

表三、

类型 s m e

float +1或-1 小于2的24次方的正整数 149到104的整数

double +1或-1 小于2的53次方的正整数 1045到1000的整数

表四、float 最大值 3640282347e+38f

非零最小值 140239846e-45f

double 最大值 179769313486231570e+308

非零最小值 4940656458412465334e-324

另外浮点数还有一些特殊值,见下表:float 最大值 FloatMAX_VALUE

最小值 FloatMIN_VALUE

正无穷大 FloatPOSITIVE_INFINITY

负无穷大 FloatNEGATIVE_INFINITY

NaN FloatNaN

double 最大值 DoubleMAX_VALUE

最小值 DoubleMIN_VALUE

正无穷大 DoublePOSITIVE_INFINITY

负无穷大 DoubleNEGATIVE_INFINITY

NaN DoubleNaN

与C/C++语言中不同的是,在Java语言中,所有的基本数据类型都有预设值,就是说当我们声明一个变量时,即使我们没有对它赋值,它的值也是一定的,而不像在C/C++中那样是不可预测的。具体个类型的预设值见下表:

基本数据类型 预设值

Boolean false

Char \u000

Byte (byte)0

Short (short)0

Int 0

Long 0L

Float 00L

Double 00d

五、Java与C/C++的比较

由于Java的语法直接来源于C/C++,所以Java的程序控制语句与C/C++一模一样,在此不再多说。以下重点介绍一下Java与C/C++的不同。

指针

大家在使用C语言编程的时候想必都曾经因为指针的复杂计算而烦恼,在C/C++语言编程过程中,指针可能引起许多错误,这些复杂的指针算法所产生的错误常常让人迷惑不解,导致C/C++程序员在此浪费了大量的时间。考虑到这种原因,Java中取消了指针。指针的功能由参考(reference)所取代,这使得Java中对复杂数据结构的实现更加容易,因为用对象和对象数组实现复杂的数据结构更可靠。

函数

在Java中没有C/C++中应用广泛的函数,C/C++中通过函数实现的功能在Java中都是通过类和方法来实现的。

继承

C++支持多重继承,这是一个从多个父类中派生一个类的有效办法,但这种派生很复杂,也很容易产生问题。因此,Java中没有采用多重继承,但Java的Objective C协议接口能完成C++中多重继承的所有功能。

goto语句

大家知道,在使用高级语言编程时过多的使用goto语句会使程序变得十分混乱,因此Java中也没有使用goto语句。但是不可否认,当程序比较容易控制的时候,适当使用goto语句能使程序的运行更快捷,因此Java中使用了多重break和continue语句(允许break和continue语句使用标签)实现C++种goto语句的功能。

联合和结构

在C++中有三种数据结构:联合、结构和类;Java中只有类,它可以实现上述三者的功能。

字符串

在C/C++中,字符串是通过字符数组实现的,但是由于数组的空间不是动态分配的,这容易出现越界错误,例如:常有预先设定的字符数组不能容纳后输入的字符串。在Java中,字符串是一类特定的对象,这使得字符串更具有一致性和可预见性。

Typedef、Define和预处理器

Java中不需要#define语句、预处理器或者typedef,但需要头文件。在Java中一个类的信息必须包含在一个文件中,而C/C++中有关类的信息可能分散在多个文件中。

数据类型的自动强制转换

在Java中强制一种类型的数据元素变成一种不太精确的数据类型需要编程人员采用预测方法。

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/langman/3459696.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-15
下一篇2023-08-15

发表评论

登录后才能评论

评论列表(0条)

    保存