一、Java面向对象:
1、super()与this()的区别?
This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而this他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构
造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就
没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super要考虑是否能访问其父类的资源.
2、作用域public,protected,private,以及不写时的区别?
Public:不同包、同一包、类内都可用
Private:类内
Protected:不同包的子类、同一包、类内都可用
不写时:同一包
3、编程输出如下图形。
*****
****
***
**
*
代码如下:
publicclassPrint{
publicstaticvoidmain(String[]args){
for(inti=0;i<5;i++){
for(intj=5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
}
}
4、什么是Java序列化,如何实现Java序列化?(写一个实例)
序列化:
可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内
容读取,转化为一个对象。
处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行
读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作
时所引发的问题。
序列化的实现:
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements
Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:
FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用
ObjectOutputStream对象的writeObject(Objectobj)方法就可以将参数为obj的对象写出
(即保存其状态),要恢复的话则用输入流。
5、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。
重载Overloading一个类多个方法,名称相同,参数个数类型不同。
两者都是Java多态性的不同表现。
Overloaded的方法是可以改变返回值的类型。
1,publicclassCtest()
{
Publicstaticvoidmain()
{
System.out.prinln(8+8+”88”+8+8);
}
}
168888
6、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
答:父类:
packagetest;
publicclassFatherClass
{
publicFatherClass()
{
System.out.println("FatherClassCreate");
}
}
子类:
packagetest;
importtest.FatherClass;
publicclassChildClassextendsFatherClass
{
publicChildClass()
{
System.out.println("ChildClassCreate");
}
publicstaticvoidmain(String[]args)
{
FatherClassfc=newFatherClass();
ChildClasscc=newChildClass();
}
}
输出结果:
C:>javatest.ChildClass
FatherClassCreate
FatherClassCreate
ChildClassCreate
7、用插入法进行排序代码如下
packagetest;
importjava.util.*;
classInsertSort
{
ArrayListal;
publicInsertSort(intnum,intmod)
{
al=newArrayList(num);
Randomrand=newRandom();
System.out.println("TheArrayListSortBefore:");
for(inti=0;i<num;i++)
{
al.add(newInteger(Math.abs(rand.nextInt())%mod+1));
System.out.println("al["+i+"]="+al.get(i));
}
}
publicvoidSortIt()
{
IntegertempInt;
intMaxSize=1;
for(inti=1;i<al.size();i++)
{
tempInt=(Integer)al.remove(i);
if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
{
al.add(MaxSize,tempInt);
MaxSize++;
System.out.println(al.toString());
}else{
for(intj=0;j<MaxSize;j++)
{
if
(((Integer)al.get(j)).intValue()>=tempInt.intValue())
{
al.add(j,tempInt);
MaxSize++;
System.out.println(al.toString());
break;
}
}
}
}
System.out.println("TheArrayListSortAfter:");
for(inti=0;i<al.size();i++)
{
System.out.println("al["+i+"]="+al.get(i));
}
}
publicstaticvoidmain(String[]args)
{
InsertSortis=newInsertSort(10,100);
is.SortIt();
}
}
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable接口和Comparator接口
8、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"
我ABC"而不是"我ABC+汉的半个"。
答:代码如下:
publicstaticvoidsplit(Stringsource,intnum)throwsException
{
intk=0;
Stringtemp="";
for(inti=0;i<source.length();i++)
{
byte[]b=(source.charAt(i)+"").getBytes();
k=k+b.length;
if(k>num)
{
break;
}
temp=temp+source.charAt(i);
}
System.out.println(temp);
}
9、指出下面程序的运行结果。
classA{
static{
System.out.print("1");
}
publicA(){
System.out.print("2");
}
}
classBextendsA{
static{
System.out.print("a");
}
publicB(){
System.out.print("b");
}
}
publicclassHello{
publicstaticvoidmain(String[]ars){
Aab=newB();//执行到此处,结果:1a2b
ab=newB();//执行到此处,结果:1a2b2b
}
}
注:类的static代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的
加载,首先要执行其基类的构造,再执行其本身的构造
10、抽象类和接口的区别?
(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:publicstaticfinal,抽象类字段默认是"friendly"(本包可见)
当功能需要累积时用抽象类,不需要累积时用接口。
11、什么是类的返射机制?
通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、
modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是返
射、struts、hibernate都是通过类的返射进行开发的。
12、类的返射机制中的包及核心类?
java.lang.Class
java.lang.refrection.Method
java.lang.refrection.Field
java.lang.refrection.Constructor
java.lang.refrection.Modifier
java.lang.refrection.Interface
13、得到Class的三个过程是什么?
对象.getClass()类.class或Integer.type(int)Integer.class(java.lang.Integer)
Class.forName();
14、如何唤起类中的一个方法?
产生一个Class数组,说明方法的参数
通过Class对象及方法参数得到Method
通过method.invoke(实例,参数值数组)唤醒方法
15、如何将数值型字符转换为数字(Integer,Double)?
Integer.parseInt(“1234”)
Double.parseDouble(“123.2”)
16、如何将数字转换为字符?
1+””
1.0+””
17、如何去小数点前两位,并四舍五入?
doubled=1256.22d;
d=d/100;
System.out.println(Math.round(d)*100);
18、如何取得年月日,小时分秒?
Calendarc=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,31);
System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+"
"+c.get(Calendar.DAY_OF_MONTH));
19、如何获取某个日期是当月的最后一天?
当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。
取下一个月的第一天,下一个月的第一天-1
publicstaticvoidmain(String[]args)
{
Calendarc=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,30);
Calendarc1=(Calendar)c.clone();
System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+"
"+c.get(Calendar.DAY_OF_MONTH));
c.add(Calendar.DAY_OF_MONTH,1);
if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))
{
System.out.println("是最后一天");
}
else
{
System.out.println("不是取后一天");
}
}
20、float型floatf=3.4是否正确?
报错,应当是floatf=3.4f
如果是floatf=3(整数)正确
21、说出一些常用的类,包,接口,请各举5个
常用的类:BufferedReaderBufferedWriterFileReaderFileWirterStringInteger
常用的包:java.langjava.awtjava.iojava.utiljava.sqljavax.xmljavax.sevlet
javax.ejb.java.netjavax.faces
常用的接口:ListMapDocumentNodeListEjbObjectEjbHomeSessionBean
EntityBean
22、Java中会存在内存泄漏吗,请简单描述。
会。如:inti,i2;return(i-i2);//wheni为足够大的正数,i2为足够大的负数。结果
会造成溢位,导致错误。
23、Java中实现多态的机制是什么?
静态的多态:方法名相同,参数个数或类型不相同。(overloading)
动态的多态:
子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法
实现接口的实例传与接口的引用调用的实现类的方法。
24、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
动态内存
存放类实例
静态内存
类本身
垃圾收集主要针对的是动态内存,一般当内存不够用时会进行垃圾收集。
或通过System.gc()手动收集,但不保证一定执行。
25、静态变量和实例变量的区别?
statici=10;//常量
classAa;a.i=10;//可变
静态方法可以调用静态变量。
实现方法可以调用静态变量、实例变量
26、是否可以从一个static方法内部发出对非static方法的调用?
不可以,如果其中包含对象的method();不能保证对象初始化.
27、写clone()方法时,通常都有一行代码,是什么?
Clone有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
28、Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在
try块中可以抛出异常吗?
Try:执行部分,产生异常
Catch:捕捉异常
Finally:不管有没有异常都执行
Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。
Throw:抛出一个异常
在try中可以抛出异常,一般与声明的异常相同。
自定义异常要继承于Exception或Exception的子类
29、冒泡排序法
//相邻两个数比较,将最小或最大的放到后面,最后面数的不参与比较
publicclassBubbleSort{
privatestaticintal[]=newint[10];
publicBubbleSort(){
al[0]=2;
al[1]=3;
al[2]=23;
al[3]=45;
al[4]=1;
al[5]=67;
al[6]=23;
al[7]=80;
al[8]=35;
al[9]=72;
}
publicstaticvoidmain(String[]args){
BubbleSortbs=newBubbleSort();
System.out.println("排序前:");
display(al);
for(inti=0;i<al.length;i++){
for(intj=0;j<al.length-i-1;j++){
if(al[j]>al[j+1]){
swap(j,j+1);
}
}
}
System.out.println();
System.out.println("排序后:");
display(al);
}
privatestaticvoiddisplay(int[]al2){
for(inti=0;i<al2.length;i++){
System.out.print(al2[i]+"");
}
}
privatestaticvoidswap(inti,intj){
inttemp=al[i];
al[i]=al[j];
al[j]=temp;
}
}
30、StringandStringBuffer的区别?
String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。
StringBuffer:长度可变,可以将多个字符串值直接联合,效率高
31、用Java代码编写堆栈
publicclassStack{
int[]data;
intmaxSize;
inttop;
publicStack(intmaxSize){
this.maxSize=maxSize;
data=newint[maxSize];
top=-1;
}
/**
*依次加入数据
*@paramdata要加入的数据
*@return添加是否成功
*/
publicbooleanpush(intdata){
if(top+1==maxSize){
System.out.println("栈已满!");
returnfalse;
}
this.data[++top]=data;
returntrue;
}
/**
*从栈中取出数据
*@return取出的数据
*/
publicintpop()throwsException{
if(top==-1){
thrownewException("栈已空!");
}
returnthis.data[top--];
}
publicstaticvoidmain(String[]args)throwsException{
Stackstack=newStack(1000);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
while(stack.top>=0)
{
System.out.println(stack.pop());
}
}
}
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习