本总结只是对那些容易忽略的知识,或者容易不太理解的地方的总结,由于个人理解可能有偏差请谅解
1. 基础
1.程序运行时怎么样分配的
- 寄存器:是最快的储存区,但是寄存器的数量及其有限,所以寄存器按需分配,不能直接控制(在c和c++里面可以直接控制)
- 堆栈仅次于寄存器的速度,一般用于储存变量,或者基本数据类型,如果指针向上则释放内存向下则释放空间;
- 堆位于ram(随机访问储存器),用于存放java对象,存活的时间不确定,相对而言分配和释放的速度会比堆栈的速度慢;
- 常量储存:常量值直接放在代码的内部,放在静态存储区<堆
2. 基本数据类型是如何储存的
答:基本数据是储存在堆栈里面的,变量和值都在堆栈里面,而引用类型只有变量在堆栈里面;”在java里没有无符号类型”
biginteger和bigdecimal类有数据丢失么
答:我们知道在基本数据类型里面如果最大的就是double了,但是也最多保存小数点后面十多位的精度,对于要求比较高精度的行业例如航天….就要求使用这两个类
static的应用用场景
答:对于那些需要优先加载,或只需要保存一个的变量和方法使用静态,当 ,然会有静态代码块和静态内部类
javadoc/** /可应给所有的方法和成员变量注释么
答:javadoc的注释只能应用为public和protected成员注释,其他权限就算注释了也看不见
javadoc里面可以使用html标签么
答:可以
java里有sizeof()么
答:因为在java每个平台对应的数据类型所占用的数据类型都是一样大的,不需要用sizeof()来计算空间,因为在c和c++在不同平台,int可能不一样大
java里有goto么?
答:在java里goto是作为保留值,不能使用但是可以用break和continue加标签的形式实现跳出多重循环
规则如下:
- 一般continue会退回最内层循环的开头,并继续执行
- 带标签的contnue会达到标签的位置,并,并重新进入紧接着在哪个标签后面的循环.
- 一般的break会终端并跳出当前循环
- 带标签的break会中断并跳出标签所指的循环”用于需要跳出多个循环的引用场景不用写多个break”
代码如下:
package cn.java.javadc;
public class Myfor {
public static void main(String[] args) {
int i=0;
outer:
for (; true; ) {
inner:
for (; i < 10; i++) {
System.out.println(i);
if (i==2) {
System.out.println("con");
continue ;
}
if (i==3) {
System.out.println("break");
i++;
break;
}
if (i==7) {
System.out.println("con outer");
i++;
continue outer;
}
if (i==8) {
System.out.println("break outer");
break outer;
}
for (int j = 0; j < 5; j++) {
if (j==3) {
System.out.println("con inner");
continue inner;
}
}
}
}
}
}
构造函数有返回值么
答:构造函数没有返回值,也不能在前面加入void如果加入了void就变成了普通方法了,虽然在我们看来确实返回了对象;
不同参数的方法和普通类型的方法可以形成重载,那不同顺序的形参会重载方法么
答:不同的形参顺序也是方法的重载
finaize()的应用,比如说你必须要达到某种条件才清楚对象的时候可以用finaize()来验证:
代码如下:
package cn.java.javadc;
/*
* 题目:编写名为tank的类,此类的状态可以是满的或空地,其终结条件是,
* 对象被清理时必须处于空状态,请编写finalize()以检验终结条件是否成立.在
* main()中测试tank可能发生的几种情况
* 题目解析:坦克的血量为0的时候才能被清除
*
*
*/
public class Tank {
public static void main(String[] args) {
TankDome tank1=new TankDome();
tank1.eliminate();
new TankDome();//没有被引用就会被清除
System.gc();
}
}
class TankDome{
int blood;
public TankDome() {
this.blood = 100;//如果创建tank对象则赋予100血量的初始值
}
//清除模块
public void eliminate(){
blood=0;
}
@Override
protected void finalize() throws Throwable {
if (blood!=0) {
System.out.println("不能被清除");
}
}
}