java 面试题

1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

     可以有多个类,但是只能有一个public 的类,并且public的类名必须和文件名一致

2.java 有没有goto

     java中的保留字,现在还没有在java中使用

3.说说&& 和 & 的区别

   1)&& 和& 都可以用作逻辑与的运算符

   2)&& 有短路的功能

   3)& 还可以用作位运算符

4.在Java中如何跳出当前的多重嵌套循环?

  可以再最外层使用一个标志位,判断是否跳出循环。

5.switch 语句能够作用在byte ,long ,String 上?

1)switch 可以用在byte,String 上,但是不能用在long  上

2)switch 可以使用的类型:byte  ,short ,char ,String ,int,enum

6.short s1=1;s1=s1+1; 有什么错?short s1=1;s1+=1;有什么错?

1)s1=s1+1; 运算的时候自动提升表达式类型,所以结果是int 型,再赋值的时候会有类型转换异常;

2)s1+=1;中+= 是运算符,因此可以正常编译

7.char 类型变量中能不能存储一个汉字?为什么?

1)可以存储一个汉字,char 类型是存储的事unicode 编码的字符,unicode 字符包含汉字

 2)不过有些unicode  不包含的汉字就不能用char 存储

8.用最有效率的方法算出2*8?

2<<3

9.设计一个一百亿的计算器

1)我们所有的最大数据类型long ,存储不了一百亿

2)需要自己设计一个可以存储一百亿数据的类,并且添加增删改查的功能。

       a.这个类有两个变量,一个表示符号位,一个用字节数组表示数值的二进制数

       b.提供一个构造方法,把一个百亿的字符串数字转换到内部的符号位和字节数组中

       c.提供增删改查的功能

10.使用final 关键字修饰一个变量时,是引用不能变?还是引用的对象不能变?

      1)引用的变量不能变

       2)引用变量所指向的对象中的内容还是可以改变的

11."=="和"equals"有什么区别?

      1)== 比较的值(基本数据类型比较的事值,引用数据类型比较的是地址)

       2)如果equals 不被重写,它的作用和== 一个效果,比较的都是地址

       3)如果重写了equals ,就要看equals 具体逻辑是什么,可以比较地址,也可以比较值

12.静态变量和实例变量的区别

       1)语法上:静态变量要加上static   ,而实例变量不需要添加

        2)所属关系,静态变量属于的是类,实例变量是属于具体的实例对象

        3)静态变量也称为类变量,只要类被加载,静态变量就会被分配空间,而实例变量必须实例化对象之后才可以分配内存空间

       4)调用:静态变量:类名.静态变量名,或者对象名.静态变量名     ,而实例变量只能用对象名.实例变量名

13.是否可以从一个静态方法内部对非静态方法调用?

        1)静态不放不可以直接调用非静态方法

         2)静态方法可以间接调用非静态方法,通过实例化一个对象,用对象名.方法名

14.Interger 和int 的区别

          1)Interger 是包装类,int 是基本数据类型

           2)Interger 是一个对象,默认值是null ,int  默认值是0

15.Math.round(11.5)等于几?Math.round(-11.5)等于几?

         1)Math.round(11.5)   = 12,Math.round(-11.5) =-11

          2)Math取整方法:ceil(向上取整)、floor(向下取整)、round(四舍五入)

16.下面代码有什么不妥之处?

  if(username.equals("zxx")){
   }

   没有判空,容易有空指针

17.请说出作用域public,private,protected,以及不写时的区别

 作用域                当前类             同包          子孙类           公共

 public                   V                      V                   V             V

 protected             V                       V                   V

  friendly               V                       V

   private              V

18.Overload 和Override 的区别

   类型                 是否是同一个类       访问修饰符            返回值       方法名      参数   

  Overload           同一个类                   无关                      无关           相同       不同

  Override           子类                           不能严于父类         相同          相同        相同

19.构造器Constructor 是否可以被重写?

 构造器(构造方法)不能被重写

20.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类是否可以有静态的main 方法?

 接口可以继承接口;抽象类可以实现接口;抽象类可以继承具体类;抽象类可以有静态的main 方法

21.重写clone()方法时,通常都有一行代码,是什么?

 1)super.clone();

  2)参考链接:https://blog.csdn.net/qq_33314107/article/details/80271963

  Object对象有个clone()方法,实现了对象中各个属性的复制,但它的可见范围是protected的,所以实体类使用克隆的前提 是:

  ① 实现Cloneable接口,这是一个标记接口,自身没有方法。 
  ② 覆盖clone()方法,可见性提升为public

22.面向对象的特征有哪些?

 封装,继承,多态

23.java中实现多态的机制是什么?

1)父类的引用指向子类的实现

 2)实现多态的必要条件:继承,重写,向上转型

