对象操纵
创建一个String 引用,用于保存单词或语句,这里我们只创建了一个 String 对象的引用。
String s;
通常更安全的做法是:创建一个引用的同时进行初始化,例如:
String s = "asdf";
对象创建
“引用”用来创建“对象”,在Java中,我们通常使用new 操作符来创建一个新对象。
new关键字代表:创建一个新的对象实例,例如前面的代码也可以这样写:
String s = new String("asdf");
数据存储
Java确定了每种基本类型的内存占用大小。
基本类型有自己对应的包装类型,如果你希望在堆内存里表示基本类型的数据,就需要用到它们的包装类。代码示例:
char c = 'x';
Character ch = new Character(c);
或者你也可以使用下面的形式:
Character ch = new Character('x');
基本类型自动转换成包装类型(自动装箱)
Character ch = 'x';
相对的,包装类型转化为基本类型(自动拆箱):
char c = ch;
类的创建
类型:
通常在 class 关键字的后面的紧跟类的的名称。如下代码示例:
class ATypeName {
// 这里是类的内部
}
在上例中,我们引入了一个新的类型,尽管这个类里只有一行注释。但是我们一样可以通过 new 关键字来创建一个这种类型的对象:
ATypeName a = new ATypename();
字段:
当我们创建好一个类的时候,我们可以往里面存放两个类型的元素:方法(method) 和字段(field) 。
类的字段(field)可以是基本类型,也可以是引用类型。
如果类的字段是对某个对象的引用,那么必须要初始化该引用将其关联到一个实际的对象上(通过之前介绍的创建对象的方法)。
下面是一个具有某些字段的类的代码示例:
class DataOnly {
int i;
double d;
boolean b;
}
我们可以通过下面的代码来创建它的一个对象:
DataOnly data = new DataOnly();
我们必须通过这个对象的引用来指定字段值:
data.i = 47;
data.d = 1.1;
data.b = false;
方法使用
在许多语言(如 C 和 C++)中,使用术语 函数 (function) 用来命名子程序。在 Java 中,我们使用术语 方法(method) 来表示“做某事的方式”。
在 Java 中,方法决定对象能接收哪些消息。方法的基本组成部分包括名称、参数、返回类型、方法体。格式如:
[返回类型] [方法名](/* 参数列表 */){
// 方法体
}
返回类型
方法的返回类型表明了当你调用它时会返回的结果类型。
我们可以像下面这样调用一个对象的方法:
[对象引用].[方法名](参数1, 参数2, 参数3);
若方法不带参数,例如一个对象引用 a 的方法 f 不带参数并返回 int 型结果,我们可以如下表示:
int x = a.f();
参数列表
例如代码:
int storage(String s) {
return s.length() * 2;
}
此方法计算并返回某个字符串所占的字节数。参数 s 的类型为 String 。调用 length() 方法,它是一个 String 方法,返回字符串中的字符数。
如果我们不想方法返回数据,则可以通过给方法标识 void 来表明这是一个无需返回值的方法。 代码示例:
boolean flag() {
return true;
}
double naturalLogBase() {
return 2.718;
}
void nothing() {
return;
}
void nothing2() {
}
第三个和第四个一样,return仅仅起到了退出方法,可以省略。
static关键字
通常只有在使用 new 创建那个类的对象后,数据存储空间才被分配,
- 有时你只想为特定字段(注:也称为属性、域)分配一个共享存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建对象。
- 创建一个与此类的任何对象无关的方法。也就是说,即使没有创建对象,也能调用该方法。
static 关键字(从 C++ 采用)就符合上述两点要求。
我们可以在类的字段或方法前添加 static 关键字来表示这是一个静态字段或静态方法。 代码示例:
class StaticTest {
static int i = 47;
}
现在,即使你创建了两个 StaticTest 对象,但是静态变量 i 仍只占一份存储空间。两个对象都会共享相同的变量 i。 代码示例:
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
引用静态变量有两种方法。
- st2.i
- 通过类名直接引用它,这种方式对于非静态成员则不可行:StaticTest.i++
使用类名直接引用静态变量是首选方法,因为它强调了变量的静态属性。
编码风格
- 要求类名的首字母大写。
- 如果类名是由多个单词构成的,则每个单词的首字母都应大写(不采用下划线来分隔)例如:
class AllTheColorsOfTheRainbow {
// ...
}