面试自己总结的一些java基础知识

来源:转载

1. k=k++; k++;的区别 ++问题的研究,可以结合我们写循环for条件中的i++***************************************
int i=0;
i=i++;system.out.println(i); >> 0
***************************************
int i=0;
i++;system.out.println(i); >> 1
***************************************
int i=0;
i=i++ + ++i; //0+(1+1)=2
int j=0;
j = ++j + j++ + j++ + j++; //1+(1)+(1+1)+(2+1)=7
system.out.println(i+" "+j); >>2 7
***************************************
j = ++j + j++ + j++ + j++ + ++j + ++j + j++; //1+(1)+(1+1)+(2+1)+(4+1)+(6)+6=24


2.在jdk安装之后,为什么可以在cmd命令行窗口中直接运行jsvs命令,而javac命令去报错,屏幕显示:
“javac”不是内部命令或外部命令,也不是可运行的程序或批处理文件。

java与javac是JDK在同一个子目录里面的两个文件,为什么可以直接运行java,而不能直接运行javac呢?
原来,Sun公司为了方便大家在安装完JDK后马上可以运行java类文件,在后台悄悄的地加入Path的搜索路径中,
因此可以直接运行java命令(但是看不到它到底是在哪里设置的,无论在用户的Path,还是itong的Path设置中
均找不到这个java存放的路径)。但是是Sun所做的到此为止,其他的JDK的命令,一概不管,需要由用户自己添
加到搜索路径当中。


3.x=x+1, x+=1, x++的效率哪个最高?
x=x+1最低,因为它的执行如下。
(1)读取右x的地址;
(2)x+1;
(3)读取左x的地址;
(4)将右值传给左边的x(编译器并不认为左右x的地址相同)。
x+=1其次,它的执行如下:
(1)读取右x的地址;
(2)x+1;
(3)将得到的值传给x(因为x的地址已经读出)。
x++最高,它的执行如下:
(1)读取右x的地址;
(2)x自增1。
答案:x++效率最高。

4.public class Test {
public static void main(String[] args) {
byte b=2,c=3;
byte f=b+c; // 此处报错 -> byte f=(byte)(b+c);
System.out.println(f);
}
}
Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。因此,
如果把两个byte类型的值相加,最后会得到一个int类型的结果,如果需要得到byte类型结果,必须将这个int类型的结果显式的转换为byte类型
byte f=(byte)(b+c);

如:short s=1;s=s+1;报错,可以改成以下代码,需要显式的强制转换
-> short s=1;
s=(short)(s+1);


5.将整数转换为二进制、八进制、十六进制
Integer i=34; //这里用的是包装类,转换为二进制
String s=i.toBinaryString(i);
System.out.println(s); >> 100010


6.从表单接收的数据都是字符串类型,如果在一个文本框中去捕获某一个人的年龄,就要用
Integer.parseInt(txtInputValue.getText());

7.static主函数中直接调用函数时要申明是静态的方法
public class inc {
public static void main(String[] args) {
String i = "123", s;
s = getStr(i);
}

private String getStr(String s) { // -> private static String getStr(String s)
StringBuffer sb = new StringBuffer();
for (int j = s.length() - 1; j >= 0; j--) {
sb.append(s.charAt(j));
}
return sb.toString();
}

}


8.什么时候用assert?
assert是断言。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。如果表达式计算为false,
那么系统会报告一个assertionerror。它用于调试目的。
assert(a>0);//throw an Assertionerror if a<0;
答案:可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。
不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。
不过,既可以在公有方法中利断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。



分享给朋友:
您可能感兴趣的文章:
随机阅读: