一切都是对象

本文介绍了Java编程的基础概念,包括面向对象的思想、句柄与对象的区别、数据存储位置等,并讲解了如何创建和使用Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java语言首先便假定了我们只希望进行面向对象的程序设计。也就是说,在正式使用它之前,必须将我们的思想转入一个面向对象的思维中,只有这样,与其他的opp语言相比,才能体会到java的易学易用。

一、用句柄(handle)操作对象

在java中,尽管可以将一切“看做”一个对象,但操纵的标识符实际上是指向这个对象的一个句柄(handle),有的人也将这个句柄称作“引用”或者“指针”。我们实际上是通过句柄来操作对象的,就像我们通过遥控板来操作电视一样,句柄是实现我们能够操作对象的一个桥梁。没有对象,句柄可以独立存在。就像没有电视机,遥控板可以独立存在一样。也就是说,只是由于拥有一个句柄,并不表示必须有一个对象同它连接。如:String s;这里这是创建了一个句柄,并没有对象。若此时想s发送一个消息,就出运行出错。一种更安全的做法是:创建一个句柄时,记住无论如何都进行初始化。

二、所有对象都必须创建

new关键字的意思是:把我变成这些对象的一种新类型。

1、数据保存到什么地方

在运行程序时,我们最好要知道我们使用的数据保存在了什么地方。特别要注意内存分配。有六个地方可以保存数据。

寄存器:这是最快的保存区域。它位于处理器内部,且数量十分有限。由编译器根据需要分配,我们没有直接的控制权。

堆栈:特别快,特别有效的保存方式,仅次于寄存器。驻留于常规的RAM中。可通过“堆栈指针”获得处理的直接支持,指针下移,创建新的内存,指针上移,释放那些内存。Java的有些数据保存在其中,比如对象的句柄,但是对象并不放在其中。

堆:和堆栈一样,驻留于常规RAM中,保存了java对象。“内存堆”或“堆”(heap)最吸引人的地方在于编译器不必要知道要从堆里分配多少存储空间,存储的数据要在堆里停留多少时间。用堆保存数据时会有更大的灵活性。不足之处在于:在堆里分配存储空间时会花费更多的时间。

静态存储:静态static是指位于固定位置(虽然也在RAM中)。程序运行期间,静态存储的数据随时等待调用。Static可以指出一个对象的元素是静态的,但是java对象永远不会置入静态存储空间。

常数存储:常数值通常直接置于程序代码内部,这样做是安全的,因为他们永远不会改变。有的常数需要严格的保护,可以考虑将他们置于只读存储器ROM中。

非RAM存储:若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。这样的数据就可以选择非RAM存储,比如“流式对象”和“固定对象”。

(通过上述内容大致清楚句柄的存储位置在堆栈中,对象的存储位置在堆中,静态对象的存储位置在静态存储中,寄存器是我们无法直接控制的。)

2、特殊的情况:主要类型(基本数据类型)

这里的特殊情况,也就是说我们在程序编写过程中用到的一些基本数据类型,因为这些数据类型太常用了,所以就称为主要或者基本或者primitive类型。这些类型不用new创建变量,而是创建一个并非句柄的自动变量,这个变量容纳了具体的值,并置于堆栈中,能够更高效的存取。这些类型有

主类型

大小

最小值

最大值

封装器类型

boolean

1bit

-

-

Boolean

char

16bit

Unicode 0

Unicode 2^16-1

character

Byte

8bit

-128

127

Byte

Short

16bit

-2的15次方

2的15次方-1

Short

Int

32bit

-2的31次方

2的31次方-1

Integer

Long

64bit

-2的63次方

2的63次方-1

Long

Float

32bit

IEEE754

IEEE754

Float

Double

64bit

IEEE754

IEEE754

double

Void

-

-

-

Void


3、java的数组

创建对象数组时,实际创建的是一个句柄数组。而且每个句柄就会自动初始化成一个特殊值,而且带有自己的关键字null,如果java看到null,就知道该句柄并没有指向一个对象,正式使用前,必须为每个句柄就分配一个对象。

三、绝对不要清除对象

在大多数的程序设计语言中,变量的存在时间,lifetime一直是程序员着重考虑的问题。变量应持续多长时间?如何清除他?何时进行?

1、变量variable的作用域

Java中,作用域是由花括号的位置决定的。

2、对象的作用域

{

Strings=new String(“abc”);

}

Java对象不具备与主类型一样的存在时间。用new关键字创建一个java对象的时候,它会超出作用域的范围之外。在上述代码中,句柄s会在作用域的的终点消失,但是s指向的对象依然占据着内存空间。在上述代码里,我们没有办法访问对象,因为指向他的唯一一个句柄超出了作用域边界。

Java有一个特殊的“垃圾收集器”,它会查找用new创建的所有对象,并辨别其中那些不再被引用。然后自动释放对象空间。

4、新建数据类型:类 class

字段和方法:

字段:数据成员

数据成员为基本类型的时候,及时我们不初始化,系统也会为我们初始化,但是如果局部变量为基本数据类型而没有初始化的时候,运行会出错。

方法:成员函数

5、方法、自变量和返回值

Java的方法method决定了一个对象能够接收的消息。Java的方法只能作为类的一部分创建。只能针对某个对象调用一个方法(静态方法可以针对类来调用),而且那个对象必须能够执行那个方法调用。

定义方法的基本格式:返回类型 方法名(自变量列表){方法体}

6、构建一个java程序

名字的可见性

为了防止命名的重复和冲突,java引入了一种新的机制,及全部小写的反转域名来为自己的库命名,即包的概念,这样自己的程序就有了自己的空间,不会和别的程序交织冲突

使用其他组件

使用import来指示编辑器导入一个包或者一个类库,大多数的时候,我们直接使用来自标准java库的组件,他们是与编译器配套提供的。

static关键字

一般在定义一个类之后,除非使用new来创建一个对象,否则实际上并未得到任何东西。只有执行了new之后才会正式生成数据存储空间,并可使用相应的方法。使用static来定义一个类,类的数据和方法就不会和任何对象相关联,及时为创建对象,仍能够调用static方法和变量。

7、嵌入注释文档

注释文档:用于提取注释的工具叫做javadoc,通过javadoc我们就能轻松获得标准的java注释文档。

具体语法:

注释一般都在声明和定义之前,比如一个类的注释会在类定义之前,变量的注释会在变量定义之前,方法的注释会在方法定义之前。Javadoc只能为public和protected成员处理注释文档。Private和友好的成员的注释会被忽略。

@see引入其他类

该标记允许我们引入其他类里的文档。Javadoc会生成相应的html,将其值直接连接到其他的文档,格式如下:

@see 类名

@see 完整类名

@see 完整类名#方法名

类文档标记

@version

@author

方法文档标记

@param格式如下:

@param 参数名 说明

@return 说明(返回值的含义)

@exception完整类名 说明(有关异常的详细情况)

@deprecated(一些旧功能已由改进后的新功能取代)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值