Java面试笔记.docx

上传人:b****6 文档编号:12981379 上传时间:2023-06-09 格式:DOCX 页数:70 大小:967.09KB
下载 相关 举报
Java面试笔记.docx_第1页
第1页 / 共70页
Java面试笔记.docx_第2页
第2页 / 共70页
Java面试笔记.docx_第3页
第3页 / 共70页
Java面试笔记.docx_第4页
第4页 / 共70页
Java面试笔记.docx_第5页
第5页 / 共70页
Java面试笔记.docx_第6页
第6页 / 共70页
Java面试笔记.docx_第7页
第7页 / 共70页
Java面试笔记.docx_第8页
第8页 / 共70页
Java面试笔记.docx_第9页
第9页 / 共70页
Java面试笔记.docx_第10页
第10页 / 共70页
Java面试笔记.docx_第11页
第11页 / 共70页
Java面试笔记.docx_第12页
第12页 / 共70页
Java面试笔记.docx_第13页
第13页 / 共70页
Java面试笔记.docx_第14页
第14页 / 共70页
Java面试笔记.docx_第15页
第15页 / 共70页
Java面试笔记.docx_第16页
第16页 / 共70页
Java面试笔记.docx_第17页
第17页 / 共70页
Java面试笔记.docx_第18页
第18页 / 共70页
Java面试笔记.docx_第19页
第19页 / 共70页
Java面试笔记.docx_第20页
第20页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java面试笔记.docx

《Java面试笔记.docx》由会员分享,可在线阅读,更多相关《Java面试笔记.docx(70页珍藏版)》请在冰点文库上搜索。

Java面试笔记.docx

Java面试笔记

1.java语言是强类型还是弱类型语言?

为什么?

Java是强类语言,在使用变量时有如下规则:

变量必须声明,并且初始化以后才能使用。

变量必须有明确的类型(type)。

变量不能重复定义。

    javascript是一种弱类型语言,即变量在声明时,不能明确声明其类型

变量的类型是在运行时确定的,并且可以随时改变

2.JAVA的数据类型有哪些?

    ⑴基本数据类型(八种):

        整型:

byte1字节,short2字节,int4字节,long8字节

浮点型:

float4字节,double8字节

【float类型共32位(不int相同),其中1位为符号位,指数8位,尾数23位。

】【double类型能表示64位,其中1位符号位,11位指数,52位尾数】

【浮点数的字面量默认是double】

字符型:

char2字节【unicode编码值】

boolean型:

boolean1字节【值只有true和false】

隐式类型转换:

正方向:

char→

byte→short→int→long→float→double

负方向:

⑵引用类型(自定义类型):

对象:

比如String

                            数组:

int[]

                            接口:

interface

 

3.JAVA中成员变量和局部变量的区别?

    ⑴成员变量:

是在类范围内定义的(也叫成员属性)

类属性:

使用static修饰的就是类属性。

作用域:

类属性的作用域与这个类的生存范围相同,它作为类的一个成员,与类共存亡。

只要类存在,程序就可以访问该类的类属性。

        实例属性:

不被static修饰的就是实例属性。

作用域:

实例属性则从这个类的实例(对象)被创建开始存在,直到系统完全销毁这个实例,它作为实例(对象)的一个成员,与实例(对象)共存亡。

只要实例存在,程序就可以访问该实例的实例属性。

⑵局部变量:

在一个方法内定义的变量。

(包括方法的形式参数)

    1.形参:

作用域是整个方法体

    2.方法局部变量:

一个代码块中

    3.代码块局部变量:

一个代码块中

注意:

局部变量除了形式参数外,都必须显示初使化(必须显示指定初使值)。

否则不可以访问它们。

形式参数不须显示初使化,它在被调用时由系统完成。

 

4.前++和后++的区别?

    i++,后++,先将i的值作为整个表达的值,然后将i增加1。

++i,先++,先将i增加1,然后将i的值作为整个表达的值。

 

5.短路运算符和非短路运算符的区别?

    短路运算符[条件1&&条件2],如果条件1不成立,则条件2不执行;

非短路运算符[条件1&条件2],两个条件都会执行。

6.怎样取得数组的长度?

数组:

arr.length集合:

list.size()字符串:

str.length()

7.实现数组拷贝(复制)的2种方法?

System.arraycopy(src,srcPos,dest,destPos,length);

src–源数组。

srcPos–源数组中的起始位置。

dest–目标数组。

