小编Und*_*Dog的帖子

编译器如何知道在执行之前要抛出的异常?

import java.io.*;
class ex3
{

    public static void main(String args[])
    {
       myfun();
    }

    static void myfun()
    {
        try
        {
           FileInputStream f = new FileInputStream("file.ytxt");
           System.out.println("my fun");
        }

        catch(Exception e) //Line 1
        {
           System.out.println(e.getMessage());
        }

        catch(FileNotFoundException e) //Line 2
        {
           System.out.println("File Not Found Caught");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了两个异常处理程序代码(一个是通用的,另一个是第1行和第2行).

我的编译器在抱怨

ex3.java:24: error: exception FileNotFoundException has already been caught
                catch(FileNotFoundException e)
                ^
1 error
Run Code Online (Sandbox Code Playgroud)

我的问题是编译器是如何知道try块会抛出"FileNotFoundException"的?

java

3
推荐指数
2
解决办法
1360
查看次数

为什么Java中的"切换"依赖于"中断"?

class switch1
{
    public static void main(String args[])
    {
        int a = 10;
        switch(a)
        {
            default: System.out.println("Default");
            case -1: System.out.println("-1");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这个程序将执行"default"和"case -1"语句,因为在匹配条件之后没有指定break(在这种情况下是在"default"之后).

但我不明白的是

a)为什么break需要在switch声明中?

b)为什么它甚至执行无效匹配条件的语句(即执行"case -1"))如果它只是匹配的话?

java

3
推荐指数
1
解决办法
1371
查看次数

从另一个构造函数调用构造函数的真实场景

我知道可以通过使用"this"从另一个构造函数调用一个构造函数.

但我想知道的是,为什么我们这样做(即从另一个构造函数调用构造函数)

任何人都可以提到一个简单的例子,说明这可能实际上有用吗?

java

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

float变量初始化java

以下代码片段在第1行给出了编译器错误.

public abstract class xyz
{

    float Gamma = 20.0; //Line 1
    public class Alpha
    {
        void Beta()
        {
            System.out.println("this is atest");
        }
    }
}



abc0.java:5: error: possible loss of precision
        float density = 20.0;
                        ^
  required: float
  found:    double
2 errors
Run Code Online (Sandbox Code Playgroud)

根据我的理解,float用于十进制变量.

我是否遗漏了一些明显的东西,或者我是否必须始终使用铸造来进行十进制变量

编辑:我知道'f'最后可以用于浮点变量,但它是MANDATORY吗?

java

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

Java中的多个主要方法

我预计以下代码会出现编译器问题,但令人惊讶的是它没有。

class p {
  static int a = 10;

  public static void main(String...args) {
    System.out.println(a);
  }
}

class child extends p {
  public static void main(String[] args) {
    System.out.println(p.a+10);
  }
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我:

a) 为什么编译器没有抱怨多种main()方法?

b) 当我从命令行执行上述程序时,我可以看到只有类 p 的main()方法正在执行?这背后的原理是什么?

java

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

来自while循环Java的意外输出

这是我无法理解的行为.

class loop1 {
    public static void main(String args[]) {
        int i = 10;

        do
            while(i++ < 15) {
                System.out.println(i);
                i = i + 20;
                System.out.println(i);
            } 
        while(i<2);

        System.out.println(i);    
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望它能打印出来

11
31
31
Run Code Online (Sandbox Code Playgroud)

但它打印

11
31
32
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么这个"32"出现在输出中.

这是我对流程的理解

  • 我= 10
  • 在while循环中,由于一元增量,它变为11,所以这解释了第一个输出
  • 11增加到31(+20)
  • 然后31 <15应该失败(在下一次迭代期间),所以它应该进入最后一个打印语句并打印31,但它改为打印32.

有人能告诉我我错过了什么吗?

java

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

构造函数 - 执行顺序

class Alpha
{
       String name = "Alpha";
       Alpha()
       {
           print();
       }
       void print()
       {
           System.out.println("Alpha Constructor");
       }
}
class Beta extends Alpha
{
       int i =   5;
       String name = "Beta";
       public static void main(String[] args)
       {
          Alpha a = new Beta();
          a.print();//Line1 executes Beta constructor
          System.out.println(a.name);//Line 2 displays Alpha instance variable
       }
       void print()
       {
           System.out.println(i);
       }
}
Run Code Online (Sandbox Code Playgroud)

该程序成功编译并显示以下输出.

0
5
Alpha
Run Code Online (Sandbox Code Playgroud)

问题

a)我不明白为什么Alpha的构造函数没有先被执行.

我相信每个子构造函数都会隐式调用"super()"......对吗?

b)如果Beta的构造函数已经执行,那么为什么打印"5"?(输出中的第二行)

我有点理解的第三行(即将显示Alpha自己的变量,因为尚未对"a"实例变量进行转换)

java

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

为什么以下"substring"调用失败?

class strb1
{
    static public void main(String a_[])
    {  
         StringBuilder sb = new StringBuilder("Test");
         StringBuilder sb1;
         sb1 = sb.append("ing").append("a").substring(0); //Line 1
         System.out.println(sb);
         System.out.println(sb1); 
    }   
}
Run Code Online (Sandbox Code Playgroud)

这个程序在第1行给出了编译器错误.这substring是StringBuilder类中的一个有效方法,所以我不确定我在这里缺少什么.有人能指出我的错误吗?

java

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

Java中的进口

我已经读过,与C/C++不同,当我们"导入"包时,它们实际上并没有被添加(它们被引用而不是嵌入)到类文件中.

这有什么性能影响?

我很好奇可能会因为引用的数据(来自包)在.class本身中不可用而产生的开销(调用引用的包等).

或者开销非常小?

java

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

没有输入时不会抛出异常

class Ex_ex
{
    public static void main(String[] args)
    {

         if (args[0].equals("first"))
             if (args[1].equals("second")) //Expected exception here LINE1
             {
                 System.out.println("first..second");
             }
             else 
             {
                System.out.println("nothing "+ args[1]);
             }

     }
}
Run Code Online (Sandbox Code Playgroud)

我从命令行执行了这个程序,我给出了以下命令

"java Ex_ex测试"

测试是args [0]并且没有给出args [1].

我以为我会在第1行获得运行时异常,因为它尝试访问不存在的args [1] ...但我没有得到异常.

有人可以告诉我为什么吗?

java exception

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

Java中的意外输出 - 与继承有关

这是我的示例程序.

class parent
{

    void display(int i)
    {
        System.out.println("parent");
    }

}

class child extends parent
{

    void display(byte i)  //Line 0
    {

        System.out.println("child");
        return;
    }

}

class impl
{

    public static void main(String...args)
    {

        parent p = new parent();
        p.display(5); //Line 1
        child c = new child();
        c.display(3); //Line 2

    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的输出.

varun@\:~/Desktop/JavaFiles$ java impl
parent
parent
Run Code Online (Sandbox Code Playgroud)

我理解第1行从父级调用display()方法并输出预期的"parent".

但是我不明白为什么第2行从父节点而不是子节点调用display(),即使我没有使用多态初始化(只是常规初始化子类是我做的).

java

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

Bash Shell脚本 - 用户输入

我是Shell脚本的新手.

任何人都可以告诉我我应该在下面的脚本中做什么,以便不是将日期/时间作为git提交的参数,它实际上提示我输入注释?

#!/bin/bash

TODAY=$(date)
.............
.............
git commit -m "$TODAY"
............
............
Run Code Online (Sandbox Code Playgroud)

linux bash ubuntu

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

Java:没有所有Superclass实例变量/方法的子类继承

理论问题:是否可以从超类A创建子类B继承所有A的实例变量/方法,除了超类A中的特定实例变量/方法?

java

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

标签 统计

java ×12

bash ×1

exception ×1

linux ×1

ubuntu ×1