《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中基础类型直接不经引用直接被使用,每一个基本类型都有对应的包装器类型。他们对应包装器类型如下:
基本类型 | 包装器类型 | 描述 |
---|---|---|
boolean | Boolean | 布尔值,true or false |
char | Character | Unicode字,两字节 |
byte | Byte | 字节,一字节,_int8 |
short | Short | _int16 |
int | Integer | _int32 |
long | Long | _int64 |
float | Float | 单精度浮点数 |
double | Double | 双精度浮点数 |
void | Void | 空 |
三、注释与文档
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 | 参数 |
@return | description |
@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。
相关文章推荐
- 《Thinking in Java》狗血的学习笔记-2表达式与控制流程
- 《Thinking in Java 》学习笔记 --- Java内存分配,对象存放到什么地方?怎么放?
- thinking in java 第三版 学习笔记(第2章 一切都是对象)
- Thinking in java学习笔记之持有对象总结
- 《Thinking in Java》狗血的学习笔记-3初始化
- 《Thinking in Java》学习笔记-----第2章 一切都是对象
- 《Thinking in Java》学习笔记-----第1章 对象导论
- Thinking in Java [Java编程机制] 学习笔记 -- 变量和对象
- 【1】.thinking in java 学习笔记
- java学习笔记2-thinking in java
- 学习《Thinking in java》笔记二
- 《thinking in java》学习笔记1
- 【Think in Java】学习笔记_Class对象
- thinking in java 14章 类型信息 学习笔记
- 《thinking in java》学习笔记10
- Thinking in UML 学习笔记(一)——建立对象模型
- day3 part1:《Thinking in Java》笔记第二章---一切都是对象
- Thinking in UML 学习笔记(一)——建立对象模型
- 《Thinking in Java》笔记 - 第二章 - 一切都是对象
- 《thinking in java》学习笔记3