就Java而言,当有人问:
什么是多态?
将超载或重载是一个可以接受的答案?
我认为还有更多的东西.
如果您有一个抽象基类定义了一个没有实现的方法,并且您在子类中定义了该方法,那还是会覆盖吗?
我认为超载肯定不是正确的答案.
Integer i = ...
switch (i){
case null:
doSomething0();
break;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我不能在switch case语句中使用null.我怎么能这样做?我不能使用default因为那时我想做别的事情.
我在某处看到了这段代码并且想知道:何时以及为什么有人会做以下事情:
doSomething( (MyClass) null );
Run Code Online (Sandbox Code Playgroud)
你有没有这样做过?你能分享一下你的经历吗?
看一下下面的例子:
class nul
{
public static void main (String[] args)
{
System.out.println (String.valueOf((Object)null));
System.out.println (String.valueOf(null));
}
}
Run Code Online (Sandbox Code Playgroud)
第一次println写,null但第二次抛出a NullPointerException.
为什么只有第二行值得例外?那两个nulls有什么区别?Java中是真的 null还是假 null的?
如果我用Java写这行:
JOptionPane.showInputDialog(null, "Write something");
Run Code Online (Sandbox Code Playgroud)
将调用哪种方法?
showInputDialog(Component parent, Object message)showInputDialog(Object message, Object initialSelectionValue)我可以测试一下.但在其他类似的情况下,我想知道会发生什么.
请考虑以下代码段:
public class StringValueOfNull {
public static void main(String[] args) {
String.valueOf(null);
// programmer intention is to invoke valueOf(Object), but instead
// code invokes valueOf(char[]) and throws NullPointerException
}
}
Run Code Online (Sandbox Code Playgroud)
正如在链接问题的答案中所解释的那样,Java的方法重载将上面的调用解析为String.valueOf(char[]),这NullPointerException在运行时是正确的.
在Eclipse中编译javac 1.6.0_17,这是堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.<init>(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at StringValueOfNull.main(StringValueOfNull.java:3)
Run Code Online (Sandbox Code Playgroud)
需要注意的是堆栈跟踪上面缺少关键信息:它不具备的完整签名valueOf法!它只是说String.valueOf(Unknown Source)!
在我遇到的大多数情况下,异常堆栈跟踪总是具有实际位于堆栈跟踪中的方法的完整签名,这当然对于立即识别问题非常有用,并且是堆栈跟踪的主要原因(不需要首先说是建造相当昂贵的.
然而,在这种情况下,堆栈跟踪根本没有帮助.它在帮助程序员识别问题方面失败了.
按原样,我可以看到程序员可以使用以上代码段识别问题的3种方法:
String valueOf(char[] data)确实是选中的那个在定义使用不同过滤器返回相同形状数据的多个方法时,有什么更好的做法?显式方法名称或重载方法?
例如.如果我有一些产品,我从数据库中提取
明确的方式:
public List<Product> GetProduct(int productId) { // return a List }
public List<Product> GetProductByCategory(Category category) { // return a List }
public List<Product> GetProductByName(string Name ) { // return a List }
Run Code Online (Sandbox Code Playgroud)
重载方式:
public List<Product> GetProducts() { // return a List of all products }
public List<Product> GetProducts(Category category) { // return a List by Category }
public List<Product> GetProducts(string searchString ) { // return a List by search string }
Run Code Online (Sandbox Code Playgroud)
我意识到你可能会遇到类似签名的问题,但是如果你传递的是对象而不是基类型(string,int,char,DateTime等),这将不再是一个问题.所以...是一个好主意,重载的方法来减少你有方法和清晰的数字,或者应该 …
是否存在以下行为的逻辑语言设计类型解释(Java 7和我怀疑早期版本):
Object a = null;
String as = String.valueOf(a); // as is assigned "null"
System.out.println(as+":"+as.length()); // prints: "null:4"
System.out.println ( String.valueOf(null)); // NPE
Run Code Online (Sandbox Code Playgroud) 为什么String.valueOf(null)导致空指针异常?其中预期的行为是返回"null"字符串.
String x = null;
System.out.println(String.valueOf(x));
Run Code Online (Sandbox Code Playgroud)
这给出了一个"null"字符串.但
System.out.println(String.valueOf(null));
Run Code Online (Sandbox Code Playgroud)
将导致空指针异常.
今天我在遗留代码中发现了一个错误,这让我有了一个令人震惊的发现:
String s = null + ""; //results in "null" string
s = String.valueOf(null); // NullPointerException is thrown
Integer i = null;
s = String.valueOf(i); //results in "null" string
Run Code Online (Sandbox Code Playgroud)
第一个问题是:为什么会发生这种意想不到的行为?
这意味着像这样的方便代码:
String age = person.getAge() + "";
Run Code Online (Sandbox Code Playgroud)
是完全出乎意料的。
第二个问题:获得 null 而不是“null”的最佳(最优雅)方法是什么
鉴于我有一个包含两个构造函数的类:
public class TestClass {
ObjectOne o1;
ObjectTwo o2;
public TestClass(ObjectOne o1) {
// ..
}
public TestClass(ObjectTwo o2) {
// ..
}
}
Run Code Online (Sandbox Code Playgroud)
请假设,这ObjectOne是一种interface类型,并且ObjectTwo implements ObjectOne.如果我打电话,会发生什么:
new TestClass(null);
Run Code Online (Sandbox Code Playgroud)
如何确定调用的正确方法?谁决定了?Java和其他OOP语言之间是否存在差异?
我有疑问:这两个声明有什么区别?
public static void printMax(double... numbers) { ... }
public static void printmax(double numbers[]) { ... }
Run Code Online (Sandbox Code Playgroud)
是double... numbers一样的double numbers[]吗?
这不起作用(抛出Nullpointer异常)
String s = null;
System.out.println(s);
System.out.println(String.valueOf(null));
Run Code Online (Sandbox Code Playgroud)
但这是
String s = null;
System.out.println(s);
System.out.println(String.valueOf(s));
Run Code Online (Sandbox Code Playgroud)
为什么?无法得到.我想了解背后的逻辑.
java ×13
null ×3
overloading ×3
methods ×2
oop ×2
polymorphism ×2
string ×2
arrays ×1
c# ×1
exception ×1
invocation ×1
overriding ×1
parameters ×1
stack-trace ×1