JavaSE--错题整理(一)

在这里插入图片描述

两个最基本的java回收算法:复制算法和标记清理算法
复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出
标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象 两个概念:新生代和年老代 新生代:初始对象,生命周期短的
永久代:长时间存在的对象 整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。 P.S:Serial
New收集器是针对新生代的收集器,采用的是复制算法 Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法 Serial
Old(串行)收集器,新生代采用复制,老年代采用标记整理 Parallel Old(并行)收集器,针对老年代,标记整理
CMS收集器,基于标记清理 G1收集器:整体上是基于标记 整理 ,局部采用复制
综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理

在这里插入图片描述
真数组: 数组元素在内存中是一个接着一个线性存放的,通过第一个元素就能访问随后的元素,避免了数据覆盖的可能性,和数据类型覆盖并没有关系。

在这里插入图片描述
StringBuffer s = new StringBuffer(x); x为初始化容量长度 s.append(“Y”);
"Y"表示长度为y的字符串 length始终返回当前长度即y; 对于s.capacity():
1.当y<x时,值为x 以下情况,容器容量需要扩展
2.当x<y<2*x+2时,值为 2x+2
3.当**y>2
x+2**时,值为y

在这里插入图片描述
1.外部类只能有public和private访问权限,表示对包可见或不可见,内部类与类的成员属性同级,因此public、default、protected、private访问权限都可用、局部内部类即方法内部类属于方法体内的局部变量,因此和局部变量一样不能使用任何访问修饰符。

在这里插入图片描述
String类的replaceAll方法的第一个参数是正则表达式,在正则表达式中“.”表示所有字符,因此会把所有字符都做替换,若想替换“.”,需要使用转义字符,改为“\.”

在这里插入图片描述
A.一个文件中可以有多个public class,例如还可以有public class的内部类
B.一个文件中可以有多个类,可以是并列的非public类,也可以是任何访问权限的内部类
C.一个类中可以有多个main方法,属于方法重载,但是只能有唯一一个public static void main(String[] args) D.只有public类中才可以有主方法

在这里插入图片描述
java访问变量采用就近原则,若不声明this,则使用的是方法体内的变量

在这里插入图片描述
Java语言的跨平台性是指Java的虚拟机跨平台,并不是Java源文件跨平台,Java源文件经过编译生成与平台无关的字节码文件,后缀为.class,再由不同平台的Java虚拟机(类似于虚拟电脑的一款软件)通过对字节码的不同的解释,实现跨平台。

在接口中,默认的访问修饰符是public abstract,而要求接口的实现类覆写的方法不能比接口的方法的访问权限更小,因此实现类中覆写的方法只能是public的
接口中的方法的访问修饰符允许的有:public abstract static
普通类中允许有内部类接口,其访问修饰符不受限制,与成员变量同级

在这里插入图片描述

eE 因为finally中的语句一定会执行,且先于其他语句执行,且执行完就为作为程序的出口,退出程序。

java.lang包中不能被继承的类:
public final class Byte
public final class Character
public static final class Character.UnicodeBlock
public final class Class
public final class Compile
public final class Double
public final class Float
public final class Integer
public final class Long
public final class Math
public final class ProcessBuilder
public final class RuntimePermission
public final class Short
public final class StackTraceElement
public final class StrictMath
public final class String
public final class StringBuffer
public final class StringBuilder
public final class System
public final class Void

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
Java默认使用Unioncode编码,即不论什么语言都是一个字符占两个字节
Java的class文件编码为UTF-8,而虚拟机JVM编码为UTF-16 UTF-8编码下,一个中文占3个字节,一个英文占1个字节
Java中的char默认采用Unicode编码,所以Java中char占2个字节 1(byte)字节=8(bit)位

在这里插入图片描述
答案:good and gbc String
类是被final修饰的类。其变量的引用不能被改变,相当于是一个基本数据类型,因此在局部方法中对引用的重新赋值这相当于是另外开辟了一个空间,并不能影响原本的String
str 变量。

在这里插入图片描述
输出结果:AB.B 在operate方法中,引用x指向的对象A被连接了B,对象A也就被改变为AB
然后又把引用y指向了x所指向的对象地址,也就是此时引用a,x,y指向同一个对象AB 而引用b没有发生任何变化,依旧指向对象B。

在这里插入图片描述
编译不通过,向上转型中,父类无法调用子类独有的方法,只能调用重写的父类的方法

在这里插入图片描述
java.exe是java虚拟机 javadoc.exe用来制作java文档 jdb.exe是java的调试器
javaprof.exe是剖析工具

在这里插入图片描述
重载函数的定义:方法重载是指允许在同一个类中具有多个方法名相同而参数列表不同的方法。(方法名必须相同,参数列表必须不同,返回值类型可以相同也可以不同,不作为是否是重载函数的判断标准)

Here is a list of keywords in the Java programming language. You cannot use any of the following as identifiers in your programs. The keywords const and goto are reserved, even though they are not currently used. true, false, and null might seem like keywords, but they are actually literals; you cannot use them as identifiers in your programs.

abstract	continue	for	           new	       switch
assert***	default	goto*        	 package	    synchronized
boolean	do	if	    private	     this
break   	double	    implements	  protected	   throw
byte	    else	    import 	      public     	throws
case   	enum****	instanceof	      return    	transient
catch  	extends	 int	         short	    try
char	   final	    interface	      static   	void
class  	finally	 long	         strictfp**	volatile
const* 	float     	native	          super    	while

在这里插入图片描述
接口和枚举可以看为特殊的类,但是实际上它们并不是真正的类,在接口和枚举中也可以定义方法。

在这里插入图片描述
A:内部类于外部类属于一个级别,因此不会因为使用过了就将其回收,而局部变量使用后就会被gc,若果方法内部类引用了,就有找不到变量的可能性,因此须将局部变量声明为final的,Java就会将这个变量复制一份作为成员变量置于内部类中,这样的话,final修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
C:匿名内部类可以在任何方法或其他类中引用,而局部内部类出了方法体,就不能被引用了

在这里插入图片描述
A:i01是包装类,i02是基本数据类型,会将包装类自动拆箱成为int型,比较的是数值,因此返回值为true
B:因为-128<i01<127,第一次赋值时已经在IntegerCache中加载了此数值,因此i03不再另外开辟空间,只是复用对象即可,因此返回值为true
C:i04用new重新开辟了对象,与IntegerCache就无关了,因此==比较的是对象的地址,是不同的,返回false
D:与A原理相同,在这里比较的不是地址,而是数值大小。

在这里插入图片描述
堆区:只存放类对象,线程共享; 方法区:又叫静态存储区,存放class文件和静态数据,线程共享;
栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享

在这里插入图片描述
执行步骤:
1.Base b=new Sub();–>通过构造方法创建对象
2.Sub构造方法–>因为继承了父类,默认有super();
3.进入Sub父类Based的构造方法–>
4.调用callname()方法–>由于多态的特性,先在Base的子类Sub中找是否有覆写的方法–>有
5.打印子类中的输出语句(但是因为此时并没有对baseName赋值,因此输出为null)

在这里插入图片描述
A:java是半编译半解释型语言,会在运行时JVM将字节码文件翻译成机器语言。
B:Java编译出的是字节码文件,与操作系统无关
D:如低版本的JVM无法运行高版本的目标文件。

猜你喜欢

转载自blog.csdn.net/weixin_42962924/article/details/84622703