JAVA基础面试题

一.           java语言基础:

1、合法标识符:

答:以字母,“_”,“$“符号开头,可以包含字母,“_”,“$“和数字;

2、八大类型以及各种整数类型的取值范围:

答:byte 8位(-2^7~2^7-1)、short 16位(-2^15~2^15-1)、int 32位(-2^31~2^31-1)、long 64位(-2^63~2^63-1)

float 32位单精度浮点数、double 64位双精度浮点数、boolean、char单一的 16 位 Unicode 字符等;

  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换;

  • 转换过程中可能导致溢出或损失精度;

  • char型变量中能不能存贮一个中文汉字?为什么?

  • 答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。

3、&(位运算符)与&&(关系运算符)区别:

答:&比较两个二进制是否为1;而&&比较两边是否为true,只有两边都为true时才为true;

4、if与else语句:

答:一个判断中可以有多个if、if else语句,但是只能有一个else;else可以没有;

5、switch里面数据类型包括:

答:整型(byte,short,int),char,枚举(重点);

int i = 5;
        switch(i){
        case 0:
            System.out.println("0");break;
        case 1:
            System.out.println("1");break;
        case 2:
            System.out.println("2");break;
        default:
            System.out.println("default");break;
        }

default可以放在中间吗?多个case可以共用一条语句;

可以,但是一般default放在最后

6、while循环:

答:当while内条件为true时,循环继续执行,当while内条件为false时才退出循环;若一开始就为false时程序只执行do范围内语句一次;

Given:

10.int x=0;

11.int y=10;

12. do {

l3. y--;

14. ++x;

15. } while (x < 5);

16. System.out.print(x + "," + y);

Answer:5,5

7、break与continue区别:

答:continue是退出本次循环,继续下一次循环,而break是退出整个循环体;

8、关于可变长参数:

答:a、参数列表中最多只能出现一次可变长参数;

b、如果参数中包含多个参数的话,那么可变长参数只能出现在最后面的位置;

c、可变长参数可实现方法的重载(重点);

public class Demo {
    public static int sum(int n, int... nums) {
        for (int i = 0; i < nums.length; i++) {
            n = n + nums[i];
        }
        return n;
    }
    public static void main(String[] args) {
        int s1 = sum(1, 2);
        int s2 = sum(1, 2, 3);
        int s3 = sum(1, 2, 3, 4);
        int s4 = sum(1, 2, 3, 4, 5);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
    }
}

9、静态常量初始化两种方式:

答:静态常量必须显示的初始化;a、通过构造器进行初始化,b、只能用静态代码块初始化;

public class Test{

public static String a="";

public Test(){a="1";//后初始化};

static{a="2";//先初始化}

}

10、Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法);A继承B,A是子类,B是父类(基类);成员变量不继承;

父类静态成员--子类静态成员;

父类静态初始化块--子类静态初始化块;

父类实例成员和实例初始化块--父类构造方法;

子类实例成员和实例初始化块--子类构造方法;

11、不同访问修饰符对类成员的访问范围:

作用域

当前类

同一package

子孙类

其他package

public

protected

×

friendly(不写时默认)

×

×

private

×

×

×

12String stringBuffer的区别:

答:String创建的字符串不能修改;而stringBuffer定义的字符串可以修改;

new String("hello")创建了几个对象?

答案:创建了两个对象

String temp="hello";//在常量池中

String str=new String(temp);//在堆上

13、final, finally, finalize的区别。

  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。String类即是final类;

    finally是异常处理语句结构的一部分,表示总是执行。

    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

14int Integer 有什么区别?

答:a、Integer是对象类型,而int是基本数据类型;

b、类可以是null,但基本数据类型不能为空;

17Math.round11.5)等于多少? Math.round-11.5)等于多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;Math.round(-11.6)返回(long)-12;

正数:小数点后第一位>=5,+1;负数,小数点后第一位>5;+1;

18、怎样将浮点数(float)相加 ? Float 好像没有办法?

答:请注意 float 和 Float 是不同的,前者是 Java 基本类型之一, 而后者却是class。您应该将源代码改为:

float One;

float Two;

float Hard = One + Two;

Float One = new Float(1.0);

