解决方案 »
- int float精度和范围
- gcj和openjdk都是GPL的Java实现,区别在哪里?
- 寻求博客源代码,页面要jsp的~! 在线等......
- 如何位图合成内存限制问题
- 奇怪的问题,输入流对象自己消失了!?
- 感谢rombus,请进来
- 请教高手,怎样获取结果集记录数?
- 我用jbuilder,建了个project,然后再建了个class,我想在此class里引用我com.ora.sql.*;里的类如何做?
- 菜问题:如何进行数据类型的转化,比如int转化为string
- 设置classpath的作用是什么??
- 使用迭代器时出现了错误:不兼容的类型:Object无法转换为Employee。求大神点播为什么?
- java ,数据库 以及 jsp的学习次序
public class InvokeTest { public static void main(String[] args) {
Object obj = null;
invoke(obj);
}// method_1
public static void invoke(Object obj) {
System.out.println("Object obj");
}// method_2
public static void invoke(int[] arr) {
System.out.println("int[] arr");
}// method_3
public static void invoke(int num) {
System.out.println("int num");
}
}
嘿嘿
不是钻牛角尖儿,而是加深理解
public class Abc { public static void main(String[] args) {
String letters = "ABC";
char[] numbers = {'1', '2', '3'};
System.out.println("1)" + letters + " easy as " + numbers);
System.out.print("2)" + letters + " easy as ");
System.out.println(numbers); // Invokes println(Object)
}
}
上面的示例是Java Puzzlers的第12个谜题
Ctrl+A查看运行结果
1)ABC easy as [C@15db9742
2)ABC easy as 123
太难了得看看源码到底是如果匹配参数的难道是先子类后父类, 先基本类型后引用类型的顺序吗?
先找具体对象。这样就报错了,有2个具体对象,不知道匹配谁。 String int[]public static void main(String[] args) {
invoke(null);
} // method_1
public static void invoke(Object obj) {
System.out.println("Object obj");
} // method_2
public static void invoke(int[] arr) {
System.out.println("int[] arr");
} // method_3
public static void invoke(int num) {
System.out.println("int num");
}
public static void invoke(String str) {
System.out.println("str");
}
System.out.println(a1 + "a2");不过,确实值得一看。感觉比较好玩,就拿出来探讨下
public static void invoke(int num) {null是空的对象引用。int是基本数据类型,不存在引用的概念。
你可以试一下
int a = null;
肯定会报错了。接下来要判断,程序调用的是method 1还是method 2,
就必须了解Java的重载解析过程。Java的重载解析过程是以下两阶段运行的。第一阶段 选取所有可获得并且可应用的方法。
这一阶段,程序选取method 1和method2。排除了method3。第二阶段在第一阶段选取的方法中选取最精确的一个。
什么是最精确的一个呢?
如果一个方可以接受传递给另一个方法的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。
// method_1
public static void invoke(Object obj) {
// method_2
public static void invoke(int[] arr) { 显然invoke(Object obj)的参数,可以接受任何传递给invoke(int[] arr)的参数。因此method 1相对缺乏精确性。
所以,main方法调用的是method 2。
点赞,这个解释结合上面说如果同时有 String,int[]看得话,觉得很对