java中死循环出现异常报错_小小白java基础面试题常见问题笔记

this,super遇到的小问题

在同一包下,以下说法正确的是(ABCD)

A:super.方法()可以调用父类的所有非私有方法

B:super()可以调用父类的所有的非私有构造函数

C:super.属性可以调用父类的所有非私有属性

D:this和super关键字可以出现在同一构造函数中

静态方法可不可以重载?

package statickeyword;

//get方法是一个静态方法,重载并没有出现问题

public class StaticDemo {

public static void get(){

System.out.println("get1");

}

public static void get(int a) {

System.out.println("get2 "+a);

}

}

Java代码导致OutOfMemoryError错误的解决:

a:检查代码中是否有死循环或递归调用。

b:检查是否有大循环重复产生新对象实体。

c:检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

d:检查List、map等集合对象是否有使用完后,未清除的问题。List、map等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

内存申请过程

1.JVM会试图为相关Java对象在Eden中初始化一块内存区域;

2.当Eden空间足够时,内存申请结束。否则到下一步;

3.JVM试图释放在Eden中所有不活跃的对象(minor collection),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区;

4.Survivor区被用来作为Eden及old的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区;

5.当old区空间不够时,JVM会在old区进行major collection;

6.完全垃圾收集后,若Survivor及old区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"Out of memory错误"。

运行时异常和非运行时异常

RuntimeException 可以不用try catch 可以由虚拟机接管 如果不进行处理 线程就会终止 或者主程序终止 要不就必须try catch

非运行时异常有IOException、SQLException等以及用户自定义的Exception异常 必须trycatch

否则编译不通过

比较经典的一道题

String a = "helloworld";

String b = new String("helloworld");

String c = "hello" + "world";

System.out.print((a == b)+”-”+( a == c)+”-”+ a.equals(b)+”-”+( c.equals(a)));

这道题的结果是 false true true true

==比较地址

equals比较内容

new重新开辟地址

String a = ""会先在常量池里寻找有没有a的存在,如果有直接赋值过去,没有的话开辟一块空间

float常见问题

float foo=1.0; 这是错误的 因为浮点型自动为double类型的 所以不能转换成float

Stringbuilder和StringBuffer的区别

StringBuffer和StringBuilder类的区别在于StringBuffer支持并发操作,线性安全的,适合多线程中使用。StringBuilder不支持并发操作,是线程不安全的,不适合多线程中使用,但其在单线程中的性能比StringBuffer高。

线程的问题

Stringbuilder是线程不安全的,所以不会阻塞线程

1.当线程调用了对象的wait(),notify()、notifyAll(),需要先获得对象的锁。

这句话是正确的,notify()或者notifyAll()方法并不是真正释放锁,必须等到synchronized方法或者语法块执行完才真正释放锁

2.当线程的interrupt()方法被调用时,线程马上中断

这句话是不正确的因为这个方法只会中断本线程的执行,其他线程调用本线程的这个方法时会会通过checkAccess()检查权限。这有可能抛出SecurityException异常。

list删除方法的问题

1、可以在循环外通过索引删除对象或直接删除对象。

2、在循环过程中从List中删除非基本数据类型以后,继续循环List时会报ConcurrentModificationException 。

3、使用增强的for循环对List进行遍历删除,但删除之后马上就跳出的也不会出现异常

4、不使用增强的for循环的也可以正常删除和遍历, 这里所谓的正常是指它不会报异常,但是删除后得到的 数据不一定是正确的,这主要是因为删除元素后,被删除元素后的元素索引发生了变化。

5、使用Iterator的方式可以顺利删除和遍历

集合循环方方式for:在删除一元素时,集合大小会改变,索引会改变,有些元素删不完,逻辑错误

集合循环方式加强for:在删除操作时会直接报错,当前对象不能被改变

集合循环方式iteratior:可以用iterator.remove,但不能用list.remove

java反射

Java反射机制说法不正确的是( C )

A:在运行时判断对象所属的类

B:在运行时判断类所具有的成员变量和方法

C:在运行时改变方法的实现

D:在运行时调用一个对象的方法

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

20190810155135810.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值