Java程序员面试题day01
1.jdk和jre有什么区别?各自有什么作用?
jdk是java开发的工具包,主要包含各种的类库和工具如javac/javaw/java,也包括了另外的一个jre,提供了两个不同的虚拟机,jdk的bin目录下有client和server两个文件下的jvm.dll文件;jre作为运行环境,仅仅有一个client下的jvm.dll文件。
1.如何利用jdk 编译和运行应用程序?
javahome如何配置?
进入到java文件的目录下
编译语句:javac HelloWorld.java
执行语句:java HelloWorld.java
3.classpath的作用是什么?
作用:是java程序在编译和运行的时候搜索类的时候用的,实际保存的是一些目录和jar文件的地址;点号代表的是当前的路径。
实际上,java程序在编译和运行时会先在jre的文件夹下找一个叫rt.jar的文件,然后才是classpath指定的路径。
4.如何为java程序动态地指定类的搜索路径
-cp -classpath命令
Javac -cp 添加路径\jar文件路径 自己的类文件
Java -cp 添加路径\jar文件路径 自己的类文件
5.java语言的编译和运行的特点
一个类文件被javac编译后生成一个class文件,该文件是一个字节码文件,这个文件计算机本身无法识别,但是jvm可以识别,jvm加载这些文件,然后将这些字节码转换为机器码,为计算机可以去执行,这也是跨平台的缘故所在。
6.jvm是什么以及其工作原理?
jvm是一种用软件模拟出的计算机,在执行java程序时有一套非常严格的技术规范,也是跨平台依赖的基础。其中有处理器、堆栈、寄存器,也有相应的指令系统。一个java要在jvm上运行,会经过jvm的加载、链接、初始化。类的执行总是从main方法开始的,如果试图执行该类的二进制文件,找不到对应的类的信息,就通过class.forName进行类的加载。然后再进行链接和初始化,类的初始化是对类中申明的静态初始化函数和静态域的初始化构造方法的执行。然后开始执行main方法。
7.java中为什么不用delete语句进行垃圾的回收?
java中堆内存的数据的释放是又垃圾回收机制负责管理的,当java程序中显式地创建了对象后,程序员不用再向写c++程序一样,每次都将堆内存中的数据delete掉,也不用像写c程序一样,每次对堆区数据free掉。因为垃圾回收机制会在这个对象没有被引用时,调用系统的gc方法和finalize方法进行垃圾的回收,此外finalize方法会在对象被真正的回收之前被调用。
8.利用jar命令打包文件
8.javaWeb项目的目录结构、部署、和配置信息
自己的一个项目层次:
.myeclipse空的文件夹
10.ejb是什么?
Enterprise java bean是java ee 的一部分,适合做分布式开发,定义了会话bean 实体bean 还有消息驱动bean.
Session bean:用于接收客户端的请求和实现业务逻辑,可以是有状态的,也可以是无状态的,每次客户端请求时,容器会选择一个sessionBean为客户端服务。
Entity bean:实体对象,主要实现o/r映射,负责将数据库中的表记录映射为内存中的entity对象
Message driven bean:只能接收客户端发送的jms消息,然后再处理,适合做的异步开发。
11.Java中的变量及其作用范围?
被static修饰的静态变量,它属于类本身,在类被加载的时候,会被初始化,随着类的结束而结束其生命周期。
成员变量属于类的实例,是类的对象,随着对象的加载而生成并且初始化,随着对象被当成垃圾回收后而消失。
局部变量是定义在方法内部的变量或者方法本身的参数,在{}中起作用。随着方法的调用而创建,随着方法的执行完毕而消失。
12.Java变量分为哪两种大的数据类型?
基本数据类型:byte short int long float double char作用:存储数据量比较小的数据,存储1个或者几个字节数据,用二进制直接保存数据的值。
引用数据类型:创建的对象 String 的实例 数组 ... ...
存放的是地址。
13.java基本数据类型所对应的包装类
有一定的应用场合:list set中不可以存储基本的数据类型,只可以存储包装类型的数据。
例如,将基本数据类型转换成包装类型:
(1)Int i = 5;
Integer num1 = Integer.valueOf(i);
(2)构造函数:
Num2 = new Integer(i);
(3)实际上,由于java有自动装箱功能
则 Integer num3 = 5;
这个5可以被直接自动装箱成Integer类型。
包装类型转换为基本数据类型:
Integer num = Integer.valueOf(100);
(1)Int.value()方法:num.intValue();
(2)将包装类型赋值给基本类型,自动拆箱:Int res = num;
基本数据类型和包装类型的对应关系:
14.如何理解java中的装箱和拆箱?
是基本数据类型和包装类型之间(还是那8种类型之间其对应关系如上表所示)的相互转换,不用手动地进行类型的转换,该自动转换会在编译的阶段完成。
一个例子:
Integer num = 10;
Sop(num++);
理解这两行代码:
第一步将基本数据类型的10自动装箱成Integer的包装类型,在输出时先将该包装类型自动拆箱成基本数据类型,再进行一个自增的运算。
15.Java的引用和c++指针的联系和区别?
联系:都是指向一块内存地址的,通过引用或者指针来对内存中的数据进行操作。
区别:
<1>类型:引用的值为地址的数据元素,分装的地址,可以转成字符串查看,长度不必关心;c++的指针是一个装了地址的Int型变量,长度一般是计算机的字长。
<2>所占的内存:引用申明时没有实体,不占空间,也就是定义了,但是没有初始化,就不占空间;c++指针如果申明了,但是后面不会用到,则不会分配内存。申明一个指针后,要么给它指定一个已存在的地址,要么分配一个地址。
<3>初始值:引用的初始值为null,c++的初始值不固定。
<4>计算:引用的值不可以计算,c++指针是int,可以进行计算,但是它可能指向一个不属于自己程序使用的地址,对于其他程序是危险的。
<5>作为参数:java的方法参数只是传值,引用作为参数使用时,在函数的内部交换两个引用参数是没有意义的,函数只是交换了参数的copy值,但是在函数内改变一个引用参数的属性是有意义的,因为引用参数的copy所引用的对象和引用参数是同一个对象。C++指针作为参数给函数使用,实际上是所指的的地址上的操作,会影响到指针所指向的地址。
16.简述java中的main方法?
main方法是java程序的入口函数,它是一个公开的,静态的,无返回值的,接受一个String数组参数的方法,其参数args和执行参数是一一对应的,定义在一个类中。
Public class Test{
Public static void main(String[] args){
}}
17.equlas方法和==的区别?
解释:==在运用在基本数据类型时,会去比较他们实际的值用来比较两个对象是不是相等,当运用在引用类型的数据时,会比较地址是否相同,也就是是不是指向的是同一个对象,通过new String()会单独的生成一个新的对象。
equal方法是java.lang.object方法,也是所有的java类都会有的方法,可以被程序员覆盖和重写,通过自己定义的方法来判断两个对象是不是相等,默认的方法和==是相同的。同时,,java.lang.String是一个特殊的类,不可以被继承,equals方法用于比较字符串的字符序列是否完全相同,如果相同才会返回true.
18.java中的循环结构和各自的特点?
While do-while for
19.三目运算符?
表达式1?表达式2:表达式3
表达式1仅仅可以返回true/false 返回true就执行表达式2,否则执行表达式3
20.java中的注释?
四种注释:
行注释 //
块注释 /**/
文档注释/** */
annotation(注解)
文档注释可以将注释信息进入到javadoc文档中;注解会进入到编译层,并对程序的结果产生影响。