在牛客网错题的一些记录

1.Java运行时内存分为线程共享和线程私有两部分

线程共享:方法区和堆

线程私有:Java虚拟机栈,程序计数器,本地方法栈

2.new java.util.SortedMap().put("key","value");这种实例方式是错误的因为SortedMap是一个接口

3.for循环执行的顺序

for(初始化语句;布尔表达式;更新语句){

正文过程;

}

初始话语句仅在循环开始前执行一次

布尔表达式用于决定是否继续执行正文过程,表达式中异常则结束循环

正文过程,如果过程中存在break,return或者异常,循环结束(不会执行更新语句)如果遇到continue则会执行更新语句后进入下一轮循环

更新语句,注意更新语句不做到逻辑真假判断,到这里一轮循环结束

布尔表达式,进入新一轮循环

.........

4. byte b = (byte)129;

正向溢出:最小值+余数-1

负向溢出:最大值-余数+1

byte存储范围[-128,127]

129为正向溢出,结果为-128+(129%127)-1 = -127

若为-129负向溢出,结果为127-(129/128)+1 = 127

5. String s = "test";//该方法定义类加载器会从常量池判断是否有这个字符串存在,存在直接用s指向,不存在则创建

String s1 = new String("test");//直接在堆中new一个对象

s==s1为false,因为s指向的是常量池中的字符串变量

而s1指向的是堆中的字符串duix

6. -12%-5 的值为-2

取模运算,商的值和被除数符号相同

7.Java区分为两大类

共享线程区:方法区和堆

私有线程区:程序计数器,虚拟机栈和本地方法栈

 程序计数器:

堆是jvm所管理的最大的一块内存空间,主要存放各种类的实例对象

在Java中堆被划分为两个不同的区域:新生代和老年代

新生代又被划分为三个区:

Eden,From Survivor,To Survivor  这样的划分是为了使jvm能够更好的管理堆内存中的对象,堆的内存模型大致为

 8. 不会初始化子类的几种方式:

1). 调用的是父类的static方法或者字段

2). 调用的是父类的final方法或者字段

3). 通过数组来引用

SuperCLass [] sca = new SuperClass[10];

当初始化一个类时,如果发现其父类没有初始化回就会先初始化它的父类

9. 四种引用类型

1). 强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象

2). 软引用:用softreference类实现,一般不会轻易回收,只有不够内存才会回收

3). 弱引用:用weakReference类实现,一但垃圾回收以启动就会回收

4). 虚引用:不能单独存在,必须和引用队列联合使用,主要作用时跟踪对象被回收的状态

10. final修饰变量,则等同于常量。

final修饰方法中的参数,则为最终参数。

final修饰类,则类不能被继承。

final修饰方法,则方法不能被重写。

final不能修饰抽象类

final如果修饰引用变量的话,引用变量所指向的值是可以改变的,只是这个引用只能指向这个地址而已,也就是引用本身的值不能变。

猜你喜欢

转载自blog.csdn.net/pengyiccb/article/details/106326384