destPos–目标数据中的起始位置。

length–要复制的数组元素的数量。

    Arrays.copyOf(src,length):

是JDK1.6版本提供的方法,比起System.arraycopy()使用更简便.

    (注:

当然,可以用新建数组用for循环的方式进行复制)

8.java中的4种访问制权限有哪些?

分别作用范围是什么?

(1).public:

最大访问控制权限,对所有的类都可见。

(2).protect:

修饰的,在类内部、同一个包、子类中能访问

(3).default:

包访问权限,即同一个包中的类可以可见。

默认不显式指定访问控制权限时就是default包访问控制权限。

(4).private:

最严格的访问控制权限,仅该类本身可见。

(注:

访问控制修饰符可以修饰类,成员变量,方法,但是修饰类只用public和default)

9.JAVA5的新特性有哪些?

(1)循环(For-each循环)

for(typevariable:

array){body}

for(typevariable:

arrayList){body}

而1.4必须是:

for(inti=0;i

for(inti=0;i

(2)泛型

以ArrayList为例,包括创建一个容器对象和取得容器内对象操作:

1.5ArrayListarrayList=newArrayList();arrayList.get(i)

1.4ArrayListarrayList=newArrayList();  (Type)arrayList.get(i)

(3)自动装箱拆箱

在JDK5.0以前,在原始类型与相应的包装类之间的转化是不能自动完成的。

要完成这种转化,需要手动调用包装类的构造函数,在JDK5.0环境中,可以自动转化:

1.5Integerwrapper=n;    intn=wrapper;

1.4Integerwrapper=newInteger(n);    intn=wrapper.intValue();

自动装包/拆包大大方便了基本类型数据和它们包装类地使用。

自动装包:

基本类型自动转为包装类.(int>>Integer);

自动拆包:

包装类自动转为基本类型.(Integer>>int);

(4)静态导入

静态导入功能对于JDK5.0以前的版本是不支持的。

importstaticjava.lang.Math;

importstaticjava.lang.System;

1.5out.println(sqrt(PI));

1.4System.out.println(Math.sqrt(Math.PI));

(5)可变参数(Varargs)

可变参数使程序员可以声明一个接受可变数目参数的方法。

注意,可变参数必须是函数声明中的最后一个参数。

在JDK1.5之前,可以用重载来实现,但是这样就需要写很多的重载函数。

line1publicvoidwrite(Object…objs){

line2for(Objectobj:

objs)

line3System.out.println(obj);

line4}

 

 

 

 

 

 

 

 

 

 

10.面向对象编程中几种对象组合方式——is-a/has-a/use-a:

(1).is-a组合:

一个类继承具有相似功能的另一个类,根据需要在所继承的类基础上进行扩展。

优点:

具有共同属性和方法的类可以将共享信息抽象到父类中,增强代码复用性,同时也是多态的基础。

缺点:

子类中扩展的部分对父类不可见,另外如果共性比较少的时候使用继承会增加冗余代码。

(2).has-a组合:

has-a组合是在一个类中引用另一个类作为其成员变量。

优点:

可扩展性和灵活性高。

在对象组合关系中应优先考虑has-a组合关系。

缺点:

具有共性的类之间看不到派生关系。

(3).use-a组合:

是一个类中使用到了另外一个类,依赖关系

 

 

11.构造方法(构造器)特点?

Java中的构造器(构造方法)声明在类内部。

方法名与类名一致的方法叫构造方法

构造方法不能声明返回值类型。

构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件(前提条件)。

    子类默认调用父类的无参构造器,如果父类没有无参构造器,那么子类必需显示的去调用父类的有参构造器

    如果一个类没有提供无参构造器,那么编译器将会自动提供一个无参构造器。

12.JAVA中属性和方法的静态绑定和动态绑定?

    静态绑定:

Java根据引用变量类型查找属性

动态绑定:

java根据实际的对象查找方法

13.JavaBean规范?

    1)必须有包(package)

2)Java类,具有无参数构造器

3)有用getXxx()和setXxx()声明的Bean属性

如:

getName()和setName(Stringn)声明的Bean属性为:

name,不是否有实例变

量name无关

boolean类型的get方法可以有两种形式:

getMarried()戒者isMarried()

4)必须实现序列化接口(注:

在学习IO的时候具体学习)

14.static关键字的特点?

    static静态关键字修饰:

