相关疑难解决方法(0)

多态性与重写与重载

就Java而言,当有人问:

什么是多态?

超载重载是一个可以接受的答案?

我认为还有更多的东西.

如果您有一个抽象基类定义了一个没有实现的方法,并且您在子类中定义了该方法,那还是会覆盖吗?

我认为超载肯定不是正确的答案.

java oop polymorphism overriding overloading

340
推荐指数
12
解决办法
25万
查看次数

如何在switch中使用null

Integer i = ...

switch (i){
    case null:
        doSomething0();
        break;    
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我不能在switch case语句中使用null.我怎么能这样做?我不能使用default因为那时我想做别的事情.

java switch-statement

191
推荐指数
7
解决办法
16万
查看次数

为什么空投?

我在某处看到了这段代码并且想知道:何时以及为什么有人会做以下事情:

doSomething( (MyClass) null );
Run Code Online (Sandbox Code Playgroud)

你有没有这样做过?你能分享一下你的经历吗?

java null

81
推荐指数
2
解决办法
2万
查看次数

Java中"(Object)null"和"null"有什么区别?

看一下下面的例子:

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 null nullpointerexception

53
推荐指数
3
解决办法
2695
查看次数

在Java中选择哪个重载为空?

如果我用Java写这行:

JOptionPane.showInputDialog(null, "Write something");
Run Code Online (Sandbox Code Playgroud)

将调用哪种方法?

  • showInputDialog(Component parent, Object message)
  • showInputDialog(Object message, Object initialSelectionValue)

我可以测试一下.但在其他类似的情况下,我想知道会发生什么.

java parameters methods invocation

52
推荐指数
3
解决办法
8270
查看次数

异常堆栈跟踪中的(未知源)

背景

这个问题与 为什么String.valueOf(null)抛出NullPointerException有关?

请考虑以下代码段:

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种方法:

  • 程序员自己意识到方法是重载的,并且通过解析规则,在这种情况下调用"错误的"重载
  • 程序员使用一个好的IDE,允许他/她快速查看选择的方法
    • 例如,在Eclipse中,鼠标悬停在上面的表达式上会很快告诉程序员String valueOf(char[] data)确实是选中的那个
  • 程序员检查字节码(呃!) …

java exception stack-trace

51
推荐指数
3
解决办法
8万
查看次数

方法重载.你能过度使用它吗?

在定义使用不同过滤器返回相同形状数据的多个方法时,有什么更好的做法?显式方法名称或重载方法?

例如.如果我有一些产品,我从数据库中提取

明确的方式:

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等),这将不再是一个问题.所以...是一个好主意,重载的方法来减少你有方法和清晰的数字,或者应该 …

c# java methods overloading

37
推荐指数
7
解决办法
3663
查看次数

Java String.valueOf(null)抛出NPE,但是对象a = null; String.valueOf(a)返回'null'

是否存在以下行为的逻辑语言设计类型解释(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)

java string

36
推荐指数
3
解决办法
8158
查看次数

为什么String.valueOf(null)导致空指针异常?

为什么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)

将导致空指针异常.

java

9
推荐指数
1
解决办法
2272
查看次数

Java中null到string的转换

今天我在遗留代码中发现了一个错误,这让我有了一个令人震惊的发现:

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”的最佳(最优雅)方法是什么

java string null

5
推荐指数
1
解决办法
7079
查看次数

多态模糊区分如何工作?

鉴于我有一个包含两个构造函数的类:

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语言之间是否存在差异?

java oop polymorphism overloading

4
推荐指数
2
解决办法
628
查看次数

形式参数类型声明中double ...和double []之间的区别

我有疑问:这两个声明有什么区别?

 public static void printMax(double... numbers) { ... }

 public static void printmax(double numbers[])  { ... }
Run Code Online (Sandbox Code Playgroud)

double... numbers一样的double numbers[]吗?

java arrays parameter-passing variadic-functions

2
推荐指数
1
解决办法
2757
查看次数

String.valueOf(null)&String.valueOf(s)

这不起作用(抛出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

0
推荐指数
1
解决办法
66
查看次数