- ~
设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则会出现错误
如下代码执行后输出结果为( )函数
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
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 修饰 }