题目:编写一个程序,让它含有本章所定义的storage()方法的代码段,并调用之。
含有storage()方法的代码段在P27面。
int storage(String s) {
return s.lenght()*2;
}
该方法参数类型是string,返回类型是int
程序非常简单,代码如下:
public class test2_6 {
public static void main(String[] args) {
String str = "ashudhck";
int a = new test2_6().storage(str);
System.out.println(a);
}
int storage(String s) {
return s.length()*2;
}
}
注意,在静态方法里调用非静态方法时要先实例化非静态方法所在的类,否则即使它们是同一个类的成员方法,也不能直接调用。
在这里storage方法返回的是需要多少字节才能容纳传入的string对象。
s.length()方法是String类的方法之一,我们来看一下源码:
/**
* Returns the length of this string.
* The length is equal to the number of <a href="Character.html#unicode">Unicode
* code units</a> in the string.
*
* @return the length of the sequence of characters represented by this
* object.
*/
public int length() {
return value.length;
}
注释说它返回的是调用该方法的string对象的长度,不过直接看源码看不出来,我们看一下value:
private final char value[];
value是一个char数组
查看API中关于String的介绍我们会发现这样几段话:
For example:
String str = "abc";
is equivalent to:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
所以String对象存储字符串就是用一个char数组把每个字符逐一存入。length()方法实际求的是char数组的长度。
这个题目也是非常简单的,我们在翻看书本相关内容时会注意到这样一句话:若返回类型是void,return关键字的作用只是用来退出方法。因此没有必要到方法结束才离开,可以在任意地方返回。
public class test2_6 {
public static void main(String[] args) {
String str = "ashudhck";
new test2_6().storage(str);
}
void storage(String s) {
int a = s.length()*2;
// return;
// a++;
for (int i = a ; i < 100; i++) {
if (i == 50) {
return;
}
System.out.println(i);
}
}
}
注释部分编译器报错,显然return后面不能直接接其他代码。
我们将return放到循环判断语句中,程序顺利运行,控制台输出到49就中断了,显然刚好验证了书本的话:可在任何地方返回,在这种情形下return作用与break类似。不过两者肯定是不一样的。
以上。