文档库 最新最全的文档下载
当前位置:文档库 › java面试通常问道的问题集锦

java面试通常问道的问题集锦

1.java的main方法为什么是public static void main(String[] args) ?

因为main方法是有Java虚拟机(JVM)加载运行的,而JVM是由Java开发的,既是一个类,该类与我们
编写的类不在一个包内,要想被访问,必须声明为public型的,所以main方法访问类型为public,
而运行时没有产生任何对象,所以要声明为static的,而main方法运行完程序就结束啦,所以没有
返回值,及返回值类型为void,main关键字是习惯,沿用c 语言的。字符串参数时可用的,由控制台
录入,其中的字符串名称是可以改变的,自由符合标识命名习惯就可以。


2.抽象类一定要被继承才有意义,关键字final和abstract不能同时修饰一个类,在继承中子类也不能定义和父类方法名相同,参数不同,放回值类型不同的的方法,因为子类继承父类的方法,如果这样的话,等于是方法重载,但是这样不符合方法重载定义。

3.java靠什么实线跨平台

java源程序[*.java]经过编译器[javac.exe]编译后,生成了目标程序[*.class]是一个字节码文件,该文件中内容不能在任何平台下直接
运行,必须经过java虚拟机 [ jvm],处理后转换成对应平台下可以识别的指令才能运行。sun公司针对不同的平台开发不同的jvm,所以才可以一 次编译,到处运行。从而实现了跨平台。

4.为什么不能用==比较字符串大小

因为字符串是引用数据类型,其变量名称实际上是地址,若用等号比较则比较的是地址而不是字符串本身
所以不能用等号比较。


5.接口不能被实例化,接口里面只能有常量和抽象方法,而抽象类里可以有抽象方法,甚至可以一个抽象方法也没有。
引用数据类型和成员变量都有初始值(静态成员变量即全局变量也有)。静态方法不能直接调用非静态成员变量和方法,可以先创建对象
在.调用,继承抽象类的类一定要复写抽象类的所有抽象方法。一个类要实现多个接口,必须要腹泻所有接口的复写方法。
接口和抽象类可以实例化,通过多态性实现,即通过子类实例化

6.抽象类与 接口的异同点?

相同点:对象都不能实例化,通过多态性,可由其子类实例化。都可以定义一系列标准

不同点:抽象类包括一般方法,抽象方法,常量和变量,可以有构造方法,可实现多个接口(因为抽象类也是类),只支持单继承

接口只包括常量和抽象方法,不能有构造方法,支持多继承,不能继承抽象类,只能继承接口。


7.final finally finalize 三个关键字的用法

final
1 用在变量前
1.1 用在局部变量前
表示该变量只能付一次值,付完值后就不能再改变

1.2 用在成员变量前
表示该变量只能付一次值,要么定义同时初始化
要么在所有的构造方法中初始化
1.3 用在类变量【static】前
表示该变量只能付一次值,必须定时同时初始化

2 用在方法前
表示该方法在子类中不能被复写

3 用在类前

表示该类不能被继承

finalize
垃圾回收线程,一个对象从内存中清除自动调用该方法
finally
是用来处理异常的,无论是否有异常,他的语句都执行。
8.基本数据类型的包装类

所谓基本数值类型的包装类,就是可以直接将简单类型的变量表示为一个类,
在执行变量类型的相互转换时,我们会大量使用这些包装类。java共有六个包 装类,分别是Boolean,Character,Ingter,Float和Double.

例如:
当我们希望把float型转化为double型时:
flaot f1=100.00f;
Flaot F1=new Float(f1);
double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double
值型的方法。

返回值基本方法:doubleValue floatValue intValue

9.基本数据类型和引用数据类型的区别


基本数据类型:大小一定,生存期已知,存储在栈空间中,没有初始值,要想使用必须初始化

引用数据类型(字符串 类 接口 抽象类):大小不定,生存期未知,地址(句柄 引用变量)
存储在栈空间中,new出来的对象由于要动态分配,所以存储在堆空间中。有初始值,数值型的
默认为0 布尔型为false 其他的为null。

10.静态变量静态方法与成员变量成员方法区别? 局部变量与成员变量区别?

