1.Java跨平台原理
C/C++语言都是直接编译成针对特定平台的机器码。如果要跨平台,需要使用相应的编译器重新编译。
Java源程序(.java)要先编译成字节码文件(.class),然后字节码文件再通过Java虚拟机(JVM)解析成机器码运行。
字节码文件不面向任何具体平台,只面向虚拟机。
Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但都提供了对应的接口。
Java语言具有一次编译,到处运行的特点,就是编译后的字节码文件可以跨平台运行,前提是该平台具有相应的Java虚拟机。
但是Java的跨平台原理决定了它的性能要比C/C++要低。(因为C是直接执行编码,Java是先将字节码文件解释成机器码再执行)
2.Java的安全性
语言层次的安全性:
Java用引用来代替了强大但又危险的指针。由于指针可进行移动运算,指针可以随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为这个内存地址可能存储着重要数据或者其他程序运行所占用的。
垃圾回收机制:
不需要人为控制内存回收,由于垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄漏。避免程序错误回收核心类库的内存,导致系统崩溃。
异常处理机制:
依赖于try、catch、finally、throw、throws五个关键字
强制类型转换:
只有满足前置转换规则的情况下才能强转成功。
底层安全:
在字节码的传输过程中使用了公开密钥加密机制(PKC)。
在运行环境提供了四级安全性保障机制:
字节码校验器-类装载器-运行时内存分布-文件访问限制
3.Java三大版本
标准版(J2SE)、企业版(J2EE)、微缩版(J2ME):
J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但添加了一些专有类应用场合,API的覆盖范围各不相同
4.JVM?JDK?JRE?
JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个Java实现跨平台的最核心的部分,所有的java程序会首
先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而
是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JVM是Java平台的基础,和实际的机器一
样,它也有自己的指令集,并且在运行时操作不同的内存区域。 JVM通过抽象操作系统和CPU结构,提供了一种与平
台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。JVM的主要工作是解释自己的指令集
(即字节码)到CPU的指令集或对应的系统调用,保护用户免被恶意程序骚扰。 JVM对上层的Java源文件是不关心
的,它关注的只是由源文件生成的类文件(.class文件)。
JRE是java runtime environment(java运行环境)的缩写。光有JVM还不能让class文件执行,因为在解释class的时候
JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以
认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。所以,在你写完java程序编译
成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了(jre里有运
行.class的java.exe)。JRE是Sun公司发布的一个更大的系统,它里面就有一个JVM。JRE就与具体的CPU结构和操作
系统有关,是运行Java程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的地位就象一台
PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运
行。
JDK是java development kit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那 让我们看一
下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行
java时起作用的是以下四个文件夹:bin、include、lib、jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE
包含JVM
bin: 最主要的是编译器(javac.exe)
include: java和JVM交互用的头文件
lib:类库
jre: java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)
总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。eclipse、idea等其他IDE有自己的编
译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选jre路径就ok了。
JDK,JRE,JVM三者关系概括如下:
jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。JRE是JAVA程序运行时需要的运行环境,就是说
如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含
JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
5.八种基本数据类型
6.i++和++i的区别
共同点:
1.都是变量自增加1,都等于i=i+1
2.都仅对变量有效,不是变量会出错
3.单条语句,没有区别
不同点:
不是单条语句
7.&和&& , |和|| 的区别和联系
8.基本数据类型的数据转换
分为自动转换和强制转换
自动转换规则:容量小的数据类型自动转换为容量大的数据类型,这里的容量是指类型表述的范围
强制转换规则:高变低需要强制转换
9.if和switch区别
相同之处:都是分支语句,多超过一种的情况进行判断处理
不同之处:switch更适合用于多分支情况,就是有很多种情况需要判断处理,判断条件类型单一,只有一个入口,在分支执行完
10.while和do-while循环的区别
11.break和continue的作用
12.请使用递归算法计算n!
阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
public class zxc {
public static void main(String[] args) {
long a = zxc.jiecheng(25);
System.out.println(a);
}
public static int jiecheng(int num) {
if (num == 0 || num == 1) {
return 1;
}else {
return num*jiecheng(num-1);
}
}
}
13.递归的定义和优缺点
递归算法是一种直接或者间接调用自身算法的过程,对解决一大类问题十分有效,使算法的描述简洁而且易于理解
特点:
1.递归就是在过程或函数里调用自身
2.在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口
3.递归算法解题通常显得很简洁,但运行效率较低。
14.数组的特征
1.具有相同数据类型的有序集合。
2.数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素。
元素的表示 数组名[下标或者索引]
索引从0开始
数组元素有序的,不是大小顺序,是索引的顺序
3.每个数组元素有默认值 double 0.0; boolean false; int 0
15.冒泡排序
public class zxc {
public static void main(String[] args) {
int array[] = {12,31,32,15,15,1,1,31,3};
int sort[] = zxc.sort(array);
for (int i : sort) {
System.out.print(i+",");
}
}
public static int[] sort(int[] array) {
int temp = 0;
// 外层循环,它决定一共走几趟 //-1为了防止溢出
for (int j = 0; j < array.length-1; j++) {
int flag = 0;//通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
//内层循环,它决定每趟走一次
for (int i = 0; i < array.length-j-1; i++) {
//如果后一个小于于前一个,则换位,从小到大排序(升序)
if (array[i+1] < array[i]) {
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
flag = 1;
}
}
if (flag == 0) {
break;
}
}
return array;
}
}
16.可变参数的作用和特点
https://www.cnblogs.com/uptownBoy/articles/1698335.html
17.类和对象的关系
18.面向过程和面向对象的区别
都是软件开发思想,先有过程再有对象,在大型项目中,针对面向过程的不足推出了面向对象开发思
18.方法重载和方法重写(覆盖)的区别
19.this和super关键字的作用
this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;
this可以调用成员变量,不能调用局部变量;
20.static关键字的作用
21.final和abstract关键字的作用
22.java.lang.Object类的六个常用方法
23.权限修饰符的区别
24.==和equals的区别和联系
25.谈谈Java的多态
父类引用指向的真实子类类型,否则将出现ClassCastException,不是任意的强制转换.
26. 简述Java的垃圾回收机制