类
如果在Java中一切都是对象,那么是什么决定了某一类对象的行为与特征呢?或者确定对象的类型呢?Java中使用class关键字来表示“我准备告诉你一种新类型的对象看起来像什么样子”。class这个关键字后面紧跟新类型的名称。
例如
class ATypeName
{
/*Class body goes here*/
}
这样就引入了一种新的类型。虽然这个对象并不具备任何作用,但我们已经可以使用new来创建这种类型的对象
ATypeName a = new ATypeName();
但是,在定义该类型所持有的方法之前,他还不能做太多事(或者说,不能向他发送任何有意义的信息)
字段和方法
一但定义了类,就可以在类中定义两种类型的元素:字段(数据成员)和方法(成员函数)。字段可以是任何对象,也可以是基本数据类型。如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象(new)相关联。
每个对象都有用来存储其字段的空间,普通字段不能再对象间共享
class DataOnly{
int i;
double d;
boolean b;
}
尽管这个类只有字段,但我们依然可以去实例化它
DataOnly data=new DataOnly();
我们可以给对象内的字段赋值,具体实现为对象引用的名称后面紧接这一个点,但后市对象内部成员名称
objectReference.member
例如
data.i=47;
data.d=1.1;
data.b=false;
想修改的数据也有可能位于对象所含的其他对象中,这种情况,只需要在使用连接据点即可
例如
myPlane.leftTank.capacity=100;
基本成员默认值
若类的某个成员是基本数据类型,即使没有进行初始化,Java也会给其一个默认值
基本类型 | 默认值 |
boolean | false |
char | ‘\u0000’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
当变量作为类的成员使用时,Java才确保给定其默认值,以确保那些是基本类型的成员变量得到初始化,防止程序错误。但是这些初始值也许并不是程序想要,因此最好明确的对变量进行初始化。
默认值并不适用于局部变量,即非某个类的字段。例如在某个方法中有:
int x;
那么这里的x可以得到的是任意值,而不会被自动初始化,因此在使用之前应先对其赋值,若忘记这么做,Java会在编译时返回一个错误。
方法、参数和返回值
在Java中方法这个术语表示“做某些事情的方式”。类似于函数。
Java的方法体决定了一个对象能够接收什么样的消息。方法的基本组成部分包括:名称,参数,返回值和方法体,基本形式如下
ReturnType methodName(/* Argument list*/){
/* Method body */
}
返回类型是指在调用方法之后从方法返回的值。参数列表给出类要传递给方法的信息的类型和名称。方法名和参数列表唯一地标识出某个方法。
Java中的方法只能作为类的一部分来创建。方法只有通过对象才能被调用(非static方法),且这个对象必须能执行这个方法的调用,如果对用的方法不存在与这个对象上,编译时就会得到一条错误消息。方法的调用,需要先列出对象名,紧接着是句点,然后是方法名和参数列表。如:
objectName.methodName(arg1,arg2,arg3);
例如,建设有个方法f(),不带任何参数且返回值类型为int。如果有个对象a,且可以通过a调用f(),那么就可以写成
int x=a.f();
返回值的类型必须要与x的类型兼容。
这种调用方法通常被称为发送消息给对象。
参数列表
方法的参数列表决定放法要接受什么样的数据,而这些数据在java中都采用的是对象形式传递。因此,参数列表中必须明确的的给出对象的类型及名字。且在调用方法是参数类型和顺序不能写错,否则编译器将抛出错误。
假设某个方法接受String为其参数,写法如下
int storagr(String s){
return s.length()*2;
}
这个方法告诉你要有多少个字节才能容纳所传入的字符串对象中的信息(字符串中的每个字符的尺寸都是16位或2个字节,以此来提供对Unicode字符集的支持)。此方法的参数类型是String,参数是s,在这里s一但被传入就可以将它视为其他对象一样被操作(传递信息),这里调用了s的length()方法,这个方法是返回字符串包含的字符个数。
上面的例子中还可以看到return关键字的用法。它有两个含义1,已经完成,离开此方法。2,如果此方法产生一个值,这个值要放在return 语句后面。
可以定义方法返回任意想要的值,如果不想返回任何值,可以规定该方法返回void(空)
boolean flag(){return true;}
void noting(){return;}
void noting2(){}
若返回值是void,return关键字就只是用来退出方法的。因此,没有必要到方法结束时才离开,如果返回类型不是void,那么无论何如return,编译器都需要一个正确类型的返回值。