[263日]私はシリーズ(22) を磨くのが大好き

2つの文

  1. ブラシの目的は、新しい知識を学ぶのではなく、既知の知識の弱点を発見して、書籍やビデオを刷新するために体系的に新しい知識を学ぶことです。

Niuke.com – Javaの特別な実践002

  1. try文ブロックを終了するためにreturn文を使用するとします。 メソッドが戻る前にfinally節の内容が実行されます。 finally句にreturn文もある場合、この戻り値は元の戻り値を上書きします。

public static void main(String[] args) {
        int k = f_test();
        System.out.println(k);
    }
     
    public static int f_test(){
        int a = 0;
        try{
            a = 1;
            return a;
        }
        finally{
            System.out.println("It is in final chunk.");
            a = 2;
            return a;
        }
    }
输出: 
It is in final chunk.
2

如果将 return a; 注释掉,将输出
It is in final chunk.
1        

  1. Javaでは、ガベージコレクタは、完了したメソッドの呼び出しなど、使用されなくなったメモリリソースを自動的に解放します。 (エラー)

方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放

  1. 次のうち、addメソッドのオーバーロードではないメソッドはどれですか?

public class Test
{
    public void add( int x,int y,int z){}
}
正确答案: B   
A. public int add(int x,int y,float z){return 0;}
B. public int add(int x,int y,int z){return 0;}
C. public void add(int x,int y){}
D. 以上都不是

オーバーロード、書き換えの違い

  1. 次のコードスニペットでは、コンパイルエラーがあるという文は(1、3、4)です。

byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2);  /*语句1*/
b6=b4+b5;    /*语句2*/
b8=(b1+b4);  /*语句3*/
b7=(b2+b5);  /*语句4*/
System.out.println(b3+b6);

最終知識ポイントの脳マップ

一、关于final的重要知识点;
1、final关键字可以用于成员变量、本地变量、方法以及类。
2、 final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
3、 你不能够对final变量再次赋值。
4、 本地变量必须在声明时赋值。
5、 在匿名类中所有变量都必须是final变量。
6、 final方法不能被重写。
7、 final类不能被继承。
8、 没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。

二、数据类型转换
当使用 +、-、*、/、%、运算操作是,遵循如下规则:
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型,如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型,如果两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型,否则(操作数为:byte、short、int 、char),两个数都会被转换成int类型,并且结果也是int类型。

语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句 4: (b2 + b5)  结果仍然转换为int , 所以语句4错误。

  1. Java言語では、並行管理を行うメカニズムは(D)

A. 垃圾回收
B. 虚拟机
C. 代码安全
D. 多线程

选项A,Java语言中,垃圾回收机制对系统中不使用的内存进行回收,从而使程序员从繁忙的内存管理中解放出来。
选项B,Java编写好的程序首先由编译器转换为标准字节代码,然后由虚拟机执行。虚拟机把字节代码程序与各操作系统和硬件分开,使Java程序独立于平台。
选项C,Java的代码安全检测体现在多个层次上,在编译层、解释层、平台层分别作不同的安全检查。
选项D,多线程是Java程序的并发机制,它能同步共享数、处理不同的事件。

  1. Javaのwait()メソッドとsleep()メソッドの違いについての以下の説明は間違っていますか?

A. wait()方法属于Object类,sleep()属于Thread类
B. 调用wait()方法的时候,线程会放弃对象锁
C. 调用sleep()方法的过程中,线程不会释放对象锁
D. sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程

睡眠と待機の違い

  1. Javaプログラムファイルに含まれるパブリッククラスは、拡張子 ".java"を除き、ファイルと同じ名前でなければなりません。(FALSE)

public class Test{
 
    public static class innerClass{
        public static void prin(){
            System.out.println("innerClass");
        }
    }
 
    public static void main(String[] args) {
        Test.innerClass.prin();
        System.out.println("HelloWorld");
    }
}

题目的意思是: 除去扩展名.java的部分,包含在java文件里的Java里的公共类必须与文件的名字相同。
但是公共的内部类是不需要和文件的名字相同的。

  1. 次のプログラムの出力は(コンパイルエラーです)

class Base{
    public Base(String s){
        System.out.print("B");
    }
}
public class Derived extends Base{
    public Derived (String s) {
        System.out.print("D");
    }
    public static void main(String[] args){
        new Derived("C");
    }
}

子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
public Derived(String s){
        super("s");
        System.out.print("D");
    }

元のリンク