java面试基础总结(30页)
- 格式:doc
- 大小:59.00 KB
- 文档页数:28
1.的特点语法简单,面向对象,分布式,安全性,健壮性,解释运行,高效率,与平台无关,多线程,动态性。
2.面向对象的特征继承,封装,多态,抽象(1)继承:子类继承父类的方法和属性构造器不能继承子类的构造器一定会调用父类的构造器实例化子类,会分配所有父类的空间(2)多态:重载方法,方法名一样,方法参数不同的方法(3)抽象:在面向对象分析设计时,可将一些实体作高度抽象定义成抽象类,抽象类没有任何对象,只可作为一个模板用于创建子类,以及为面向对象提供更灵活的多态机制。
(4)封装:类封装了数据及对数据的操作,是程序中最小的模块,禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,使得模块之间的耦合度大大降低;保证了模块具有较好的独立性,程序维护和修改较容易。
3中的8种基本数据类型及数据类型的转换4大类型:逻辑类型:字符类型:整数类型:浮点类型:转换:规则1,当把精度低的变量的值赋给精度高的变量时,系统自动完成数据类型的转换(数据精度从“低”到“高”排序)规则2,当把精度高的变量的值赋给精度低的变量时,必须使用显示类型转换运算。
规则3,与或之间的赋值必须实行强制转换。
4.局部变量与全局变量的区别局部变量:不是声明在类括号里面的变量。
方法的参数和方法内部的变量都是局部变量。
必须要先赋值,后使用,局部变量没有默认初始化值。
同一范围内,不允许2个局部变量命名冲突。
5.什么是形参,什么是实参?实参:方法调用时候实际传递的参数变量(实际的值,相当于赋值)。
形参:方法的参数定义,是临时变量(是个空壳子,相当于声明变量而没有赋值)。
6.怎么理解与:先把i的值赋给,i的值自增1,再把的值赋给i;:先把i的值自增1 ,自增后的i的值赋给,,再把的值赋给i;7与的区别&和都可以用作逻辑与的运算符,表示逻辑与(),当运算符两边的表达式的结果都为时,整个运算结果才为,否则,只要有一方为,则结果为。
还具有短路的功能,即如果第一个表达式为,则不再计算第二个表达式,例如,对于( (“”))表达式,当为时,后面的表达式不会执行,所以不会出现如果将改为&,则会抛出异常。
(33 & >0) y会增长,(33 >0)不会增长&还可以用作位运算符,当&操作符两边的表达式不是类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个位,例如,0x31 & 0x0f的结果为0x01。
8()括号中可以是哪些数据类型。
9.常用的"零"值有哪些?整型的默认值:[0,0,0]类型:[,,]浮点类型:[0.0,0.0,0.0]类型:[]类型:\u000010.数组中的动态初始化与静态初始化静态初始化是指由程序员自己为数组对象每个元素赋值,由系统自动计算出数组长度:如[] []{“”,””,””};动态初始化是指程序员自己指定数组对象的长度,由系统先自动为其赋值,程序中程序员可以为元素重新赋值;如:[] [4];( 0<) {b[i]””; }11.列举出常用的排序方式及代码/** 冒泡排序* i表示轮次* j表示每一轮比较的次数*/([] ) {[] {12,2,34,55,6,1};((()));}[] ([] ) {( 0<1) {( 0<1) {([j]>[1]) { 这一行的j相当于下标[j];[j][1];[1];}}} ;}/*** 插入排序*/([] ) {[] = { 4, 33, 2, 1, 46, 34 };((()));}[] ([] ) {i, j, ;(i = 1; i < ; ) { 后一组的下标最小为1(也是比较次数)= [i];(j = i - 1; j >= 0 < [j]; ) { j>=0;是第一个元素的位置( < [j])[j] = [1];}[j + 1] = ;};/*** 选择排序*/([] ) {[] {12,23,45,66,3,5};((()));}[] ([] ) {的取值范围:01的取值范围:1( 0<1) { 是每次所取数据的下标 1( 1<) {是后半部分的下标12|(26,45,66,3,5)后半部分([i]>[j]) {[i];[i][j];[j];}} ;12.谈谈你对面向对象的理解见白色的基础教程第46页13.构造器的作用是什么?用来描述对象的创建过程的。
构造器的要点:(1)中的构造器声明在类内部(2)方法名与类名一致的方法叫构造方法(3)构造方法不能声明返回值类型(4)构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件14.重写与重载的区别是重载的意思,是覆盖的意思,也就是重写。
重载表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重写表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。
子类方法的访问权限只能比父类的更大,不能更小。
如果父类的方法是类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
至于的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。
如果几个的方法的参数列表不一样,它们的返回者类型当然也可以不一样。
但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载。
这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用()方法时,虽然方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。
可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。
对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。
除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
在覆盖要注意以下的几点:1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,就会根据不同的参数样式,来选择合适的方法执行。
在使用重载要注意以下的几点:1、在使用重载时只能通过不同的参数样式。
例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是(),但是不能为());2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;15.访问控制修饰符有哪些,他们的可见范围分别是什么?:公共的,可以修饰类,方法,成员变量,在任何包中都可以访问。
:受保护地,可以修饰方法,成员变量,在子类中可以访问(父类和子类):默认的,可以修饰类,方法,成员变量,只能在同一包中访问。
:私有的,可以修饰方法,成员变量,只能在类中访问。
16.什么是多态?多态性是指在一般类中定义的属性或方法,被特殊类继承之后,可以具有不同的数据类型或变现出不同的行为。
这样,一个程序可以存在同名的不同方法,不同类的对象可以响应同名的方法,具体的实现方法却不同。
17规范有哪些?(1)必须有包(2)类,具有无参构造器(3)有用()和()声明的属性(4)必须实现序列化接口18修饰符的使用修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。
不加修饰的成员是对象成员,也就是归每个对象所有的。
加修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。
19修饰符的使用不能用来修饰构造方法。
修饰的类,不能被继承。
修饰的方法不能被覆盖(重写)。
修饰的变量,初始化以后就不能被修改。
+来定义常量,常量名全部大写。
20.抽象类与接口抽象类:(1)抽象类,包含抽象方法的类,一定是抽象类,抽象类不能创建对象(2)抽象类不能创建实例,可以定义引用类型的变量(3)抽象方法,没有具体的实现。
没有方法体(4)抽象类只能被继承,一个类继承抽象类,必须实现抽象方法(5)抽象类必须被继承,抽象方法必须被重写(6)抽象方法只需声明,不需要时间。
接口:(特殊的抽象类)(1)全部的方法都是抽象方法,全部的属性都是常量(2)接口用来表示纯抽象概念,没有任何具体的方法和属性(3)接口不能实例化,可以定义常量(4)接口变量可以引用具体实现类的实例(5)接口只能被继承,一个具体类实现接口,必须使用全部的抽象方法(6)接口之间可以继承(7)一个具体类可以实现多个接口,实现多继承现象(8)接口中的属性,默认常量是(9)接口中的方法一定是(10)实现一个接口,使用关键字,实现实际上是一种继承方法。
21类中常用的方法?方法,方法,()方法当需要描述对象的时,重写方法。
有比较两个对象需求,重写方法.当重写,同时也会重写()方法,重写()方法通常会以对象的作为返回值。
22的区别:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成类型。
:是异常处理语句结构的一部分,是异常的统一出口,表示总是执行。
:是类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
不保证此方法总被调用。
23与的区别与具有相同的,性能稍慢。
是非线程安全的,是线程安全的。
24与的区别内部采用的数组存储,还带有算法,不会改变[]数组内容,会使用复制操作生成新对象。
内容数据采用数组存储,还带有算法,这些方法通过改变[]内容来实现,如果容量超出会自动扩容。
表示静态字符串,表示动态字符串。
如果需要大量的字符串修改的处理,使用。
25与的区别与具有相似性,它们都是单列元素的集合。