本文目录一览:
- java的小问题,见笑,若能详细解答,30分送上
- [Java代码编程 经典的兔子问题?](#Java代码编程 经典的兔子问题?)
- java问题,重赏!
java的小问题,见笑,若能详细解答,30分送上
String
在 Java 里是比较特殊,虽然 String
是类,一般类的话都要 new
一个对象才能用,但是 String
的用法可以像基本数据类型如 int
,可以直接赋值。当你这样直接赋值时,传递的是值传递而不是引用传递,所以你后面修改了,原来的 str
还是原来的值。其实 String
是不能修改的,如果你重新给 String str
赋值,系统就会新建一个 String
对象来存放新的值,而 str
就指向新的值,原来的值则已经没有指针再指向它,所以直接被回收。
如果你写成 String str = new String("ss");
,然后你传递 str
,改值后看看结果,还是没变。
在 for
循环里:
先是 foo('a')
,调用一下输出为 a
,返回 true
,然后还不能往下,还要先比较 foo('b')(i2)
。
foo('b')
输出 b
,返回 true
,true
的话继续 i2
,此时 i=0
;也为 true
,所以可以执行下面的代码:
i++; //i=1
foo('d') //输出d,返回true
然后是 foo('c')
//输出 c
,返回 true
。
接下来在进入 foo('b')(i2)
比较,foo('b')
输出 b
,返回 true
,i2
也返回 true
,i
为 1
吗?
然后再继续:
i++; //i=2
foo('d') //输出d,返回true
再 foo('c')
//输出 c
,返回 true
。
在进入 foo('b')(i2)
比较 i == 2
,已经不在小于 2
,所以为 false
,退出 for
循环。
Java代码编程 经典的兔子问题?
这是斐波那契数列的问题。 可以用递归,也可以用循环。
递归
public class Demo3 {
// 使用递归方法
private static int getFibo(int i) {
if (i == 1 || i == 2)
return 1;
else
return getFibo(i - 1) + getFibo(i - 2);
}
public static void main(String[] args) {
System.out.println("斐波那契数列的前20项为:");
for (int j = 1; j <= 20; j++) {
System.out.print(getFibo(j) + "\t");
if (j % 5 == 0)
System.out.println();
}
}
}
循环
public class Demo2 {
// 定义数组方法
public static void main(String[] args) {
int arr[] = new int[20];
arr[0] = arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
System.out.println("斐波那契数列的前20项如下所示:");
for (int i = 0; i < arr.length; i++) {
if (i % 5 == 0)
System.out.println();
System.out.print(arr[i] + "\t");
}
}
}
java问题,重赏!
很经典的例子。
其他的我想楼主应该都清楚了,主要还有一点。
初始化一个类的时候,当进入该类构造函数后:
在构造函数里面,首先要检查是否有 this
或者 super
调用,this
调用是完成本类本身的构造函数之间的调用,super
调用是完成对父类的调用。二者只能出现一个,并且只能作为构造函数的第一句出现。在调用 this
和 super
的时候实现程序的跳转,转而执行被调用的 this
构造函数或者 super
构造函数。
在 this
和 super
执行完毕,程序转而执行在类定义的时候进行的变量初始化工作。
这个执行完毕,才是构造函数中剩下的代码的执行。
所以,new
一个类的时候,会先调用类中的 this
、super
调用,等他们执行完毕,才会初始化变量。