【335天】我爱刷题系列094(2018.01.06)

叨叨两句

  1. ~

牛客网——java专项练习073

1

设int x=1,float y=2,则表达式x/y的值是:()
正确答案: D
A 0
B 1
C 2
D 以上都不是java

我在想为何在float y=2后面没有加一个f,如今想通了,能够由低精度向高精度转换,开始是int,如今转为了float全部是能够的,最后结果如何0.5。去过改为了y=2.0则会出现错误

2

如下代码执行后输出结果为( )函数

public class Test
{
    public static Test t1 = new Test();
    {
         System.out.println("blockA");
    }
    static
    {
        System.out.println("blockB");
    }
    public static void main(String[] args)
    {
        Test t2 = new Test();
    }
 }

正确答案: A
A blockAblockBblockA
B blockAblockAblockB
C blockBblockBblockA
D blockBblockAblockBcode

静态块:用static申明,JVM加载类时执行,仅执行一次 
构造块:类中直接用{}定义,每一次建立对象时执行 
执行顺序优先级:静态块>main()>构造块>构造方法 
静态块按照申明顺序执行,先执行Test t1 = new Test();
全部先输出blockA,而后执行静态块,输出blockB,最后执行main
方法中的Test t2 = new Test();输出blockA。
初始化类的时候,首先在其余任何事物发生以前,将分配给对象的存储空间初始化为二进制的0。因此加载时,对t1初始化为null,对static静态块作了初步的初始化,可是还未执行里面的代码。而后按照静态变量的初始化顺序,首先对t1进行具体的初始化,因为static静态块已经进行了初步的初始化,因此这时候是直接跳过这里的,因此首先输出 blockA,而后初始化t1后,执行到static静态块以后,再执行里面的内容,因此输出blockB,最后执行普通的初始化块blockA.
1.首先,须要明白类的加载顺序。
(1) 父类静态对象和静态代码块
(2) 子类静态对象和静态代码块
(3) 父类非静态对象和非静态代码块
(4) 父类构造函数
(5) 子类 非静态对象和非静态代码块
(6) 子类构造函数
其中:类中静态块按照声明顺序执行,而且(1)和(2)不须要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)

2.于是,总体的执行顺序为 
public static Test  t1 = new Test();         //(1)
static 
{
System.out.println("blockB");                //(2)
}
Test t2 =new Test();                             //(3)
在执行(1)时建立了一个Test对象,在这个过程当中会执行非静态代码块和缺省的无参构造函数,在执行非静态代码块时就输出了blockA;而后执行(2)输出blockB;执行(3)的过程一样会执行非静态代码块和缺省的无参构造函数,在执行非静态代码块时输出blockA。所以,最终的结果为

blockA
blockB
blockA

3

jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?
正确答案: B D
A 抽象类能够有构造方法,接口中不能有构造方法
B 抽象类中能够包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C 一个类能够实现多个接口,但只能继承一个抽象类
D 接口中能够有普通成员变量,抽象类中没有普通成员变量对象

抽象类
特色:
1.抽象类中能够构造方法
2.抽象类中能够存在普通属性,方法,静态属性和方法。
3.抽象类中能够存在抽象方法。
4.若是一个类中有一个抽象方法,那么当前类必定是抽象类;抽象类中不必定有抽象方法。
5.抽象类中的抽象方法,须要有子类实现,若是子类不实现,则子类也须要定义为抽象的。
接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,由于定义的变量,在编译的时候都会默认加上
public static final 
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。
5.接口能够实现多继承
6.接口中定义的方法都须要有实现类来实现,若是实现类不能实现接口中的全部方法
7.则实现类定义为抽象类。
接口能够有default、static方法,因此B是错的。
interface A {
    abstract void a();
    static void s() {
    }
    default void d(){
        
    }
    void b();//默认用abstract修饰
    int a = 0;//默认用static final 修饰 
}