第二章 一切皆对象

简介

java一切皆对象

用引用操纵对象

每种编程语言都有自己的操纵内存中元素的方式。有时候,程序员必须注意将要处理的数据类型是什么。
在java中一切都是被视为对象,因此可采用比较单一固定的语法。尽管一切都看作对象,但操纵的标识符实际上是对象的一个“引用”(reference)。
比如说你想操纵一个词或句子,则可以创建一个String引用:

String s;

必须由你创建所有对象

一旦创建了一个引用,希望它能与一个新对象相关联。通常用new操作符来实现这一目的:

String s=new String("abc");

存储的什么地方

程序运行时候,对象是怎么进行放置的?特别是内存是怎么分配的呢?下面有5个地方可以存储:

  1. 寄存器:这是位于处理器内部,是最快存储区。但是寄存器的数量极其有限,所有寄存器根据需求分配。你不能直接控制,也不能在程序中发觉寄存器的存在
  2. 堆栈:位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器那里获取直接支持。堆栈指针向下移动,则分配新的内存,向上移动,则释放内存。这是一种快速有效的分配存储方法,仅次于寄存器,但是java对象并不存储在其中,存储一些对象引用,基本类型等。
  3. :位于RAM中,一种通用的内存池,用于存放所有java对象。对象的销毁由GC控制。
  4. 常量存储:常量值通常直接存放在程序代码内部,这样是安全的,因为它们永远不会被改变。
  5. 非RAM存储:如果数据完全存活在程序之外,那么它可以不受程序的任何控制,,在程序没有运行时也可以存在。例如把对象转化为可以存储到其他媒介(磁盘等)上的事务,在需要的时候恢复正常。java提供了堆轻量级持久化的支持,而如JDBC和Hibernate这样的机制提供了更加复杂的对数据库中存储和读取对象信息的支持。

特例:基本类型

八大基本类型:
在这里插入图片描述高精度数字
java提供了两个用于高精度计算的类:BigInteger和BigDecimal。虽然它们大体上属于“包装器类”的范畴,但二者都没有对应的基本类型。
BigInteger支持任意精度的整数。
BigDecimal支持任意精度的定点数。

java中的数组

java为了保证安全性,在创建数组的时候确保数组会被初始化,而不能在它的范围之外访问,是以每个数组上少量的内存开销和运行时的下标检查为代价的。但也换来了安全性和效率的提高
当创建一个数组对象的时候,实际上创建了一个引用数组,并且引用指向为null。一旦java看见null,就知道这个引用还没指向某个对象,所有必须为他指向一个对象,不然在运行时将报错。

永远不需要销毁对象

大多数过程型设计语言中,变量生命周期的概念,占据了程序设计工作中非常重要的一个部分。

作用域

作用域决定了在其定义的变量名的可见性和生命周期,在c,c++,java中由花括号({})的位置决定

对象的作用域

如下面代码

{
	String s=new String("abc");
}

引用s在作用域终点就消失了。然而,s指向的String对象还没有。这需要GC垃圾回收器来管理。所有你不需要被担心。

创建新的数据类型:类

如果一切皆对象,那么什么决定了某一类对象的外观和行为呢?
这就是class

字段和方法

一旦定义了一个类,就可以在类中定义两种类型的元素:字段(也称数据成员)和方法(也称成员函数)。字段可以是任意类型的对象,可以通过引用与其通信;也可以是基本数据类型中的一种。[在这里插入图片描述]
基本成员默认值:
在这里插入图片描述

方法,参数和返回值

方法的基本组成包括:名称,参数,返回值和方法体。

参数列表

方法的参数列表指定要传递给方法什么样的信息。如果参数被设置为String类型,则必须传递一个String类型的对象,否则编译器将抛出异常错误

构建一个java程序

名字可见性

名字管理在程序代码中尤为重要,如果在程序某个模块中想使用某个名字,但是其他模块已经使用,则该怎么办?
java中设计者希望程序员反过来使用自己的域名。

运用其他构件

如果想在自己的程序中使用预先定义号的类,那么编译器就必须知道怎么定位它们
使用关键字import

import java.util.*;

static关键字

被static修饰的对象和方法都会变成类变量和类方法

你的第一个java程序

下面是一个简单的java代码

import java.util.*;

public class HelloDate{
	public static void main(String[]args){
		System.out.println("hello");
	}
}

编译和运行

要编译首先需要java开发环境(JDK)

注释和嵌入式文档

java中与两种注释风格。一种是传统的C语言风格的注释
如下:

/*
*
*/

第二种也源于C++是单行注释

//

总结

以上只是第二章的大部分,还有一部分如(注释文档,语法,嵌入式HTML还没讲解),有兴趣的小伙伴可以自己看了解一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值