静态的又称类的,可通过类名直接调用,静态方法终不能直接使用成员的东西,要想使用必须
创建对象之后才可以。成员方法可以使用静态变量和方法。
全局变量=成员变量,包括静态成员变量和非静态成员变量,静态变量和成员变量都有默认值,
局部变量则没有,要想使用必须初始化。

11.设计模式
12.object类
所有的类都必须直接或间接继承自object类,一切对象都可以向object类转换

他有两个方法很重要,分别是equals和tostring,要想在本类中使用达到想要的效果,就
必须复写该类,以期达到想要效果,equals返回布尔型,tostring返回字符串型数据


13. 如何封装一个成员变量
给成员变量添加访问修饰符private来封装,封装后只有在该类的内部可以调用,若想在该类外部使用,必须提供set/get方法(get是用来获取,只提供此方法表示该成员变量是只读的,
set是用来设置的,只提供此方法表示只能设置不能获取,两个都提供就和共有的差不多)

14.排序问题。

(冒泡法)

1.给数组进行排序
比如对int xx[n]进行排序
for(int i=0;i{
for(int j=0;j{

if(xx[j]>xx[j+1])
{
int t=xx[j];
xx[j]=xx[j+1];
xx[j+1]=t;

}
}
}

给集合排序(对象或者集合里的某一项的一个对象对应的属性)

首先把集合转化为数组(转化为object数组 语法:object 变量名=集合名.toarray()方法,即可),然后定义对象数组,把object
数组中的元素付给定义的新对象数组(注意要强制类型转换),然后对象数组的要排序属性进行排序即可
例如:
System.out.println("------------>借出排行榜");
Vector data=new Vector();//定义泛型集合,里面存储的是DVD类型的元素
Object[] arr=data.toArray();//把集合转化为数组,首先他只能转为object的数组,然后
//定义对象数组把object的元素付给对象数组的
DVD [] arrDVD=new DVD[data.size()];
for (int i = 0; i < arr.length; i++)
{
arrDVD[i]=(DVD)arr[i];
}
//排序 冒泡法
for (int i = 0; i < arrDVD.length-1; i++)
{
for (int j = 0; j < arrDVD.length-i-1; j++)
{
if(arrDVD[j].getJccount(){
DVD temp=arrDVD[j];
arrDVD[j]=arrDVD[j+1];
arrDVD[j+1]=temp;
}
}
}
System.out.println("次数\t\tDVD名称");
for (int i = 0; i < arrDVD.length; i++)
{
System.out.println( arrDVD[i].getJccount()+"\t\t"+ arrDVD[i].getName());
}

15.随机问题
不论是什么问题的随机,其出发点都是从随机数开始,然后套用控制语句,进行完成。随即中不能产生相同的数据,方法是如下:
随机产生30个100以内不同的数
for(int i=0;i<30,i++)
{
int[] a=(int)(Math.random()*100+1);
for(int j=0;j{
if(a[i]==a[j])
{
i--;
break;
}
}
}



16.适配器开发模式
原理:如果我们要利用一个借口(或抽象方法),但是只用到其中的几个方法,没必要全部复写其全部抽象方法。通常我们单独造一个类实现了该接口,然后我们在继承这一个类就可以,这样就可以
只复写我们要用的方法就可以啦。这种开发模式就叫做适配器模式

17.选项随机问题
一般的情况遇到一堆选项(一般指复选)时,要根据选中的选项不同而给于不同的提示与运算,就涉及到选项的问题,选的连贯不连贯,选的个数。这是为了适应结果,我们可以定义一个集合或者字符串数组,来接收可能的全部选项,然后通过定义一个返回值为字符串型参为数组的方法来遍历这个集合,然后利用迭代发来实线结果(首先定义一个空的字符串),在遍历集合的循环中令定义的空字符串来

实现迭代。
18.数据库连接
数据库连接时使用的都是接口,是为了更好的配合几乎所有数据库

19.在string中如果采用直接附值。内存会为他直接开辟一个空间,如果以后在使用直接给一个字符串的化,哪么他们的地址比较结果是true,这相当于给一个内容开辟三个地址。但是使用new出来的则不一样。在string中使用==比较的是地址,即字符串的名称。而使用.equals比较的使具体的内容。一个字符串就是string的匿名对象

相关文档
相关文档 最新文档