叨叨两句

  1. ~

牛客网——java专项练习073

1

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

我在想为什么在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 blockBblockAblockB

静态块:用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 修饰 
}

Wall_Breaker
2.1k 声望1.2k 粉丝

生死之间,就是我的跃迁之路,全程记录,欢迎见证