Float Two = new Float(2.0);

Float Hard = new Float(One.floatvalue() + Two.floatvalue());

19如何将字串String转换成整数int

答:1)int i = Integer.parseInt(“String”);

20、如何将整数 int 转换成字串 String

有三种方法:

1)String s = String.valueOf(i);

2)String s = Integer.toString(i);

3)String s = "" + i;

21什么是J2EE,J2SE,J2ME?

答:J2SE主要用于开发界面平台软件的;

J2ME主要用于开发嵌入式程序,如:手机软件程序等;

J2EE主要是基于WEB服务器的开发B/S结构企业级程序;

22、Java中的属性和字段有什么区别?

答:Java中的属性,通常可以理解为get和set方法。而字段通常叫做“类中定义的成员变量”。

23、值类型与引用类型变量的区别?

答:值类型变量是基本数据类型的一个变量;而引用类型变量是一个对象类型引用的变量;

24、隐式参数与显示参数?

答:显示参数是明显列在方法声明中,而隐式参数没有出现在方法声明中;

隐式参数,如,关键字this;

this代表对象的引用(谁调用就代表谁);
super代表当前子类对父类的引用。

25、什么是实例域、实例、实例变量?

答:实例域就是指定义类时的最外层的那两个大括号那个范围。

实例就是你new出来的类的对象引用。

实例变量:private(访问修饰符) int(数据类型) a(实例变量)=0; 

实例变量不能标识为 abstract、synchronized 、native 或 strictfp。不能用JAVA关键字

26、什么是标识符、修饰符、访问修饰符?

(1)标识符:“_”、“$”

(2)修饰符:final、synchronized、abstract、

(3)访问修饰符:public、protected、default、private

27、一个类在new后,其静态代码块会执行吗?

答:一个类在new的时候即执行其静态代码块;执行完毕之后不会再执行;

二.类/接口/枚举/封装类:

1一个类为什么要做成抽象类?接口?

答:a、减少代码的重复;b、解耦合;

接口与抽象类:一个类实现接口必须实现接口所有方法,而继承抽象类只需实现抽象方法,非抽象方法可不实现,这样就减少了这个类不需要的代码的重写性;

2匿名内部类是否可以继承其他类,是否可以实现接口?

答:匿名内部类必须扩展一个基类或实现一个接口,但是不能有显式的继承和实现子句;

3、静态内部类与普通内部类区别:

答:a、静态内部类实例化的时候不必先实例化外围类,可以直接实例化内部类,而对于非静态内部类必须先实例化其外部类,才能再实例化本身;

b、静态内部类没有了指向外部类的引用;

c、在任何非静态内部类中,都不能有静态数据、方法、静态类等;

4、为什么需要使用内部类呢?其主要原因有以下三点:

答:a、内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。

b、内部类可以对同一个包中的其他类隐藏起来。

c、当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

 

三.面向对象编程:

1请问java的三大特性是什么?它们各有什么特点?

答:a、封装:将一个类的成员属性设置成私有的,再提供get和set方法供外部访问;即这样的封装类不会被外界所改变,只能给外界使用;

    b、继承:一个子类继承一个父类,继承父类中所有方法,不能继承父类中成员变量;子类本身又可以有另外的方法,即子类具有可扩展性特性;

c、多态(重写):两种,一种是重写,重写就是子类重写父类中方法(方法名、返回类型(子类的返回类型必须相同或是父类返回类型的子类)和参数类型必须一致);

另外一种是重载,重载是在一个类中的方法名相同,参数类型必须不同(或它们有不同的参数个数),返回类型可以相同,可以不同;

2类与对象之间的关系:

答:a、关联:一个类受另外一个类影响,一个Driver类里面只跟一个Car类变量,即在Driver类中的方法内传一个car属性对象,强耦合关系;

b、依赖:一种使用关系,很弱的一种耦合。driver开几种类型的车,即重载,drive(plane);drive(car);这个时候drive与plane的关系即为依赖关系;

c、聚合:聚合关联 Aggregation:弱'拥有'关系,A对象可以包含B对象,但B不是A的一部分;

d、组合:是一种强的‘拥有’关系,体现严格的部分和整体的关系,

