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"的?
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"))如果它只是匹配的话?
我知道可以通过使用"this"从另一个构造函数调用一个构造函数.
但我想知道的是,为什么我们这样做(即从另一个构造函数调用构造函数)
任何人都可以提到一个简单的例子,说明这可能实际上有用吗?
以下代码片段在第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吗?
我预计以下代码会出现编译器问题,但令人惊讶的是它没有。
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()方法正在执行?这背后的原理是什么?
这是我无法理解的行为.
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"出现在输出中.
这是我对流程的理解
有人能告诉我我错过了什么吗?
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"实例变量进行转换)
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类中的一个有效方法,所以我不确定我在这里缺少什么.有人能指出我的错误吗?
我已经读过,与C/C++不同,当我们"导入"包时,它们实际上并没有被添加(它们被引用而不是嵌入)到类文件中.
这有什么性能影响?
我很好奇可能会因为引用的数据(来自包)在.class本身中不可用而产生的开销(调用引用的包等).
或者开销非常小?
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] ...但我没有得到异常.
有人可以告诉我为什么吗?
这是我的示例程序.
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(),即使我没有使用多态初始化(只是常规初始化子类是我做的).
我是Shell脚本的新手.
任何人都可以告诉我我应该在下面的脚本中做什么,以便不是将日期/时间作为git提交的参数,它实际上提示我输入注释?
#!/bin/bash
TODAY=$(date)
.............
.............
git commit -m "$TODAY"
............
............
Run Code Online (Sandbox Code Playgroud) 理论问题:是否可以从超类A创建子类B继承所有A的实例变量/方法,除了超类A中的特定实例变量/方法?