【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