在电脑里找到一份当时学习JAVA时的笔记,看到一些现在已经遗忘的细节。稍微整理了几个,发出来与大家分享。代码很简单,不运行你能得出正确结果吗
运行结果Ctrl+A就能看到一、动态绑定:
public class Test {
public static void main(String[] args) {
A obj = new B();
int n = 2;
obj.method(n);
}
}class A {
public void method(double n) {
System.out.println("A:double");
}
}class B extends A {
public void method(int n) {
System.out.println("B:int");
}
}
运行结果:A:double二、switch语句
public class Test {
public static void main(String[] args) {
int value = 2;
switch (value) {
case 1:
System.out.print("a");
break;
case 2:
System.out.print("b");
default:
System.out.print("c");
case 3:
System.out.print("d");
break;
}
}
}
运行结果:bcd三、泛型可变参数
public class Test {
public static void main(String[] args) {
method(new int[]{1, 2, 3});
method(1, 2, 3);
method(1, 2.1);
}
public static <T> void method(T... s) {
System.out.println(s.getClass());
}
}
运行结果:
class [[I
class [Ljava.lang.Integer;
class [Ljava.lang.Number;
当然,java语言细节方面的陷阱很多,大家知道的都可以分享一下java陷阱
运行结果Ctrl+A就能看到一、动态绑定:
public class Test {
public static void main(String[] args) {
A obj = new B();
int n = 2;
obj.method(n);
}
}class A {
public void method(double n) {
System.out.println("A:double");
}
}class B extends A {
public void method(int n) {
System.out.println("B:int");
}
}
运行结果:A:double二、switch语句
public class Test {
public static void main(String[] args) {
int value = 2;
switch (value) {
case 1:
System.out.print("a");
break;
case 2:
System.out.print("b");
default:
System.out.print("c");
case 3:
System.out.print("d");
break;
}
}
}
运行结果:bcd三、泛型可变参数
public class Test {
public static void main(String[] args) {
method(new int[]{1, 2, 3});
method(1, 2, 3);
method(1, 2.1);
}
public static <T> void method(T... s) {
System.out.println(s.getClass());
}
}
运行结果:
class [[I
class [Ljava.lang.Integer;
class [Ljava.lang.Number;
当然,java语言细节方面的陷阱很多,大家知道的都可以分享一下java陷阱
static class A {
public void method(double n) {
System.out.println("A:double");
}
}
static class B extends A {
public void method(int n) {
System.out.println("B:int");
}
@Override
public void method(double n) {
System.out.println("B:double");
}
}
之所以是这个结果是因为父类引用指向子类对象,调用的是父类的method方法,不信你把B类的方法method改个名字,obj对象都调不到这个方法