e、泛化:继承

f、实现:接口

3、类与对象间的结构关系:

纵向关系:泛化(包括类继承、接口继承、实现)

横向关系:关联(包括一般关联、聚合、组合)

 

4.面向对象理解

什么是OOP?什么是类?请对比类和对象实例之间的关系。OOP是面向对象编程缩写。指的是用对象的观点来组织与构建系统,对象是类的实例化。对象通常作为计算机模拟思维,表示真实世界的抽象。类是静态的,对象是动态的,类负责产生对象,可以将类当成生产对象的工厂。

6、UML图分几类?

答:常用的UML图:

A、用例图:帮助开发团队以一种可视化的方式了解系统功能需求,比如:角色与用例之间关系;

B、 类图:三部分描述,上面是类名、中间是属性、下面是方法;完整的类图,应该具有指向其父类关系,并且具有与之关联的部分;

C、 时序图:显示不同对象之间的调用关系;

D、状态图:某个类所处的不同状态或者是该类的状态转换信息:

E、 活动图:表示在处理某个活动时,两个或者更多类对象之间的过程控制流。

F、 组件图:显示系统中软件与其他软件的依赖关系:

G、部署图表示该软件系统如何部署到硬件环境中。

静态(系统结构):用例图、类图、对象图、组件图、部署图

动态(系统行为):时序图、协作图、状态图、活动图

五.I/O流:

1、在Java语言中,如何列出PC机文件系统中的所有驱动器名?

答:在Java 2版本中,java.io包中的File类新增加了方法listRoots()可以实现这一功能;

2IO流的三种分类方式:

    a.按流的方向分为:输入流和输出流;
    b.按流的数据单位不同分为:字节流和字符流;
c.按流的功能不同分为:节点流和过滤流;
3、IO流的四大抽象类:
(1)字节流:
InputStream(读数据):所有字节输入流的祖先;(从外部读取文件数据到程序中)
OutputStream(写数据):所有字节输出流的祖先;(将程序中的数据输出到外部文件中)
(2)字符流:Reader:所有读取字符输入流的祖先;
Writer :所有写入字符串的祖先;

 

4、文件读写的基本类:

(1)、读取字节流:

文件àFileInputStreamàBufferedInputStreamàDataInputStreamà数据;

(2)、写入字节流:

数据à DataOutputStream à BufferedOutputStream à FileOutputStream à文件;

(3)、该程序接受键盘输入(从键盘读取数据):

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));   

String str=in.readLine();
(4)、写入字符流:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\test.txt")));

 

out.write(“dagdagd”);

 

六.集合和泛型

1、说出ArrayList,Vector, LinkedList的存储性能和特性

答:ArrayList,Vector, 查询数据快,插入慢,Vector是线程安全的,LinkedList查询数据慢,插入速度快;list有序可重复;set不可重复且无序;

2、Collection 和 Collections的区别

答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

3、HashMap和Hashtable的区别。

答:HashMap是线程不安全的,允许有null的key值或者value值;

Hashtable是线程安全的,不允许空key和value值;

4Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。而==是判断两个值是否相等的;

5、遍历一个list

for(int i=0;i <list.size();i++)
 for(Object o:list)
Iterator it=list.iterator()
  for(;it.hasNext();)

  Set set = new HashSet(list);
    for(Iterator it=set.iterator();it.hasNext();)
    { Object o = it.next; System.out.println(o.toString());}

List<Object> list
for(Object foo : list){
        String className = foo.getClass().getClassName;       
        System.out.println(foo);  
 }  

 

6、  String传值,

public  class Test {

    public static void change(String str){

       str="123";

    }

  public static void main(String args[]) {

      String abc = new String("abc");

      Test.change(abc);

      System.out.println(abc);  }

输出:abc

7.为什么重写equals()时也要重写hashCode()?两者什么关系

因为这两个函数都可以重写;完全可以hashcode相等的对象而equals确返回false;重写hashCode是为了集合类存储这些对象的时候有个比较规则;比如Map不允许重复元素,就是通过hashCode来检测的;但是hashcode的实现,一般要满足几个特征,比如:自反性,传递性什么的。

8.java泛型中的E,T,K,V,U,S

