1.Java的特点语法简单,面向对象,分布式,安全性,健壮性,解释运行,高效率,与平台无关,多线程,动态性。2.面向对象的特征继承,封装,多态,抽象(1)继承:子类继承父类的方法和属性构造器不能继承子类的构造器一定会调用父类的构造器实例化子类,会分配所有父类的空间(2)多态:重载方法,方法名一样,方法参数不同的方法(3)抽象:在面向对象分析设计时,可将一些实体作高度抽象定义成抽象类,抽象类没有任何对象,只可作为一个模板用于创建子类,以及为面向对象提供更灵活的多态机制。(4)封装:类封装了数据及对数据的操作,是程序中最小的模块,禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,使得模块之间的耦合度大大降低;保证了模块具有较好的独立性,程序维护和修改较容易。3.java中的8种基本数据类型及数据类型的转换4大类型:逻辑类型:boolean字符类型:char整数类型:byte,short,int,long浮点类型:float,double转换:规则1,当把精度低的变量的值赋给精度高的变量时,系统自动完成数据类型的转换(数据精度从“低”到“高”排序)规则2,当把精度高的变量的值赋给精度低的变量时,必须使用显示类型转换运算。规则3,char与byte或short之间的赋值必须实行强制转换。4.局部变量与全局变量的区别局部变量:不是声明在类括号里面的变量。方法的参数和方法内部的变量都是局部变量。必须要先赋值,后使用,局部变量没有默认初始化值。同一范围内,不允许2个局部变量命名冲突。5.什么是形参,什么是实参?实参:方法调用时候实际传递的参数变量(实际的值,相当于赋值)。形参:方法的参数定义,是临时变量(是个空壳子,相当于声明变量而没有赋值)。6.怎么理解i++与++ii++:先把i的值赋给i++,i的值自增1,再把i++的值赋给i;++i:先把i的值自增1,自增后的i的值赋给i++,,再把++i的值赋给i;7.&与&&的区别&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str!=null&&!str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33&++y0)y会增长,If(x==33&&++y0)不会增长&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31&0x0f的结果为0x01。8.switch()括号中可以是哪些数据类型。char/short/int/byte9.常用的零值有哪些?整型的默认值:[0,0,0]boolean类型:[false,false,false]浮点类型:[0.0,0.0,0.0]String类型:[null,null,null]char类型:\u000010.数组中的动态初始化与静态初始化静态初始化是指由程序员自己为数组对象每个元素赋值,由系统自动计算出数组长度:如String[]a=newString[]{“Hellow”,”World”,”Yes”};动态初始化是指程序员自己指定数组对象的长度,由系统先自动为其赋值,程序中程序员可以为元素重新赋值;如:String[]b=newString[4];for(inti=0;ib.length;i++){b[i]=i+”hello”;}11.列举出常用的排序方式及代码/**冒泡排序*i表示轮次*j表示每一轮比较的次数*/publicstaticvoidmain(String[]args){int[]arr={12,2,34,55,6,1};System.out.println(Arrays.toString(bubbleSort(arr)));}publicstaticint[]bubbleSort(int[]arr){for(inti=0;iarr.length-1;i++){for(intj=0;jarr.length-i-1;j++){if(arr[j]arr[j+1]){//这一行的j相当于下标inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}returnarr;}/***插入排序*/publicstaticvoidmain(String[]args){int[]arr={4,33,2,1,46,34};System.out.println(Arrays.toString(insertSort(arr)));}publicstaticint[]insertSort(int[]arr){inti,j,temp;for(i=1;iarr.length;i++){//后一组的下标最小为1(也是比较次数)temp=arr[i];for(j=i-1;j=0&&temparr[j];j--){//j=0;是第一个元素的位置if(temparr[j])Arr[j]=arr[j+1];}arr[j+1]=temp;}returnarr;}/***选择排序*/publicstaticvoidmain(String[]args){int[]arr={12,23,45,66,3,5};System.out.println(Arrays.toString(number(arr)));}publicstaticint[]number(int[]arr){//i的取值范围:0~arr.length-1//j的取值范围:i+1~arr.lengthfor(inti=0;iarr.length-1;i++){//i是每次所取数据的下标j=i+1for(intj=i+1;jarr.length;j++){//j是后半部分的下标12|(26,45,66,3,5)后半部分if(arr[i]arr[j]){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}returnarr;12.谈谈你对面向对象的理解见白色的java基础教程第46页13.构造器的作用是什么?用来描述对象的创建过程的。构造器的要点:(1)java中的构造器声明在类内部(2)方法名与类名一致的方法叫构造方法(3)构造方法不能声明返回值类型(4)构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件14.重写与重载的区别Overload是重载的意思,Override是覆盖的意思,也就是重写。重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;15.访问控制修饰符有哪些,他们的可见范围分别是什么?public:公共的,可以修饰类,方法,成员变量,在任何包中都可以访问。protected:受保护地,可以修饰方法,成员变量,在子类中可以访问(父类和子类)default:默认的,可以修饰类,方法,成员变量,只能在同一包中访问。private:私有的,可以修饰方法,成员变量,只能在类中访问。16.什么是多态?多态性是指在一般类中定义的属性或方法,被特殊类继承之后,可以具有不同的数据类型或变现出不同的行为。这样,一个程序可以存在同名的不同方法,不同类的对象可以响应同名的方法,具体的实现方法却不同。17.JavaBean规范有哪些?(1)必须有包(2)java类,具有无参构造器(3)有用getXXX()和setXxx()声明的Bean属性(4)必须实现序列化接口18.Static修饰符的使用static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。不加static修饰的成员是对象成员,也就是归每个对象所有的。加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。19.Final修饰符的使用final不能用来修饰构造方法。final修饰的类,不能被继承。final修饰的方法不能被覆盖(重写)。final修饰的变量,初始化以后就不能被修改。final+static来定义常量,常量名全部大写。20.抽象类与接口抽象类:abstract(1)抽象类,包含抽象方法的类,一定是抽象类,抽象类不能创建对象(2)抽象类不能创建实例,可以定义引用类型的变量(3)抽象方法,没有具体的实现。没有方法体(4)抽象类只能被继承,一个类继承抽象类,必须实现抽象方法(5)抽象类必须被继承,抽象方法必须被重写(6)抽象方法只需声明,不需要时间。接口:interface(特殊的抽象类)(1)全部的方法都是抽象方法,全部的属性都是常量(2)接口用来表示纯抽象概念,没有任何具体的方法和属性(3)接口不能实例化,可以定义常量(4)接口变量可以引用具体实现类的实例(5)接口只能