24.abstract class 和 interface 有什么区别?

 类别                         修饰符         是否有构造方法          成员变量                     继承/实现

 abstract class        abstract         有                          可以有普通成员变量         单根继承

 interface                 interface       没有                       没有                                 多实现

25.abstract 的method 是否同时是static \ native\synchronized ?

都不可以  

26.什么是内部类?static nested class(静态内部类) 和 inner class(内部类) 的不同

1)内部类就是在一个类的内部定义的类(可以在外部类的方法内,也可以在外部类的方法外)。

 2)static nested class是一个静态内部类,inner class  一个普通的内部类

 3)static nested class 不依赖于外部类的实例对象

 4)内部类可以访问类的成员变量,不能定义静态成员

27.内部类可以引用它的包含类成员吗?有什么什么限制?

 1)完全可以。如果不是静态类,就没什么限制。

  2)静态内部类不能访问外部内的普通成员变量,只能访问外部类的静态成员。

28.Anonymous Inner Class(匿名内部类)是否可以继承其他类?是否可以实现接口?

  必须可以继承其他类,或者接口

29.如何获取类名,获取父类名?

 1)获取类名:对象名.getClass()

 2)子类对象获取父类名:对象名.getClass().getSuperClass().getName();

 3) 子类方法中获取父类名:this.getClass().getSuperclass().getName();

30.String 是最基本的数据类型吗?

 1)String 不是最基本的数据类型

 2)最基本的数据类型包括:byte   short   int  long   float  double  boolean   char

31.String s =“hello”;s=s+“world!”;原始的String 对象中的内容变了没有?

  1)没有变

   2)String 是被设计成不可变的类。

32.是否可以继承String 类?

不可以继承,因为String是final 类

33.String s = new String(“xyz”);创建了几个String Object ?二者之间有什么区别?

 1)创建了两个或者一个;

  2)"xyz" 对应一个对象,这个对象放在字符串常量缓冲区,常量"xyz"不管出现多少遍,都是缓冲区的那一个。

  3)只要new  String   就会创建一个新的对象。

34.String ,StringBuffer ,StringBuilder 有什么区别 ?

 1)字符串不可变:String    ;字符串可变:StringBuffer  ,StringBuilder 

 2) StringBuffer 线程安全;StringBuilder 线程不安全

35.如何把一段逗号分隔的字符串转换成一个数组?

 String str = "weem,ww,rr,ttt,vvv,fff";

 String[] result =   str.split(",");

36.数组有没有length()这个方法?String 有没有length()这个方法?

 1)数组没有length()这个方法,但是有length  属性;

 2)String 有length() 这个方法。

37.String s = “a”+“b”+“c”+“d”;一共创建了多少个对象?

只创建了一个对象。

在这里插入图片描述

38.try{}里有一个return 语句,那么紧跟在这个try 后的finally{}里的code 会不会被执行,什么时候执行,是在return 前还是后?

 1)会被执行

  2)在return  之前

 3)如果try {}  finally {}  语句中都有return ,finally 中的return才是真正的被返回。

39.final ,finally ,finalize 的区别?

1)final  用于声明属性,方法和类,分别表示属性不可变,方法不可被覆盖,类不可被继承

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

3)finalize 是Object 类的一个方法,在垃圾回收器执行的时候回调用被回收对象的此方法。

40.运行时异常和一般异常有何异同

 1)异常分类:a.error 程序无法恢复或很难恢复的异常;b.checked 异常 (编译时异常), c.运行时异常

  2)运行时异常编译的时候不报错,运行的时候在某种特殊情况发生异常

  3)一般异常也叫checked 异常,编译时必须解决

41.error 和 exception 有什么区别

 1)error :表示恢复不是不可能但是很困难的情况

 2)exception :表示设计或实现问题,程序如果运行正常,是不会发生的状况

42.java 中的异常处理机制的简单原理和应用

  1)java 使用面向对象的方式处理异常,把每个异常封装成一个对象表示

  2)异常分error 和exception  ,exception 分 运行时异常,checked 异常

  3)运行时异常成为系统异常,可以处理也可以不处理(不强制处理)

  4)checkd异常,必须使用try-catch  或者 thows  处理

43.写出你常见的5个runtime exception

 NullPointerException ,ArrayIndexOutOfBoundsException ,ClassCastException,IOException,FileNotFoundException

44.java 语言如何进行异常处理,关键字 throws ,throw,try,catch,finally 分别代表什么意义?可以再try 里抛出异常吗?

  throws:声明异常

  throw :抛出异常

  try:将可能发生异常的代码括起来 ,可以再try 中抛出异常

  catch:捕捉异常

  finally:无论是否有异常,都会执行的语句

