java 小题目.求解释. 答案为B 谢谢各位了

JAVA小题目,请解释一下~

Math.random()产生一个0.0~1.0之间的随机数,然后将这个随机数乘以40,得到的一个double型的值,最后利用(int)转换,把double型的值转换成int型的,再最后把转换好的值赋给x。
满意请采纳。

我来解释一下吧,我不知道你的水平,所以可能讲的比较罗嗦了点,希望你能有所收获:
1 java程序的运行原理和编译执行一个java程序的步骤:
java程序是通过java虚拟机解释,将其中的代码(字节码)翻译为具体的操作指令来执行的。
假设要编译并执行位于d:\javademo目录中的Test.java:

一、首先设置classpath和path环境变量: 在我的电脑上点右键 > 属性 > 高级 > 环境变量 > 上面一半的部分是当前用户的环境变量,只对当前用户适用,用其它用户登录后就变为另一个用户的环境变量内容了。下面一半是整个系统的环境变量,对电脑中的每个用户都适用。建议设置系统的环境变量 > 新建 > 变量名填classpath,变量值填一个英文句号(.),注意要是英文的句号 > 确定 > 设置path变量,path变量是已经存在的,我们只要找到该变量名(这里名称是大小写无关的,PATH、path、Path,只要找到就行),双击它或点击它之后点编辑按钮 > 在变量值一栏中的最前面(注意不要将原先的值删掉)加上你的java安装目录下的bin目录的路径,然后加一个英文分号。如你的java安装路径是c:\java,那么这里要加上“c:\java\jdkxxx\bin;(这后面是原先的值)”(这里的jdkxxx会因为你安装的版本不同而不同,所以你要自己查一下) > 完成之后一直点确定就行了

这里讲一下环境变量的作用:环境变量又叫系统变量,和我们程序中的变量类似,是储存一些系统运行期间经常用到的值的,操作系统或应用程序如果需要用到环境变量,它可以根据环境变量的变量名(如刚才定义的classpath)来查找对应的值(如刚才的英文句号)。
那classpath到底是干嘛的呢?它是给java虚拟机用的,当我们需要运行一个java程序时,java虚拟机查找classpath变量的值,根据这些值定位java程序所在的位置,刚才定义的英文句号的意思是命令行所处的当前目录,下面例子中会详细讲到。
(以上的环境变量只要设置一次,以后再编译或运行java程序时就不用再重复设置了)

二、然后打开命令行:开始菜单 > 运行 > 输入cmd后确定

将目录切换到java文件所在的位置,输入以下命令(输入一行命令按一次回车键):
d:
cd javademo

解释:
d: 的作用是切换盘符
cd javademo 的作用是切换目录,该目录只能在当前盘符下进行目录切换,如果在c盘下输入cd d:\javademo是没有效果的,必须先将盘符切换到d盘。该命令可以一次切换多层目录,如在d盘根目录下要切换到d:\a\b\c目录下,可以写cd a\b\c,就几层写几层就行了。

三、编译java程序
经过前一步,当前目录已经是Test.java所在的目录了,因此我们输入以下命令编译:
javac Test.java
这一步命令是大小写无关的,因此也可以输入javac test.java。但注意,文件本身的文件名是大小写有关的,只是输入这个命令的时候可以忽略它的大小写(见第五步)。

四、执行java程序
第三步编译后会生成一个Test.class文件,输入以下命令载入这个文件并执行它:
java Test
注意,这一步Test是大小写相关的,并且不能加.class后缀,因此不能写成java test 或 java Test.class

五、补充,下面是Test.java的一个样本,可以直接拿来做实验:
import javax.swing.JOptionPane;
public class Test
{
public static void main(String[] args)
{
JOptionPane.showDialogMessage(null, "如果你见到这个,就说明你已经成功了");
System.exit(0);
}
}

说明:这个程序定义了一个公有类叫Test,因此它的文件名必须叫Test.java,包括大小写。如果你改变了类的名字,那么文件名也必须跟着改变。



