资讯专栏INFORMATION COLUMN

《Java编程思想》笔记2.一切都是对象

taohonghui / 1625人阅读

摘要:方法的基本组成包括名称参数返回值方法体方法名和参数列表唯一的标识出某个方法。如果返回的类型是,则的作用仅是退出方法否则必须返回正确的返回值包名名字可见性约定以域名反转作为包名,用来划分子目录,并且全部小写。

点击进入我的博客 2.1用引用操纵对象

尽管一切都看作对象,但操纵的标识符实际上是对象的一个“引用”。

String s;
// s是一个String类型的引用, 并没有任何对象与其关联
String str = "imbug";
// 创建str引用的时候同时进行初始化
2.2 必须由你创建所有对象

使用new操作符来创建新对象并与引用关联。

String str = new String("imbug");
2.2.1 存储到什么地方

寄存器(不管你的事)——最快的存储区、位于处理器内部、空间极小、不能直接控制

堆栈(栈)——位于RAM、堆栈指针向下移动分配新内存、堆栈指针向上释放内存、存储对象的引用

堆——位于RAM、存放Java对象、耗时比堆栈长

常量存储——程序代码内部

非RAM存储——如磁盘

2.2.2 特殊:基本类型

问题:用new创建的对象在堆里,对访问频繁而且简单的对象代价太大。
方法:不用new创建变量,而是创建一个不是引用的变量,直接存储“值”在栈中。

基本类型 大小 最小值 最大值 包装器类型
boolean - - - Boolean
char 16bits 0 2^16-1 Character
byte 8bits -128 127 Byte
short 16bits -2^15 2^15-1 Short
int 32bits -2^31 2^31-1 Integer
long 64bits -2^63 2^63-1 Long
float 32bits - - Float
double 64bits - - Double
void - - - Void
关于存储空间

Java确定每种基本数据类型所占空间的大小,跟硬件平台无关。

关于boolean类型

boolean类型所占类型的大小没用明确指定,今定义为能够取字面值truefalse

在《Java虚拟机规范》一书的描述,“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。

这样我们可以得出boolean类型占了多带带使用是4个字节,在数组中又是1个字节。

根据http://docs.oracle.com/javase...:The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn"t something that"s precisely defined.

关于高精度数字

Java提供了BigInteger和BitDecimal两个高精度计算的类,但是没有对应的基本类型。

2.2.3 数组

Java确保数组会被初始化,而且不能在它的范围之外被访问;这种范围检查的原理是每个数组上的少量内存开销和运行时的下标检查。
创建一个数组对象Object[] arr = new Object[10];时,实际上是创建了一个引用的数组,数组中的每个引用都自动被初始化为null;如果是创建的是基本数据类型数组,则会讲该数组所占的栈内存全部置为0。

2.3 永远不需要销毁对象 2.3.1 变量以及基本类型的作用域

Java语言中,作用域由花括号{}位置决定,在作用域中定义的变量只可作用于作用域结束之前。

2.3.2 对象的作用域

Java对象和基本类型的生命周期不一致。

{
    String str = new String("imbug");
}

上述代码中当超出}的范围之后,引用str已经消失了,但它指向的String对象仍然存在在堆内存中,但我们无法访问该对象,因为它的引用已经消失。
Java使用垃圾回收器来管理new创建的对象,并辨别那些不会再被使用的对象,然后释放其占据的内存空间。

2.4 创建新的数据类型:类

使用class关键字来表示“一种新的类型”。
在Java中,你的工作就是定义,产生这些类的对象,以及发送消息给这些对象。

class ClassName {
}
字段(数据成员):可以是任何的对象和基本数据类型

Java会对全部字段进行初始化

基本数据类型初始值为0(false、u0000等…)

对象的引用初始值null

当变量作为类的成员时才会被初始化,局部变量不会被初始化

方法(成员函数):详见2.5节
2.5 方法、参数和返回值
ReturnType methonName( /* Arguement list */ ) {
    /* Method body */
}

Java方法决定了一个对象能够接收什么样的消息。

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

方法名和参数列表唯一的标识出某个方法。

Java中的方法只能作为类的一部分来创建。

参数列表

方法的参数列表指定要传递给方法什么样的信息。

参数列表中必须指定每个所传递对象的类型及名字。

传递的实际上是引用。

如果返回的类型是void,则return的作用仅是退出方法;否则必须返回正确的返回值

2.6 包名、import、static 名字可见性

Java约定以域名反转作为包名,用.来划分子目录,并且全部小写。

import关键字

使用import关键字引用其他定义好的类

static关键字

现象:创建一个class的时候,只是描述一个类的对象的外观与行为。在new创建该类的对象之后,才会分配数据存储空间,其方法才可以被外界调用。
问题:只想为特定域分配单一存储空间而不想去分配多少对象;希望某个方法不与包含它的类的任何对象关联在一起。
方法:static关键字

当声明一个事物是static时,就意味着这个字段或者方法不与任何对象绑定在一起