属性、方法、内部类、代码块

    static修饰的资源属于类级别,是全体对象实例共享的资源

    static变量在类加载期间初始化

    静态代码块是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执行一次!

15.final关键字的特点?

    final可以修饰类,方法,变量

    final修饰的类,不能再被继承

final修饰的方法,不能覆盖final方法

final修饰的变量

    final的局部变量,只能初始化不能改

    final的方法参数,不能改

final的引用,引用指向不能改,但是对象的属性可以改

16.常见的final类有哪些?

Java的String就是final类,不能被继承!

Math是final类,不能被继承!

Integer、Long、Character等包装类是final类,不能被继承!

17.抽象类和接口的区别?

    抽象类–不具体的类

1抽象方法,只有行为的概念,没有具体的行为实现。

使用:

abstract关键字修饰,并且没有方法体。

2包含抽象方法的类,就一定是抽象类。

使用:

abstract关键字修饰,包含抽象方法。

如:

平面图形一定可以计算面积。

publicabstractclassCRMSystem{

    publicabstractClientaddClient(

        Stringname,Stringqq);

}

3抽象方法和抽象类非常适合作为系统的分析和设计的工具。

4抽象类不能直接创建实例。

可以定义引用变量。

5抽象类只能被继承,一个具体类继承一个抽象类,必须实

现所有抽象方法。

 

接口

1.接口:

全部的方法都是抽象方法,全部的属性都是常量。

接口用来表示纯抽象概念,没有任何具体的方法和属性。

2.不能实例化,可以定义变量。

3.接口变量可以引用具体实现类的实例。

4.接口只能被实现,一个具体类实现接口,必须使用全部的

抽象方法。

5.接口之间可以继承。

6.一个具体类可以实现多个接口,实现多继承现象,表示:

一个概念即是XXX也是XXX.

7.接口中的属性,默认是常量publicstaticfinal

8.接中的方法一定是:

publicabstract

9.实现一个接口,使用关键字implements,实现实际上是

一种继承关系。

接口和实现类是父子类型的关系

 

18.重载和重写的区别?

    重载:

方法名相同,参数不同(参数类型或者长度)

        重载和修饰符和返回类型无关。

        一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。

二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。

实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。

重写:

两同两小一大(规则)

两同:

方法名相同参数类型相同

两小:

返回值类型(基本数据类型要一致,引用类型可以是其子类)

抛出的异常要小(也可以抛出父类型的异常的部分异常,或者不抛出异常)

一大:

访问控制修饰符大

(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。

(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。

(3)只有实例方法才能被重写,超类中的final方法不能被重写。

(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。

19.==和equals()的区别?

    ”==”,比较引用值和基本数据类型是否相等。

    xxx.equals()方法比较对象的内容是否相等。

默认的比较规则是:

比较引用

20.为什么要同时覆盖hashcode()和equals()?

    hashCode()方法要不equals方法一同覆盖(Sun公司规定)

当两个对象equals比较为true时,应具有相同的hashCode()值

当两个对象equals比较为false时,应具有不相同的hashCode()值

hashCode()值要稳定(一致性),一个对象创建以后就不应该再变化

默认的hashCode()值是当前堆对象地址转换的一个整数,这个整数不是内存地址!

在java的中,判断两个对象是否相等的规则是:

首先,判断两个对象的hashCode是否相等

如果不相等,认为两个对象也不相等

如果相等,则判断两个对象用equals运算是否相等

如果不相等,认为两个对象也不相等

如果相等,认为两个对象相等

 

21.String类有哪些常用的方法?

    charAt()

length()

trim()

toLowerCase()

toUpperCase()

indexOf()

lastIndexOf()

endsWith()

startsWith()

substring(intstart,intend)

substring(intstart)

toCharArray()

 

22.String,StringBuilder,StringBuffer的区别?

    String=char[]+操作(复制创建新对象)char[]不可变

StringBuilder=char[]+对char[]操作(处理当前数组内容)char[]可变

1)StringBuilder是变长字符序列

2)StringBuilder方法:

append,insert…都返回当前StringBuilder对象本身的引用

StringBuffer和StringBuilderAPI几乎一样!

StringBuffer是java早期提供的(JDK1.0),速度稍慢,线程安全

StringBuilder是Java5以后提供的(JDK5.0),速度快,非线程安全

 

23.谈谈集合框架的理解?

集合框架包括集合不映射(CollectionandMap)

    List元素有先后次序的集合,元素有index位置,元素可以重复,继承自Collection接口,实现类:

ArrayList,Vector,LinkedList

    List表示有先后次序的对象集合

        ArrayList是使用变长数组算法实现的,ArrayList实现自List

            1)ArrayList和Vector的比较

                Vector(1.0版本提供的),线程安全的,效率稍低,也是使用变长数组算法实现的,继承自List接口

            ArrayList,线程不安全的,效率高速度快(现在较常用)

            2)ArrayList和LinkedList的比较