2.类和对象的关系:
其实只要明白一点:类是我们预先定义好的,它就像一个模板,对象由这个模板来创建,因此由一个类可以“复制”出任意多个对象。
举一个直观点了例子,类就好像印刷时用的模板,每一次印刷都会产生一件印刷品(报纸、书、宣传单等等)。模板本身并不太能胜任“给人看”这样一个任务,首先因为它太重,其次因为它的字是反的。类也一样,我们一般不直接用类来完成一件事情,而是先由它生成一个对象,由对象来执行具体的任务。

3.构造方法又叫构造函数,它的任务是创建它所在类的对象。一个类必须至少有一个构造方法,否则这个类无法创建对象(因此也就没用了)。所以如果我们没有在类中自己定义构造方法,编译器会给我们添加一个(这就保证了任何一个类都能产生对象)。

4.方法重载:
举个例子,你想编写一个方法(或叫函数),它返回传入的两个参数中较大的那个,在c中(c不支持方法重载)你可以这样写:
int larger(int x, int y)
{
if (x>=y)
{
return x;
}
else
{
return y;
}
}

但问题是,这个方法只能完成两个整数的比较,如果我还想传入两个浮点数并返回其中的较大者,在c中只能另外定义一个不同名称的函数,因为两个函数的名称相同在c中是不允许的。
而java中可以利用方法重载方便的解决这个问题,这个double型的方法可以这样写:
double larger(double x, double y)
{
....
}

虽然定义了两个都叫larger的方法,但由于参数的类型不同,所以它们是不同的方法。但是这种不同对使用这个方法的人来说是透明的,也就是说,任何人都可以这样调用:
larger(a, b);
不管a和b是整型或double型,java虚拟机都能够从所有重载的方法中正确选择一个合适的方法来执行。
而在c中,由于不能进行方法重载,编写方法的人必须定义不同的名称来完成相似的功能,例如上面例子中两个方法可能分别叫做intLarger和dblLarger,这样使用方法的人也必须根据参数的不同选择一个方法去调用。

public class VariTest
{
public VariTest()
{
}

static void change(ArrayList<Integer> arraylist)
{
arraylist.add(2);
arraylist = new ArrayList<Integer>();
arraylist.add(3);
arraylist.add(4);
System.out.println("print方法内"+arraylist.get(1));
}

public static void main(String [ ] args)
{
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
change(al);
System.out.println(al);
System.out.println(al.get(1));
}
}
看结果:
print方法内4
[1, 2]
2
过程我试着解释一下,不一定说得清楚。
java中传参时形参为java基本类型时传递的就是值,形参不是基本类型传递的就是地址。上面的形参是一个ArrayList,传递的当然是地址了。
程序先执行main方法,ArrayList<Integer> al = new ArrayList<Integer>();时,会为这个数组分配一片内存,al就指向了这篇内存的首地址。
然后change(al);方法 static void change(ArrayList<Integer> arraylist)中arraylist形参就与al实参指向了同一个地址,则 arraylist.add(2);对对原来的数组也是有作用的。
arraylist = new ArrayList<Integer>();时,arraylist 就指向了另一个新的地址,而al的指向还是没变化的,这就是 arraylist.add(3);arraylist.add(4);不会影响al的原因。
注意实参和形参。

首先明确 引用传递,和值传递的不同,static void print(ArrayList al) 是引用传递,也就是说main中的al和print方法中刚刚传进来的是同一个引用,指向同一个list,所以,add(1),和add(2)都是操作main中的al,在print方法中al=new ArrayList() add(3) add(4) 则是操作另外一个list;在main方法中打印的是第一个list,所以结果自然是2

由于输出的是al.get(1) 数组是从0 开始的 get(1) 相当于去的是数组里的第二个元素
第一个 是 al.add(1); 第二个 是al.add(2); 所以get(1) 是 2 get(0) 是 1

基本数据类型(值类型):int。。。
引用类型:string object。。。
ArrayList 是引用类型,传入方法的实际上是内存地址,当你修改后, al.add(2);
它的下标1的值是2,new一个对象后,是新开辟一个地址存放数据了,你在print方法里打印的话,下标1的值应该是4,
这是我的理解,可能有描述错误的地方,请包涵。。。

答案是B.
2个数组不是同一个 因为你传过去的只是引用.

相关兴趣推荐

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网