Java基础面试题

本文详细介绍了Java编程的基础面试题,涵盖Java关键字static和final的用法、冒泡排序算法、抽象类与接口的区别、Java集合框架、线程同步与异步、异常处理、内存管理和垃圾回收、JVM内存结构、多线程实现方式、字符串与字符流、双亲委派机制等内容,旨在帮助求职者准备Java面试。
摘要由CSDN通过智能技术生成

1第一阶段面试题

  1. 简述staticfinal的用法?

static:修饰属性,方法,代码块

(1)静态属性:也可叫类变量  类名.属性名  来访问

       (共有的类变量与对象无关,只和类有关)

   注意:类中的实例变量是在创建对象时被初始化的,被static修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,类加载的过程是进行一次。也就是类变量只会被创建一次。

(2)静态方法:类名.方法名  直接访问  

   注意:static修饰的方法,不能直接访问本类中的非静态(static)成员(包括方法和属性)

本类的非静态方法可以访问本类的静态成员(包括方法和属性),可以调用静态方法。

修饰变量,方法,类

final:修饰变量,类,方法

(1)修饰变量

   被fianl修饰的成员变量就是常量(常量名大写),一旦赋值不能改变  

   修饰局部变量:修饰基本数据类型 -> 变量的值不能改变

                 修饰引用 -> 引用只能指向固定的对象

   修饰实例变量:默认值不生效,可以再赋值

(2)修饰方法 :不能被子类覆盖 

(3)修饰类:不能被继承 

    在一个final类中的所有方法,默认都是final的

  注意:final,不能用来修饰构造方法。

  1. 写出冒泡排序的算法

for(int i=0;i<arr.length-1;i++){ //控制轮数

  for(int j=0;j<arr.length-1-i;j++){ //控制每一轮的次数

    if(arr[j]>arr[j+1]){ //每次都是和它下一个元素比

           int t=arr[j];

           arr[j]=arr[j+1];

           arr[j+1]=t;

         }

  }

}

  1. abstract class interface 有什么区别?

abstract class

interface

实例化

不能

不能

一种继承关系,一个类只能使用一次继承关系。可以通过实现多个接口

一个类可以实现多个interface

数据成员

可有自己的

静态的不能被修改即必须是static final,一般不在此定义

方法

可以私有的,非abstract方法,必须实现

不能有私有的,默认是public,abstract 类型

变量

可有私有的,变量有默认的类型,其值可以在子类中重新定义,也可以重新赋值

不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。

设计理念

表示的是“is-a”关系

表示的是“like-a”关系

实现

需要继承,要用extends

要用implements

1.相同点

  A. 两者都是抽象类,都不能实例化。

  B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点

  A. interface需要实现,要用implements,而abstract class需要继承,要用extends。

  B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。

  C. interface强调特定功能的实现,而abstract class强调所属关系。

  D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

  1. 类有哪三个基本特性?各特性的优点?

类具有封装性、继承性和多态性。

封装性:类的封装性为类的成员提供公有、缺省、保护和私有等访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。

继承性:允许通过继承原有类的某些特性或全部特性而产生全新的类,原有的累称为父类,产生的新类称为子类。子类不仅可以直接继承父类的共性,而且也可以创建它特有的个性。

多态性:是指在基类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同行为,多态性有两种表现形式:重载和覆盖。

  1. ErrorException有什么区别? 列出你见过的Exception并简要说明

答:error表示系统级的错误和程序不必处理的异常,

是恢复不是不可能但很困难的情况下的一种严重问题;

比如内存溢出,不可能指望程序能处理这样的情况;

exception表示需要捕捉或者需要程序进行处理的异常,

是一种设计或实现问题;也就是说,它表示如果程序运行正常,

从不会发生的情况。 常见异常有: NullPointerException:

当操作一个空引用时会出现此错误。 NumberFormatException:

数据格式转换出现问题时出现此异常。 ClassCastException:

强制类型转换类型不匹配时出现此异常。 ArrayIndexOutOfBoundsException:

数组下标越界,当使用一个不存在的数组下标时出现此异常。

  1.  java中会存在内存泄露吗?请简单描述

答:内存泄露是指系统中存在无法回收的内存,

有时候会造成内存不足或系统崩溃。Java存在内存泄露。

Java中的内存泄露当然是指:存在无用但是垃圾回收器无法回收的对象。

而且即使有内存泄露问题存在,也不一定会表现出来。

自己实现堆栈的数据结构时有可能会出现内存泄露。

  1.  多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有两种实现方法:继承Thread类或者实现Runnable接口。

实现同步也有两种方法:一种是同步方法,另一种是同步代码块。

同步方法是在方法返回类型前面加上synchronized关键字

同步代码块是synchronized (这里写需要同步的对象){...}

  1.  .sleep()wait()有什么区别?

答案:

(2)不同点:

1. Thread类的方法:sleep(),yield()等

Object的方法:wait()和notify()等

2.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。

sleep方法没有释放锁,

wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

  1.  谈谈java跟你所知道的其它的语言相比,有什么优点??

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值