Java面试题(整理中)

一、基础

1.面向对象的特征

封装、继承、多态、抽象

封装:把复杂的代码包装起来,让使用者可以简单调用

继承:一个类能通过这种方式不必重写,而直接使用被继承类的方法

多态: 指在继承或者实现的过程中,通过重写、实现的动作,相同的父类或者接口表现出来的不同的结果。

            比如: 工作人员,有销售员,收银员,会计员等多种形态。

            多态的前提:

            必须有继承关系/实现关系
            必须有方法的重写[如果不重写方法,多态也是可以的,但是是没有意义的!!!]

            多态的代码体现:
            父类类型的变量 指向 子类类型的对象
            比如:
                     Worker w  = new Sales();    
                     Animal a  = new Dog();
                     Person p  = new Teacher();

            多态调用方法时的特点:
                     1.编译看父,运行看子
                     2.多态的好处在于提高代码的扩展性

                    3.多态状态下(Animal a = new Dog)下,只能实现父子类都有的方法,想要使用子类特有的方法需要向下转型:

Animals a = new Dog();
(Dog)a.eatGuTou();    //用到子类特有方法时,需要向下转型,类似于强制类型转换

2.高内聚、低耦合

        高内聚指把复杂的代码封装到类中,别人在调用的时候尽可能的少暴露一些方法

        低耦合指代码和代码之间尽可能的减少关联,保证一段代码出现问题后,不会影响到别的代码运行

3.JDK  JRE  JVM的区别

4.重载和重写的区别

重载:同一个类中,允许出现相同的方法名,但这些方法传入的参数类型或者数量不同

重写:指子类对父类方法的重新定义,但参数列表必须相同,返回值范围和异常范围不能大于父类

5.Java中==和equals的区别

== 比较基本类型的值是否相同

     比较引用类型的地址是否相同

Equals 默认情况下,比较的是地址值

但String、Integer、Date这都些类库中的equels被重写,比较的时内容而不是地址

6.String、StringBuffer、StringBuilder 三者之间的区别

String 字符串常量

StringBuffer 字符串变量(线程安全):对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的

StringBuilder 字符串变量(非线程安全):并没有对方法进行加同步锁

7.接口和抽象类的区别是什么?

实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

构造函数:抽象类可以有构造函数;接口不能有。

main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。

实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符

8.string 常用的方法有哪些?

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

getBytes():返回字符串的 byte 类型数组。

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

equals():字符串比较

补充:分割和截取的区别

//按“,”截取字符串

String id="123123,234534,453456";

String[] idArry = id.trim().split(",");
for(String nid:idArry){
System.out.println(nid);
}

打印出的值为:123123

          234534

         453456


//分隔符:substring

String returnResult= "13123123";

String subresult = returnResult.substring(1, returnResult.length() - 1);

subresult的值为“312312”

9.什么是单例模式,有几种?

某个类的被创建出来的对象,在多线程的环境下只能被创建出来一个

单例模式有三种:一种是一开始就创建好一个对象,使用时直接拿着个对象(这种模式是线程安全的)

第二种是使用时再创建(延迟初始化,非线程安全)

双检锁:线程安全,延迟初始化。

10.反射

反射机制指在运行状态中,对任何一个类都能够使用他的属性和方法;

获取Class对象的三种方法:

第一种:调用某个对象的.getClass方法

Person person = new Person;

Class clazz = Person.getClass();

第二种:调用某个类的class属性

    Class clazz=Pserson.class;

第三种:使用Class类中的forName静态方法(最安全/性能最好)

             Class clazz = Class.forName(“类的全路径”); (最常用)

11.异常

Throwable是Java程序中所有错误处理的父类,有两种类型:Error和Exception

Error 指让虚拟机无法运行的错误

Exception 指可以恢复的例外,可以被捕捉,包括运行时异常和编译异常

      运行时异常:都是RuntimeException和它的子类,编译时编译器不会检查,运行时报错的异常,比如NullPointException,IndexOutBoundsExcepion(下标越界异常),一般是由于逻辑问题产生的异常。

      编译异常非运行时异常):是 RuntimeException 以外的异常,类型上都属于 Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

12.Java中三种代码块

静态代码块: 定义类中方法外
    static{
         静态代码块   
     }
    a.当类加载到内存后,立刻执行静态代码块(只会执行一次)
     b.一般用于初始化静态成员变量,或者加载某些资源(驱动,配置文件等...)        

构造代码块: 定义类中方法外
    {
        构造代码块
    }
    a.当创建对象时构造代码块就会执行,创建一次执行一次
    b.把多个构造都需要执行代码块,写到构造代码块中,提高代码的复用性
        

局部代码块: 定义类中方法内
    {
        局部代码块
    }
    a.提前结束局部代码块中变量的生命周期

13.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值