java面试合集(1)

146 阅读5分钟

学习java.java企业级实战项目

1.1  Java介绍 Java是面向对象的,跨平台的,它通过java虚拟机来进行跨平台操作,它可以进行自动垃圾回收的(c语言是通过人工进行垃圾回收)。

java还会进行自动分配内存。(c语言是通过指定进行分配内存的),只需要new一个对象,这个对象占用了多少空间,不需要我们来管,java虚拟机负责管这些,用完之后也不需要我们来释放,java虚拟机会自动释放。

1.2  J2SE、J2EE、J2ME三者区别 Java SE = Java Standard Edition=j2se = java  标准版

Java EE = Java Enterprise Edition=j2ee= java 企业版

Java ME = Java Mobile Edition=j2me = java  移动版

 

三者特点:

J2SE主要用于桌面程序(swing),控制台开发(main程序)。

J2EE企业级开发(JSP,EJB,Spring MVC,Struts,hibernate,ibatis等),用于企业级软件开发,网络开发,web开发。

J2ME嵌入式开发(手机,小家电,PDA)。[苹果的ios,黑莓]。

 

三者之间的关系:

Java SE(Java Platform,Standard Edition,Java标准版)就是基于JDK和JRE的。Java SE为Java EE提供了基础。Java EE除了基于我们这个所谓的Java SE外,还新加了企业应用所需的类库。

1.3  JDK、JRE、JVM区别******************** Jdk【Java Development ToolKit】就是java开发工具箱, JDK是整个JAVA的核心里边包含了jre,它除了包含jre之外还包含了一些javac的工具类,把java源文件编译成class文件,java文件是用来运行这个程序的,除此之外,里边还包含了java源生的API,java.lang.integer在rt的jar包里边【可以在项目中看到】,通过rt这个jar包来调用我们的这些io流写入写出等。

 

JDK有以下三种版本:

J2SE,standard edition,标准版,是我们通常用的一个版本

J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序

J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序

 

Jre【Java Runtime Enviromental】是java运行时环境,那么所谓的java运行时环境,就是为了保证java程序能够运行时,所必备的一基础环境,也就是它只是保证java程序运行的,不能用来开发,而jdk才是用来开发的,所有的Java程序都要在JRE下才能运行。

包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。Jre里边包含jvm。 

 

Jvm:【Java Virtual Mechinal】因为jre是java运行时环境,java运行靠什么运行,而底层就是依赖于jvm,即java虚拟机,java虚拟机用来加载类文件,java中之所以有跨平台的作用,就是因为我们的jvm。

 

三者关系:J2se是基于jdk和jre,JDK是整个JAVA的核心里边包含了jre,Jre里边包含jvm。

1.4 JDK常用的包************* java.lang: 这个是系统的基础类,比如String、Math、Integer、System和Thread,提供常用功能。

java.io: 这里面是所有输入输出有关的类,比如文件操作等。

java.net: 这里面是与网络有关的类,比如URL,URLConnection等。

java.util : 这个是系统辅助类,特别是集合类Collection,List,Map等。

java.sql: 这个是数据库操作的类,Connection,Statememt,ResultSet等。

数据类型

大小

byte(字节)

1(8位)

shot(短整型)

2(16位)

int(整型)

4(32位)

long(长整型)

8(32位)

float(浮点型)

4(32位)

double(双精度)

8(64位)

char(字符型)

2(16位)

boolean(布尔型)

1位

1.5 Java中的基本数据类型***************

附加:

String是基本数据类型吗?(String不是基本数据类型) 是引用数据类型

String的长度是多少,有限制?(长度受内存大小的影响)

1.6 Java中switch接受的几种数据类型 Short, int, byte,char

enum(JDK1.5以后支持)

String(JDK1.7以后支持)

1.7 String、StringBuffer、StringBuilder区别*********************** String

字符串常量

不可变

使用字符串拼接时是不同的2个空间。

StringBuffer

字符串变量

可变

线程安全,字符串拼接直接在字符串后追加。

StringBuilder

字符串变量

可变

非线程安全,字符串拼接直接在字符串后追加。

 

1、 StringBuilder执行效率高于StringBuffer高于String。

2、 String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer是线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于StringBuffer。

3、 对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder。

4、 另一种说法,JDK1.6做了优化,通过String声明的字符串在进行用“+”进行拼接时,底层调用的是StringBuffer,所以性能上基本和后两者没有什么区别。

1.8 Char型变量能不能存储一个汉字?*********************

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

1.9 ==和equals方法的区别 “==”如果前后比较的是对象,则比较的是对象的地址,如果前后是数字,则比较的数值。

“equals”如果前后是对象,比较的是对象的地址。如果比较的对象重写了equals方法,则有可能比较的是“值”。像八个基本数据类型的封装类、String、File、Date都比较的是值。

1.10 静态变量和实例变量的区别************************************

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。

总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。