LinkedList是采用双向循环链表实现的List

            ArrayList是采用变长数组算法实现的的List

                在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

                ArrayList查询速度快,而LinkedList增删速度快

    Set元素无续,不能重复添加,是数学意义上的集合,继承自Collection接口

实现类:

HashSet(是一个只有Key的HashMap),使用Set时要重写hashCode,equals方法

    HashMap以键-值对(关键字:

值)的形式存储对象,关键字key是唯一的、不重复的

1)key可以是任何对象,Value可以任何对象

2)(key:

value)成对放置在集合中

3)重复的key算一个,重复添加是替换操作(会覆盖原来的元素)

4)    HashMap根据key检索查找value值

HashMap新,非线程安全,不检查锁,快

Hashtable旧(JDK1.2版本以前),线程安全,检查锁,慢一点(差的很小)

23.散列表的特点?

    散列表中存放的对象是不连续的,所以称为”散列表”

    散列表的优点:

查找迅速

    在ArrayList中查找Mac,顺序查找,需要查找5次

在HashMap中(底层实现原理是散列表)查找Mac,经过散列运算,仅需1次

    

24.java泛型的作用是什么?

    泛型是Java5以后提出的语法现象,作用是在编译期检查的类型约束(运行期不检查泛型),泛型可以用来约束类中元素的类型

 

25.Collection和Collections的区别?

    Collection是集合接口,下面有子接口,List,Set

    集合的工具类为Collections,同数组的工具类Arrays相同,其中提供了许多的方法,诸如排序、二分查找、打乱、填充等操作。

 

26.内部类的分类?

各有什么特点?

    1)根据位置的不同,Java中的内部类分为四种:

静态内部类

使用static修饰,声明在类体中

静态内部类中可以访问外部类的静态成员

成员内部类

声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能

创建内部类实例

内部类实例可以访问共享外部类的成员变量(很常用)

如:

链表的节点就可以定义为内部类

局部内部类把类声明在方法中,就是局部内部类,作用域

类似局部变量(很少见)

匿名内部类

        匿名类,非常常见,可以写在任何地方,就像一般的语句

语法更象是创建对象:

Dated=newDate(){//…};

匿名类是对原类的一个继承,同时创建了实例,{}就是继承以后的类体

类体中可使用所有类的语法

匿名类不能写构造器

匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现

2)任何内部类都编译成独立的class文件

3)最大的作用:

封装!

 

 

27.怎么将Date和String互相转换?

    

 

28.Java中的异常理解?

    

异常是程序运行过程过程出现的错误,在Java中用类来描述,用对象来表示具体的异常。

Java将其区分为Error与Exception,Error是程序无力处理的错误,Exception是程序可以处理的错误。

1)Error与Exception

Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。

这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Error:

一般指虚拟机相关问题,如虚拟机崩溃,虚拟机出错等这种错误无法恢复或不可捕获,将导致应用程序中断。

对于Error一般不编写针对性代码对齐进行处理。

Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。

程序中应当尽可能去处理这些异常。

2)运行时异常和非运行时异常

运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。

这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。

从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

    自定义异常(自己定义异常表达错误)

MyExceptionextendsException检测(check)异常

MyExceptionextendsRuntimException运行时(runtime)异常

29.JAVA中异常处理的方式有哪些?

    1)try…catch…finally

        try{

//(尝试运行的)程序代码

}catch(异常类型异常的变量名){

    //异常处理代码

}finally{

//

}

注:

子类异常的处理块必须在父类异常处理块的前面,否则会发生编译错误。

finally块中一定会执行吗?

    2)throws,throw

    throw关键字是用于方法体内部,用来抛出一个Throwable类型的异常。

如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。

    throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常。

仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。

 

30.实现序列化的作用?

(implementsSerializable)

    序列化的作用是,将数据分解成字节流,以便存储在文件中或在网络上传输。

 

31.IO流的分类?

以及常用流的写法?

    分为:

字节流和字符流或者输入流和输出流

    InputStreamis=newFi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2