    E - Element (在集合中使用,因为集合中存放的是元素)

    - Type(Java 类)

    - Key(键)

    - Value(值)

    - Number(数值类型)

    ? -  表示不确定的java类型

9.认识理解Java中的native方法

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。在java中native是关键字。它一般在本地声明,异地用C和C++来实现。它的声明有几点要注意:

1)native与访问控制符前后的关系不受限制。

2)必须在返回类型之前。

3)它一般为非抽象类方法。

4)native方法在异地实现,象抽象方法一样,所以没有方法体,以分号结束。如下列5种声明:

native public void f();       正确。
private native void f();      正确。 
protected int native f();     错误,返回类型位置不对,返回类型必须在native之后。
public abstract native void f();   native必然不是abstract的。 
native int f(){}       错误,因为存在方法体{}
public static native f();  正确。static与native方法位置随意。

10. Integer与int的种种比较你知道多少?

Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。 int是数据类型;

Integer i = 1;int ii = 1; i==ii为true还是为false?

public static void main(String[] args) {
13         int i = 128;
14         Integer i2 = 128;
15         Integer i3 = new Integer(128);
16         //Integer会自动拆箱为int,所以为true
17         System.out.println(i == i2);
18         System.out.println(i == i3);
19         System.out.println("**************");
20         Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);
21         Integer i6 = 127;
22         System.out.println(i5 == i6);//true
23         /*Integer i5 = 128;
24         Integer i6 = 128;
25         System.out.println(i5 == i6);//false
26 */        Integer ii5 = new Integer(127);
27         System.out.println(i5 == ii5); //false
28         Integer i7 = new Integer(128);
29         Integer i8 = new Integer(123);
30         System.out.println(i7 == i8);  //false
31     }
首先,17行和18行输出结果都为true,因为Integer和int比都会自动拆箱(jdk1.5以上)。
22行的结果为true,而25行则为false,很多人都不动为什么。其实java在编译Integer i5 = 127的时候,被翻译成-> Integer i5 = Integer.valueOf(127);所以关键就是看valueOf()函数了。只要看看valueOf()函数的源码就会明白了。JDK源码的valueOf函数式这样的:
看一下源码大家都会明白,对于-128到127之间的数,会进行缓存,Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。所以22行的结果为true,而25行为false。

 

11. IP协议属于()层。

  • 应用层

  • 数据链路层

  • 网络互联层

  • 传输层

答案:C

IP协议是网络层协议

A,应用层协议有http ftp smtp pop3 等

B,数据链路层协议有PPP ARP RARP等

D,传输层协议有TCP UDP

12.十六进制数30转换成二进制数是()

  • 110000

  • 100000

  • 111000

  • 101010

答案:A

十六进制转换为二进制快捷的方法是将每一个十六进制字符转换成4个二进制字符,不足4个的前面补零

3转换为二进制是0011,0转换为二进制是0000

合起来就是00110000

将前面两个无用的0去掉就是110000

13.List<? extends T>和List<? super T>之间有什么区别?

List<? extends T>要求List中的泛型对象只可以是T或者T的子类对象

List<? super T>要求List中的泛型对象只可以是T或者T的父类对象

14.对于IP地址为200.5.6.3,属于()类

  • A

  • B

  • C

  • D

答案:C

第一字节范围1到127属于A类IP

第一字节范围128到191属于B类IP

第一字节范围192到223属于C类IP 

15. 某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台,当N的取值不超过()时系统不会发生死锁。

  • 4

  • 5

  • 6

  • 7

答案:B

不发生死锁的条件是至少能保证一个进程能获得三台打印机资源。

最坏的情况是1个进程获取三台打印机资源,另外N-1个进程获取到两台打印机,等待获取第三台。

3+(N-1)*2=11

N=5

16.  排序

1、java类自带排序:

组成int数组,再调用Arrays.sort(int[] a)实现升序;降序可从尾部开始输出;

2、方法二:重复for循环比较两值大小存入ArrayList中;

17. JAVA序列化

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序 列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

 

18.数据结构有哪些

集合、线性结构、树形结构、图状结构

 

转载于:https://my.oschina.net/u/2322635/blog/394922

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值