java经典考题

来源:互联网 发布:腾讯企业域名邮箱 编辑:程序博客网 时间:2024/05/22 03:20
1、通过method方法只输出 "a=100 b=100"
public static void main(string[] args){a=10;b=10;method(a,b);sysout("a="+a);sysout("b="+b);}

2、分析

表面上看,这个考的是值传递和引用传递,当变量为基本类型时,考的是值传递,这个时候常规方法是无解的,只能另辟蹊径:修改输出方法,写出下边的方法1)有加分,说明你对java的基础理解的很深。当变量的基本类型为对象类型时,考的是引用传递,这个时候常规方法是有解的,但直接给引用赋值不对,原因是变量不是类的变量而是main方法的变量(main方法不属于类而是程序的入口),这个考察的是java反射,写出下边的方法2)加分很多。如果是直接写出下边的第三个方法且不写出原因,那么只能说明java基础一般。

1)当a、b为基本类型时,例如int,method的写法如下

public static void method(int a, int b) {          PrintStream ps = new PrintStream(System.out) {              @Override              public void println(String x) {                  if ("a=10".equals(x)) {                      x = "a=100";                  } else {                      x = "b=200";                  }                  super.println(x);              }          };          System.setOut(ps);      }

2)当a、b为基本类型时,例如int,method的写法如下

public static void method(Integer a,Integer b) throws Exception{        Field field = a.getClass().getDeclaredField("value");          field.setAccessible(true);          field.set(a, 100);            Field fieldb = b.getClass().getDeclaredField("value");          fieldb.setAccessible(true);          fieldb.set(b, 200);      }

3、最简单最无耻也不用区分类型的方法
public static void method(a,b){        System.out.println("a="+100);        System.out.println("b="+100);        System.exit(0);}



0 0
原创粉丝点击