万物皆对象
万物皆对象(1)
java中的一切都是对象
java中被操作的时对象的引用(通过引用改变对象)
java不是按引用传递,java是按值传递引用(https://www.journaldev.com/3884/java-is-pass-by-value-and-not-pass-by-reference)
引用可以独立于对象本身存在,所以安全的做法是创建引用的时候做初始化动作
万物皆对象(2)
通常,使用“new”操作符创建对象。
数据的分布及内存的分配:
- 寄存器
- 栈:需要考虑存于其上的数据的生命周期,这限制了程序了灵活性。java的对象引用存储在栈中,但是对象本身存储在堆中
- 堆:RAM中的一个通用的内存池,对象存在的区域,编译器不需要考虑存储对象的生命周期,但是创建和清理堆存储的时间要长于栈存储。
- 常量存储
- 非RAM存储:对象的另一种存储方式(如流对象和持久对象)
原始类型(基本类型):
直接持有值的变量,存储在栈中,高效创建和释放。
java定义了基本类型的大小,在不同的机器架构中类型大小不变,这也是java易于移植的一个原因。
高精度数字类型:BigInteger(支持任意精度整数)和BigDecimal(支持任意精度的固定点书,可以用于算钱)
数组:
- C/C++中的数组只是内存块,若程序使用数组时超出内存范围或使用前未初始化数组,将会导致意想不到的后果。
- java中以一定的内存开销来进行数组范围和数组索引的检查,以提高数组使用的安全性和使用效率;
- java中的数组存放的是引用的数组,每个引用初始化指向null;
- java中基本类型的数组内存为0。
万物皆对象(3)
范围:命名的范围由花括号决定,不允许使用局部变量隐藏全局变量的语法(C/C++)。
对象的范围:
- 与基本类型的范围不一致,对象可以存在于作用域之外。
- 至于 new所创建的对象所占用的内存都将由垃圾收集机制(GC)进行统一释放。
- GC计算new所创建的对象是否已经没有引用指向了。
万物皆对象(4)
用class关键词创建新的类(对象的集合)。使用new创建新的对象。
类中有成员数据和成员方法,访问成员数据或修改成员数据使用连接句点。
类中字段若是基本类型会初始化。然而局部变量并不会初始化。
初始化表
Primitive type |
Default |
boolean |
false |
char |
‘\u0000’ (null) |
byte |
(byte)0 |
short |
(short)0 |
int |
0 |
long |
0L |
float |
0.0f |
double |
0.0d |
万物皆对象(5)
方法的构成:方法名,参数,返回值和方法体。
方法名和参数列表构成了方法签名。
return,参数类型和参数名。
无return值用void注明。此时return仅做离开方法的用途
万物皆对象(6)
构建java程序前的准备工作:
命名可见
使用其他组件的方式:
- 调用当前源文件中的预定义类。
- 使用import调用其他源文件中的预定义类。
startic关键词:单独唯一的字段存储和与对象无关的方法调用。
万物皆对象(7)
注释:
C风格:/*……*/
C++风格://
注释文档提取工具:javadoc
注释文档工具助手:doclets
javadoc使用规范:所有javadoc指令都存在于/**……*/。
两种使用javadoc的方式:
- 内嵌式HTML
- doc tags
doc tags形式:
- 独立文档标签:以@开头的指令
- 行内形式:@开头,用花括号包围。
有三大类注释:类注释、方法注释、字段注释(在什么前就是什么注释)
例:
/** A class comment */
public class Documentation1 {
/** A field comment */
public int i;
/** A method comment */
public void f() {}
}
javadoc仅仅会处理public和protected修饰的成员
可以使用-private在使javadoc处理所有的成员
嵌入式的HTML:格式化注释
例:
/**
* <pre>
* System.out.println(new Date());
* </pre>
*/
/**
* You can <em>even</em> insert a list:
* <ol>
* <li> Item one
* <li> Item two
* <li> Item three
* </ol>
*/
注:别使用<hr>或<h1>等标签以避免混淆
一些tag示例
@see:参阅其他的类中的注释,生成“see also”超链接
{@link package.class#member label}:行内使用,功能同@see
{@docRoot}:相对根路径的相对路径
{@inheritDoc}:文档继承
@version:版本信息
@author:作者信息
@since:jdk特性版本
@param:参数信息
@return:方法返回值信息
@throws:异常抛出信息
@deprecated:方法弃用标签,自Java SE5之后,被@Deprecated所取代
⚠️idea生成javadoc:Tools —— Generate JavaDoc
万物皆对象(8)
代码风格:类首字母大写,成员量首字母小写,采用驼峰命名样式
例:
class AllTheColorsOfTheRainbow { // ...
class AllTheColorsOfTheRainbow {
int anIntegerRepresentingColors;
void changeTheHueOfTheColor(int newHue) {
// ...
}
// ...
}
下一篇: Python演化计算基准函数详解