您的位置:首页 > 编程语言 > Java开发

《Thinking in Java》狗血的学习笔记-1对象

2014-07-02 22:13 375 查看

一、一切都是对象

在Java中,一切都是对象。不存在全局变量、全局函数等东西。除了基础类型外,所有的对象都通过“引用”来获取并使用。这些引用存在于堆栈区,受到严格的生存期限制;而对象则通过new在堆中创建,生存期在离开使用范围后不结束,仍在堆中,直到垃圾回收器进行清理。于是,传入方法的参数中,基础类型为值传递,而对象则传递其引用。这可以看做是将引用的通过值传递值传递给方法参数中的新的引用,所以也可以说Java中所有的参数传递都是通过值传递。

这种机制有这很明显的好处。一方面是程序猿不用操心对对象的生存期进行精心的管理(当然,C++中也可以实现智能指针);另一方面避免了许多在传递参数、返回值过程中由于生命期导致的麻烦(当然,C++有右值引用了)。还有在语言上,实现了完全的面向对象化。

二、Java对象

Java中对象可以储存在这些位置:1)寄存器 2)堆栈 3)堆 4)常量储存 5)非RAM储存
所有的对象都需要通过new的方式来显示创建。使用new在堆中创建一个对象,然后将其与引用相关联,没有关联对象的引用的值为null。对象有其作用域,作用域和C++一样,大括号之间。
Java允许用户自定义对象类型,即class。一个类包含字段(数据成员)和方法(成员函数),和C++相似。但是当类被实例化时,其对象会被默认初始化(如果没初始化的话)。而局部变量(数组除外)的基本类型则不会被默认初始化。所有的引用都会被自动初始化为null。
Java的命名提倡使用“驼峰”命名。类的第一个字母大写,字段方法第一个字母小写。比如:
class ANewClass,int numberOfObject,void getName()。
在Java中基础类型直接不经引用直接被使用,每一个基本类型都有对应的包装器类型。他们对应包装器类型如下:

基本类型包装器类型描述
booleanBoolean布尔值,true or false
charCharacterUnicode字,两字节
byteByte字节,一字节,_int8
shortShort_int16
intInteger_int32
longLong_int64
float Float单精度浮点数
doubleDouble双精度浮点数
voidVoid
高精度数字: BigInteger 任意精度整数,BigDecimal 任意精度定点数。

三、注释与文档

Java中注释有三种方式。
① // 行内注释, C++风格
② /* 多行注释
* C风格
*/
③ /** 文档注释
*/
Java为了方便文档的维护,将代码与文档穿插在一起。其中 /** */表示一段文档。这些文档可以通过特定的工具,如javadoc提取,并生成对应的文档(比如一个HTML)。文档的语法如下:
/** 类注释 */
public class ABC {
/** 字段注释 */
public int i;
/** 方法注释 */
public void foo() {}
}
文档注释只可以为public、protected类和成员进行注释,对private的注释会被忽略(可以用-private标记,是的不被忽略)。
文档注释中可以加入html标签来进行格式化排版。
在文档注释中,如果一行中除了前导*和空白外,第一个字符为@,则此行为一个标签,比如:
/**
* @param 参数名 参数的说明
*/
常见的文档标签:

标签描述
@see应用其他类
{@link}行内超链接
{@docRoot}产生标签到文档根目录的相对路径
{@inheritDoc}从这个类最直接基类中继承相关文档到当前文档
@version版本信息
@author作者
@since最早使用版本
@param参数
@returndescription
@thows抛出异常信息

四、第一个程序

/** 整个程序的入口类 */
public class Main {
/** 程序的入口
* @param args 命令行参数
*/
public static void main(String[] args) {
System.out.println("Hello World!");
}
}


这个程序输出”Hello World“。

这个程序位于Main.java中,这是由于Java要求每一个文件中,有且只有一个public类,并且该类名字与文件名相同。而作为程序的入口的main函数必须在该类中,作为静态、公开方法,采用签名 main(String[] args)

程序为了输出Hello World信息,需要用到 java.lang中的类System。而所有的java程序中,都已经默认导入了java.lang.*。其中*表示所有的类,同时导入一个类库中的所有类,以方便使用。

main作为Main中的static方法, 不需要实例化Main就可以使用。使用一个静态的方法或字段,既可以用”Instance.Field/Method“的方式,也可以用”Class.Field/Method"的方式。后者有着更好的可读性,也有利于编译器优化。

写完程序后,用javac Main.java进行编译,得到Main.class字节码文件。然后可以用java Main(没有class)运行。导出文档可以用 javadoc Main.java。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: