编程语言
首页 > 编程语言> > 【2021.4.29】Java知识点日常总结

【2021.4.29】Java知识点日常总结

作者:互联网

题目皆摘自牛客网JAVA专项练习


1.有如下代码:请写出程序的输出结果。

①、432     ②、531     ③、421     ④、523

z=0时候,执行++x > 2,不成立,&&后面就不执行了,此时 x=1,y=0,k=0;

z=1时候,执行++x > 2,还不成立 ,&&后面就不执行了,此时 x=2,y=0,k=0;

z=2时候, 执行++x > 2,成立,继续执行 ++y > 2, 不成立  , &&后面就不执行了, 此时 x=3,y=1,k=0;

z=3时候,执行++x > 2,成立,继续执行++y > 2,不成立  , &&后面就不执行了, 此时 x=4,y=2,k=0;

z=4 时候,执行++x > 2,成立,继续执行 ++y > 2, 成立  , 继续执行k++>2 ,不成立,此时仍没有进入for循环的语句中, 但此时 x=5,y=3,k=1;

z=5时候,不满足条件了,整个循环结束,所以最好打印时候: x=5,y=3,k=1;

 

2.以下代码输出的是:

①、6     ②、10     ③、都不对     ④、16

Java中String类型变量是immutable(不可变的)。

尽管 change()方法中的str与sv.str都是新的对象实例成员变量值"6"的引用, 由于String类型的 不可变 性,change()方法中的str="10"语句实际上是将传入的str副本引用指向了一个值为“10”的新的内存地址,但 原数据引用 sv.str的引用值(也就是“6”的内存地址) 并没有发生改变,因此sv.str指向的值仍旧为6.

 

3.根据以下代码段,执行new Child("John", 10); 要使数据域data得到10,则子类空白处应该填写(  D  )。

class Parent {
    private int data;
    public Parent(int d){ data = d; }
}
class Child extends Parent{
    String name;
    public Child(String s, int d){

        ___________________
        name = s;
    }
}

1.子父类存在同名成员时,子类中默认访问子类的成员,可通过super指定访问父类的成员,格式:super.xx  (注:xx是成员名);

2.创建子类对象时,默认会调用父类的无参构造方法,可通过super指定调用父类其他构造方法,格式:s uper(yy) (注:yy是父类构造方法需要传递的参数)

 

4.检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。     goodandgbc  

java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的。

也就是说,String str = “aa”;str=“bb”;第二句不是改变“aa”所存储地址的内容,而是另外开辟了一个空间用来存储“bb”;同时由str指向

原来的“aa”,现在已经不可达,GC时会自动回收。

因此String作为参数传进来时候,str= "test ok"; 实际给副本引用str指向了新分配的地址,该地址存储“test ok”。

因此,原先的str仍然指向“good”

 

5.下面程序的输出结果为  1201

第一步,func(1),if条件不成立,不抛出异常,catch不运行,final运行,拼串得到“1”,程序继续往下走,拼串得到“12”。

第二步,fun(2),if条件成立,抛出异常,catch捕获异常,运行catch里面代码,拼串得到“120”,虽然有return,但是不管出不出异常,final里代码必须执行,执行final,拼串得到“1201”,然后return结束。所以最终结果“1201”。 

 

6.

①、abstract类只能用来派生子类,不能用来创建abstract类的对象。

②、abstract不能与final同时修饰一个类。

③、abstract类定义中可以没有abstract方法。

④、final类不能用来派生子类,因为用final修饰的类不能被继承;

 

7.根据下面这个程序的内容,判断哪些描述是正确的:( )

Java语言是静态多分派,动态单分派的。

如果是重载方法之间的选择,则是使用静态类型。

如果是父类与子类之间的重写方法的选择,则是使用动态类型。

如A a = new B(); 会使用类型B去查找重写的方法,使用类型A去查找重载的方法。

所以此题的输出分别为

Welcome, tommy
Hello, tommy

 

8.哪些操作会使线程释放锁资源?

join()底层就是调用wait()方法的,wait()释放锁资源,故join也释放锁资源

 

9.jvm中垃圾回收分为scanvenge gc和full GC,其中full GC触发的条件可能有哪些?  (C D E)

1,新生代:(1)所有对象创建在新生代的Eden区,当Eden区满后触发新生代的Minor GC,将Eden区和非空闲Survivor区存活的对象复制到另外一个空闲的Survivor区中。(2)保证一个Survivor区是空的,新生代Minor GC就是在两个Survivor区之间相互复制存活对象,直到Survivor区满为止。
2,老年代:当Survivor区也满了之后就通过Minor GC将对象复制到老年代。老年代也满了的话,就将触发Full GC,针对整个堆(包括新生代、老年代、持久代)进行垃圾回收。
3,持久代:持久代如果满了,将触发Full GC。


附加面试题:

问:

自动拆箱与装箱是什么?

答:

装箱:将基本类型用它们对应的引用类型包装起来;  

拆箱:将包装类型转换为基本数据类型;  

Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。

标签:知识点,Java,2021.4,++,子类,GC,str,父类,String
来源: https://blog.csdn.net/weixin_56185617/article/details/116271898