45.java中有几种方法实现线程?用什么关键字进行同步方法?stop 和suspend()方法为何不推荐使用?

 1)new Thread() 和 new Thread(new Runnable())

 2)使用synchronized 关键词修饰同步方法

 3)不用stop,因为不安全   ;不用 不用suspend  ,因为容易发生死锁

46.sleep()和wait() 有什么区别?

1)sleep() 暂停线程执行,将执行的机会让给其他人,到时会自动恢复

2)wait() 放弃对象锁,进入等待索定池,需要notify 或者notifyAll 方法唤醒

47.同步和异步有何异同,在什么情况下分别使用他们?举例说明。

1)如果数据在线程之间需要共享,正在写的数据 ,另外一个线程也用到,必须进行同步存取;

2)如果不存在数据共享,而且执行的程序需要花费很长时间,且不想等待,此时采用异步更有效率

48.多线程有几种实现方法?

  1. 继承Thread 类

2)实现Runnable 接口

49.线程同步有几种方法

1)synchronized

2)wait 和 notify 

50.run()方法和 start() 方法有什么区别?

1)run()方法改线所关联的执行代码

2)start()方法是启动一个线程

51.当一个线程进入一个对象的synchronized 方法后,其他线程是否可以进入此对象的其他方法?

 分几种情况:

 1)其他方法前是否加了synchronized 关键字,如果没加则,则能;

  2)如果这个方法内部调用了wait ,则可以进入其他synchronized 方法

 3)如果其他方法都加了synchronized 关键字,且没有调用wait ,就不能;

52.线程的基本概念、线程的基本状态 以及状态之间的关系

  1)世间万物都可以同时完成很多工作。例如,人体可以同时进行呼吸、血液循环、思考问题等活动。这种同时执行多个操作的“思想”在 Java 中被称为并发,而将并发完成的每一件事称为线程。

   2)状态:    notify()-唤醒阻塞线程中的一个,使其进入就绪状态   notifyAll()-唤醒所有的阻塞线程,使其全部进入就绪状态

在这里插入图片描述

第一种:
创建状态 - Thread t = new Thread();
就绪状态 - t.start();
运行状态 - 拿到cpu 资源
阻塞状态 - sleep wait
死亡状态 - 运行结束 ,手动结束,异常中断

第二种:
新生状态(New Thread) - Thread t = new Thread();
可运行状态(Runnable) - t.start();
阻塞状态(Blocked ) - sleep wait
死亡状态(Dead) - 运行结束 ,手动结束,异常中断

53.Collection 框架中实现比较要实现什么接口

 comparable

54.ArrayList 和Vector 的区别

 1)两个类都实现了List 接口,都是有序的集合

 2)Vector 是线程安全的,ArrayList 是线程不安全的

55.HashMap 和Hashtable 的区别

 1)两个类都实现了Map 接口,都是存放的键值对

 2)Hashtable 是线程安全的,也就是同步的,而HashMap 是线程不安全的,不是同步的

 3)HashMap允许将null作为一个key 或者value ,而HashTable 不允许

56.List 和Map 区别

1)List 存储的是有序的数据集合,并且允许重复

2)Map 存储的是无序的数据集合,并且不可以重复

57.List ,Set ,Map 是否继承自Collection j接口?

 List  ,Set 是,Map 不是

58.Collection 和Collections 的区别

 1)Collection 是集合类的上层接口,继承它的接口有Set  和  List

 2) Collections 是针对集合类的帮助类

59.Set 里元素是不能重复的 ,那么用什么方法来区分重复与否?是用== 还是equals()?

 1) 使用的是equals() 方法判断是否重复

 2)hashCode() 相同的情况,才会判断equals()
  1. java 中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出分别是哪些类?

    1)类型:字节流,字符流

    2)字节流继承于:InputStream OutputStream ; 字符流继承于InputStreamReader OutputStreamWriter

61.什么是java 序列化,如何实现java 序列化?或者解释Serializable 接口的作用

1)将一个java对象编程字节流的形式传出去或者将一个字节流中恢复一个java对象的过程就是序列化。

2)需要实现序列化,必须实现Serializable 接口

3)Serializable 接口没有需要实现的方法,只是巍峨标注对象是可以被序列化的

62.描述一下JVM 加载class 文件的原理机制?

JVM 中类的装载是由ClassLoader 和它的子类实现,负责在运行时查找和装入类文件的类

63.GC 是什么?为什么要有GC?

 1)GC 是垃圾回收的意思

  2)GC可以自动检测对象是否超过作用域从而达到自动回收内存的目的

64.栈内存和堆内存和寄存器的区别

寄存器:速度最快

1)存放临时参与计算的结果等

栈内存:速度紧次于寄存器,先进后出,后进先出

1)基本数据类型变量

2)数组名

3)引用数据类型的变量名

堆内存:速度慢,先进先出,后进后出

1)对象(具体的对象值)

2)数组(具体的数组元素)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值