我们如何操作对象:
我们通过引用来控制对象。就好比遥控器控制电视。引用就是遥控器,对象就是电视机。我们操纵对象,实际上是操作引用。我们并不直接操作电视机,而是操作遥控器从而控制电视机。
此外,就算没有电视机(对象),我们可以创建遥控器(引用)。只不过这时候遥控器(引用)不能控制任何电视机(对象)。如果此时要使用遥控器(引用),则编译器会报错。
你可以这样创建一个引用:String s;
引用如何和对象连接:
利用new关键字来新建一个对象。
String s = new String("a");
对象一般存储在什么地方:
1、寄存器:速度最快,因为位于处理器内部,但是数量有限。
2、堆栈:位于通用RAM中,速度仅次于寄存器。编译器必须知道确切地生命周期,以便上下移动堆栈指针。引用就放在堆栈中。
3、堆:通用内存池(RAM中),需要更多时间,编译器不需要知道确切的生命周期。对象就放在堆中。
4、常量存储:直接放在程序代码内部。
5、非RAM存储:数据在程序之外。分为流对象和持久化对象。
流对象:对象转化为字节流,发送个另一台机器。
持久化对象:对象被存放在磁盘上。
类的特例:基本类型
为什么要有基本类型:
有一系列类型需要经常使用,如果橡其他对象一样放在堆中创建,则需要耗费大量时间。所以直接创建这些基本类型的值,并存放在堆栈中。
基本类型的一些特性:
类型 | 占用存储空间 | 表数范围 | 默认值 | 包装器类型 |
Boolean | -- | true/false | false | Boolean |
char | 2字节(Unicode 编码) | 字符 | ‘\u0000’(null) | Character |
byte | 1字节 | -128~127 | (byte)0 | Byte |
short | 2字节 | -2^15~2^15-1 | (short)0 | Short |
int | 4字节 | -2^31~2^31-1 | 0 | Integer |
long | 8字节 | -2^63~2^63-1 | 0 | Long |
float | 4字节 | -3.403E38~3.403E38 | 0.0f | Float |
double | 8字节 | -1.798E308~1.798E308 | 0.0d | Double |
void | -- | -- | -- | Void |
所有类型都有正负号,没有无符号的类型
所有类型都有包装器类型。
除了表格中的类型,还有BigInteger和BigDecimal两个包装器类型,分别代表int和float,专门用于高精度计算。
数组:一组对象的引用
Java会确保数组会被初始化,而且不能再范围之外访问。
当我们创建了一个对象数组的时候,我们实际上是在创建一个引用数组,初始时,每个引用都指向null。如果试图使用还是null的引用,Java就会报错。
变量的生命周期:作用域
作用域决定了变量的生命周期。在Java中作用域由花括号{}决定,即变量只会存在于{}内部。
{
int y = 1;
{
int x = 2;
}
int z = y + x;//编译出错,因为变量x只存在于{}中。
}
对象的生命周期:
开始:
当我们创建了一个引用(变量),并把它指向一个new出来的对象时,这个对象的生命周期就开始了。然而在引用(变量)的作用域结束时,引用(变量)消失,对象仍然存在。
结束:
只要还有引用指向该对象,该对象就不会消失。只有没有引用指向该对象时,该对象才会消失。然而真正是什么时候消失是由垃圾收集器控制的。
也就是说你只需要创建对象,而不需要关心什么时候消灭对象,即释放内存。
什么决定了对象的类型(特性):类
类由两个方面组成:变量和方法(没有也行)
class A {}
A a = new A();
这样也可以定义一个类,但这样的类没什么意义。
字段(变量):
当对象在定义一个字段(不是方法内的变量)时,Java会给它一个默认值。如果是方法内的变量,则不会自动初始化。
方法:
参数:传递给方法的信息
返回值:方法返回的信息,利用return关键字进行返回,可以返回void(空值)。
方法名:方法调用时所用的名称
方法体:具体实现
ReturnType methodName(/* Argument list */) {
/* Method body */
}
方法调用必须通过对象来调用。
int x = a.f();//a为对象,f()为该对象内的方法,x为返回类型。
类名冲突:
一个程序往往由多个人编写,一个人编写的类中可能与其他人编写的类名相同。那么程序该如何辨别这两个类。
打包:
Java使用了包机制,即使用域名的,即使反过来使用域名。例如baidu.com就可以使用com.baidu.util。一般包名都是小写。
package com.baidu.util; //这句话一定要放在程序第一行
如何在程序中引用其他包:
使用import关键字
import com.baidu.util.*; //引用这个包中所有的类,这种方式比较常用。
或 import com.baidu.util.A; //只引用这个包中的类A
static:
为什么要static:
一般来说,只有在堆中创建一个类之后才能访问类中的字段和方法。但有时候我们并不想创建对象,只想调用一个变量或方法。
其次,每个相同类型的对象都有自己的字段或方法,而有时候我们会想要这些相同类型的对象共用一个变量或方法。
static变量的使用:
直接用类名 如:A.f();
也可通过对象调用:a.f();
注释:
//:只注释当前行
/* */:注释中间内容
/** */:用于产生注释文档
必须放在所要注释内容的前面
可以内含HTML代码,但不要放入<h1>或<hr>
只能对public和protect的变量和方法进行文档注释
每一行开头的星号和第一个空格会被忽略。
标签:
@see:引用其他类,生成一个See Also
{@link package.class#member label}:使用label而不是SeeAlso
{@docRoot}:产生到文档根目录的绝对路径
{@inheritDoc}:从这个类最直接的基类中继承相关文档到当前文档的文档注释中
@version:版本信息
@author:作者信息
@since:指定代码最早使用的版本
@param:参数
@return:返回值
@deprecated:表示该方法已抛弃
@throws:异常
编码风格:
类名首字母要大写,如果由多个单词组成,则每个单词都要大写
其他的首字母小写,其他一样。