不需要创建对象也可以访问该类的任何static域和static方法

即使没有显示地声明为static,类的构造器实际上也是静态方法

和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。如果你的类代表羊,那么创建的若干的该类的对象,就好像建了一个羊群,然而,类中的static方法就好比牧羊人一样,无论你的羊群中有多少只羊,而牧羊人只有一个。也就是说, static方法或属性与对象的创建无关,只和类有关。

2.7 main方法、编译、运行
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        // main方法args用于接收命令行参数
        System.out.println(new Date());
    }
}
2.8 注释和文档 2.8.1 java的注释
/* 多行注释 */
// 单行注释
2.8.2 javadoc

javadoc是用于提取注释的工具,他可以找出程序内的特殊注释标签并解析。
javadoc输出的是一个HTML文件。
所有javadoc命令都只能在/* */注释中出现。
使用javadoc有两种方式:嵌入HTML或使用文档标签
独立文档标签:@字符开头,且要置于注释行的最前面
行内文档标签:出现在任何地方,以@开头,但要放在{}
javadoc只能为publicprotect成员进行文档注释,private包内可访问的注释会被忽略,输出结果中看不到它们。使用-private标记可以把private注释也包括进去。

2.8.3 嵌入式HTML

不要在嵌入式HTML标签中使用标题如


,否则会跟javadoc自己的标题冲突。

2.8.4 文档标签

@see package.class#member:允许用户引用其他类的文档

{@link package.class#member}:跟@see相似,只是它用于行内

{@docRoot}:该标签产生到文档根目录的相对路径,用于文档树

{@inheritDoc}:从这个类的基类继承相关文档到当前文档注释中

@version:版本信息;-version标记可以从生成的HTML中提取出版本信息

@author:作者信息;-author标记;可以使用多个@author标签但是必须连续放置

@since:程序代码最早的版本

@param:方法的参数

@return:方法的返回

@throws:异常抛出

@deprecated:过时

2.8.5 编码风格

类名:首字母大写、多个字母驼峰法
域名&方法名:首字母小写、多个字母驼峰法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72152.html

相关文章

  • Java编程思想笔记01------一切都是对象

    摘要:一引用操纵对象在的世界里,一切都被视为对象。特点创建程序时,需要知道存储在栈内所有数据的确切生命周期,以便上下移动堆栈指针。因为,指向同一块内存空间除了通过对象引用静态变量,我们还可以通过类直接引用静态变量 一、引用操纵对象 在Java的世界里,一切都被视为对象。操纵的标识符实际上是对象的引用, 例如:遥控器与电视的关系。 可以在没有对象关联的情况下,拥有一个引用。没有电视机,也可以拥...

    yuanxin 评论0 收藏0
  • Java编程思想》读书笔记-类与对象

    摘要:类最基本的作用,在于通过类获取到相应的对象,在向对象发送消息时以期望对象做某些特定的事情。先导概念引用中一切皆对象,因此采用一个指向对象的引用来操纵对象。对象可以存活于作用域之外。 欢迎各位读者关注我的微信公众号,共同探讨Java相关技术。生命不止,学习不休! showImg(https://segmentfault.com/img/bVboaBO?w=129&h=129); 也许你慢...

    NickZhou 评论0 收藏0
  • Java编程思想笔记11.持有对象

    摘要:迭代器通常被成为轻量级对象创建它的代价很小。与迭代器可以用于数组和所有对象,之所以能够工作,是因为继承了接口。 点击进入我的博客 我觉得本章名字改成容器似乎更好理解,持有对象让人感到一头雾水我们需要在任意时刻和任意位置创建任意数量的对象,所以依靠创建命名的引用来持有对象已经满足不了需求。Java可以用数组和其他容器类来(List、Set、Queue、Map)来解决这个问题,不同的容器...

    newtrek 评论0 收藏0
  • Java编程思想笔记14.类型信息

    摘要:接口与类型信息关键字的一种重要目标就是允许程序员隔离构件,进而降低耦合性。如果你编写接口,那么就可以实现这一目标,但是通过类型信息,这种耦合性还是会传播出去接口并非是对解耦的一种无懈可击的保障。 点击进入我的博客 运行时类型信息使得你可以在运行时发现和使用类型信息,主要有两种方式: 传统的RTTI,它假定我们在编译时已经知道了所有的类型; 反射机制,它允许我们在运行时发现和使用类的...

    Hwg 评论0 收藏0
  • Java编程思想——知识卡片01_02

    摘要:堆栈位于通用随机访问存储器中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存若向上移动,则释放那些内存。创建程序时,系统必须知道存储在堆栈内所有项的确切声明周期,以便上下移动堆栈指针。 写在前面 首先我想说的是 Java编程思想——知识卡片 将是一系列文章,文章的内容是我阅读《Java编程思想》这本书的心得体会,那么我为什么要写这一系列的文章呢?原因有一...

    Lyux 评论0 收藏0

发表评论

0条评论

taohonghui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<