方法重载与类型转换
以下是针对用户提供的31个Java代码片段listing 1至listing 31的整合分析按核心概念分组说明每个程序的预期输出、关键行为或编译错误。所有代码片段均基于Java标准语法若包含main方法则视为可独立运行的程序。---### 方法重载与类型转换Listing 1、2- **Listing 1**演示方法重载。OverloadDemo定义了四个重载的test方法参数分别为无参、int、int,int和double。main方法依次调用它们最后一个返回double值并打印。输出No parametersa: 10a and b: 10 20double a: 123.25Result of ob.test(123.25): 15190.5625- **Listing 2**展示自动类型转换在重载中的应用。OverloadDemo缺少单int参数的重载但存在test(double)。当传入int i88时Java自动将int提升为double因此调用test(double)。输出No parametersa and b: 10 20Inside test(double) a: 88.0Inside test(double) a: 123.2---### 构造函数重载Listing 3、4、6- **Listing 3**仅定义一个带三个参数的构造函数Box(double w, double h, double d)。没有无参构造函数因此new Box()将编译错误。该类仅提供基础功能。- **Listing 4**Box类包含三个构造函数无参将维度设为-1、三个参数、一个参数创建正方体。main创建三个Box对象并计算体积。输出Volume of mybox1 is 3000.0Volume of mybox2 is -1.0Volume of mycube is 343.0- **Listing 6**在Listing 4基础上增加一个以Box对象为参数的构造函数克隆。main中创建myclone体积与mybox1相同。输出Volume of mybox1 is 3000.0Volume of mybox2 is -1.0Volume of cube is 343.0Volume of clone is 3000.0---### 对象作为方法参数与返回值Listing 5、8、9- **Listing 5**equalTo方法接受Test对象比较其内部字段是否相等。ob1和ob2内容相同ob3不同。输出ob1 ob2: trueob1 ob3: false- **Listing 8**演示对象通过引用传递。meth方法修改传入对象的字段原始对象ob的值被改变。输出ob.a and ob.b before call: 15 20ob.a and ob.b after call: 30 10- **Listing 9**方法返回新对象。incrByTen每次调用返回一个新的Test对象其a增加10。输出ob1.a: 2ob2.a: 12ob2.a after second increase: 22---### 值传递与引用传递对比Listing 7、8- **Listing 7**基本类型按值传递。meth内对参数的操作不影响原始变量。输出a and b before call: 15 20a and b after call: 15 20- **Listing 8**已在上文列出说明对象引用传递的副作用。---### 递归Listing 10、11- **Listing 10**计算阶乘的递归函数。fact(n)调用自身直到n1。输出Factorial of 3 is 6Factorial of 4 is 24Factorial of 5 is 120- **Listing 11**递归打印数组元素。printArray(i)先递归至i0然后从索引0开始打印。输出部分截取[0] 0[1] 1...[9] 9---### 访问控制Listing 12、13、14- **Listing 12**演示public、private和默认访问权限。私有成员c需通过setc/getc访问直接赋值ob.c100会导致编译错误注释中已体现。输出a, b, and c: 10 20 100- **Listing 13、14**定义并测试一个私有栈。Stack的数组和栈顶指针均为私有防止外部误操作。TestStack创建两个栈并压入0~9和10~19然后弹出。注意注释中尝试直接访问tos和stck是非法的。输出Stack in mystack1:98...0Stack in mystack2:1918...10---### 静态成员与静态块Listing 15、16- **Listing 15**包含静态变量、静态方法和静态块。static块在类加载时执行初始化b为a*412。main调用meth打印变量。输出Static block initialized.x 42a 3b 12- **Listing 16**通过类名直接访问静态成员。StaticDemo.callme()和StaticDemo.b。输出a 42b 99---### final 常量Listing 17- **Listing 17**定义一组final整型常量用于表示菜单选项。final确保值不可修改。---### 数组的length成员Listing 18、19- **Listing 18**输出三个数组的长度。输出length of a1 is 10length of a2 is 8length of a3 is 4- **Listing 19**改进的栈使用stck.length确定容量允许在构造时指定大小。TestStack2创建大小分别为5和8的栈。输出Stack in mystack1:43210Stack in mystack2:76...0---### 内部类Listing 20、21、22- **Listing 20**Inner类定义在Outer类内部可直接访问外部类的成员。main创建Outer并调用test。输出display: outer_x 100- **Listing 21**尝试在外部类方法showy()中访问内部类的私有成员y会发生编译错误因为y是内部类的局部外部不可见。程序无法编译。- **Listing 22**在for循环内部定义内部类每次迭代创建新实例并调用display输出10次。输出重复10行display: outer_x 100---### 字符串操作Listing 23、24、25- **Listing 23**演示字符串拼接和打印。输出First StringSecond StringFirst String and Second String- **Listing 24**使用length()、charAt()、equals()方法。输出Length of strOb1: 12Char at index 3 in strOb1: sstrOb1 ! strOb2strOb1 strOb3- **Listing 25**字符串数组的遍历。输出str[0]: onestr[1]: twostr[2]: three---### 命令行参数Listing 26- **Listing 26**打印所有命令行参数。若程序不带参数运行则无输出。例如运行java CommandLine Hello World将输出args[0]: Helloargs[1]: World---### 可变参数Listing 27、28、29、30、31- **Listing 27**通过传递数组模拟可变参数。vaTest接受int[]。调用vaTest(n1)等输出数组内容。- **Listing 28**使用真正的可变参数int...。调用vaTest(10)、vaTest(1,2,3)、vaTest()。输出Number of args: 1 Contents: 10Number of args: 3 Contents: 1 2 3Number of args: 0 Contents:- **Listing 29**可变参数与普通参数组合。vaTest(String msg, int... v)。输出One vararg: 1 Contents: 10Three varargs: 3 Contents: 1 2 3No varargs: 0 Contents:- **Listing 30**可变参数的重载。包含vaTest(int...)、vaTest(boolean...)和vaTest(String, int...)。main中调用正确。输出vaTest(int ...): Number of args: 3 Contents: 1 2 3vaTest(String, int ...): Testing: 2 Contents: 10 20vaTest(boolean ...) Number of args: 3 Contents: true false false- **Listing 31**可变参数重载的歧义错误。vaTest()调用时两个重载int...和boolean...均匹配导致编译错误。程序无法运行。---