第1个回答 2010-11-27
选择题
2.ADE
问什么不选B?
答:本来不想讲,不过我估计很多人都不理解,所以还是讲一下吧。
内存管理员就相当于一个大老板,Vecter v;这句声明就相当于开口向大老板借钱。"大老板借不借给你呢"就是现在的问题。如果我是老板,你找我借钱,除非你的确是需要,我才会借给你。否则我借给你了,但是你不用这笔钱,那我可亏了。来看下面这个例子:
public static FileInputStream getStream(){
FileInputStream fis;
try{
fis=new FileInputStream("");
}catch(IOException){}
return fis;//ERROR:没有对变量fis进行初始化。
}
大家可以试试看这个方法能不能编译,如果能通过,你是高手。由于fis变量的声明并不分派内存,甚至指针的内存,所以你根本不能使用fis。这里的声明只是告诉编译器有这么个东西。你应当把第一句改为FileInputStream fis=null;,这是因为只有进行赋值才会分派内存,null代表内存地址为0。
下面这个例子一个意思:
public class test{
public static void main(String... args){
int i;
if(i=0)
System.out.println("牛人!");
}
}
这个例子同样是错的,原因就在声明变量并不会赋予内存。
接下来可能有人会问了,下面这种情况算什么:
public class fieldtest{
public int getField(){return field;}
private int field;//这里没有赋予初值!!!
public static void main(String... args){
System.out.println(new fieldtest().getField()*10);
}
}
这个类里的域(成员变量)没有赋予初值,但是程序依然正确执行,这是问什么?这是因为类的域变量会有编译器自动进行初始化操作,相当于private int field=0;。而类型为类的域会初始化为null,boolean为false等等不再细说。其实在编译的时候编译器还会帮我们进行一定的优化:
int i;
System.out.println("");
i=0;
System.out.println(i);
编译后这段代码会变为:
System.out.println("");
int i=0;
System.out.println(i);
由于变量只是声明没有什么意义,所以编译器会把变量的声明调到第一次赋值的地方。这样做当然使我们的程序更有效率。
将到这里,相信大家对于变量的声明与赋值一定有了很深刻的认识,其实当然还有更深入的内容,不过我能力有限,不能再多讲了。
程序:
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public void startGame(){
while(true){
number=robot.getRandomNumber();
for(User user:users){
user.guess();
if(number==user.getGuess()){
System.out.println("Oh, you win, "+user.getName()+"! Congratulation!");
System.out.println("Next game?(Y/N):");
Scanner scan=new Scanner(System.in);
if(scan.next().equals("Y")){
continue;
}else{
break;
}
}
}
System.out.println("Oops, nobody got it, would like to try again?(Y/N)");
Scanner scan=new Scanner(System.in);
if(!scan.next().equals("Y"))
break;
}
}
private Robot robot=new Robot();
private int number;
private User[] users=new User[]{new User("Piter"),new User("Nathan"),new User("Beata")};
public static void main(String[] args){
GuessNumber gn=new GuessNumber();
gn.startGame();
}
private static final class Robot{
public int getRandomNumber(){
Random random=new Random();
return random.nextInt(10)+1;
}
}
private static final class User{
public User(String name){
this.name=name;
}
public String getName(){
return name;
}
public void guess(){
System.out.println("Your turn, "+name+", please guess a number:");
Scanner scan=new Scanner(System.in);
guess=scan.nextInt();
}
public int getGuess(){
return guess;
}
private String name;
private int guess;
}
}
第2个回答 2010-11-26
1,DataoutpuStream st=new DataoutputStream(System.in);
int i=0;
String str[]=new String[10];
for(i;i<10;i++){
str[i]=st.getBytes();
}
for(i=9;i>0;i--){
system.out.pring(st[i]);
}
2.
int sum=o;
for(int i=10;i<=20;i++){
sum=sum+i;
}
3麻烦,太多!
4,String[][] str = new String[9][9];
5,数组下标
6,没赋值前null
7,对象创建之后不能改变,下标从0开始
8,t.length = 2 t[0].length = 3