第 5 天JAVA面试题任务

一、问题

1、八大基础类型

2java三大特性

3.重载和重写的区别

4.pubilcprotected(dafault)不写、private修饰符的作用范围

5.==equals的区别

6.hashcode()值相同,equals就一定为true

7.为什么重写equals(),就要重写hashcode()?

8.short s = 1s = s + 1(程序1) short s = 1 s += 1(程序2)是否都能正常运行

9.说出下面程序的运行结果,及原因

public static void main(String[] args) {

    Integer a = 128, b = 128, c = 127, d = 127;

    System.out.println(a == b);

    System.out.println(c == d);

}

10.&&&的区别

11.StringStringBufferStringBuilder的区别

12.String rap = new String(“ctrl”);创建了几个对象?

13.什么是反射

14.浅拷贝和深拷贝的区别

15.构造器能被重写吗

16.并发和并行

17.实例变量和类变量

18.说出下面程序的运行结果,及原因

public class InitialTest {

    public static void main(String[] args) {

        A ab = new B();

        ab = new B();

    }

}

class A {

    static { // 父类静态代码块

        System.out.print("A");

    }

    public A() { // 父类构造器

        System.out.print("a");

    }

}

class B extends A {

    static { // 子类静态代码块

        System.out.print("B");

    }

    public B() { // 子类构造器

        System.out.print("b");

    }

}

19.抽象类和接口的区别

20.ErrorException有什么区别

二、答案

1、八大基础类型

数字型: 字节类型(byte)、短整型short、整型int、长整型Long、单精度浮点数float、双精度浮点数double

字符型: 字符类型char

布尔型: 布尔类型boolean

2java三大特性

封装: 使用private关键字,让对象私有,防止无关的程序去使用。

继承: 继承某个类,使子类可以使用父类的属性和方法。

多态: 同一个行为,不同的子类具有不同的表现形式。

3.重载和重写的区别

重载: 发生在同一类中,函数名必须一样,参数类型、参数个数、参数顺序、返回值、修饰符可以不一样。

重写: 发生在父子类中,函数名、参数、返回值必须一样,访问修饰符必须大于等于父类,异常要小于等于父类,父类方法是private不能重写。

4.pubilcprotected(dafault)不写、private修饰符的作用范围

pubilc: 同类、同包、子类、不同包都可以使用。

protected: 同类、同包、子类可以使用,不同包不能。

(dafault)不写: 同类、同包可以使用,子类、不同包不能。

private: 只有同类可以。

5.==equals的区别

==: 基础类型比较的值,引用类型比较的是地址值。

equals: 没有重写比较地址值是否相等,重写比较的内容是否相对。比如String类重写equals,源码首先比较是否都是String对象,然后再向下比较。

6.hashcode()值相同,equals就一定为true

不一定,因为 "重地"和"通话"的hashcode值就相同,但是equals()就为false。

但是equals()为true,那么hashcode一定相同。

7.为什么重写equals(),就要重写hashcode()?

保证同一对象,如果不重写hashcode,可能会出现equals比较一样,但是hashcode不一样的情况。

8.short s = 1s = s + 1(程序1) short s = 1 s += 1(程序2)是否都能正常运行

程序1会编译报错,因为 s + 1的1是int类型,因为类型不兼容。强制转换失败。

程序2可以正常运行,因为java在复合赋值解释是 E1 += E2,等价于 E1 = (T)(E1 + E2),T是E1的类型,因此s += 1等价于 s = (short)(s + 1),所以进行了强制类型的转换,所以可以正常编译。

9.说出下面程序的运行结果,及原因

public static void main(String[] args) {

    Integer a = 128, b = 128, c = 127, d = 127;

    System.out.println(a == b);

    System.out.println(c == d);

}

结果:false,true

因为Integer = a,相当于自动装箱(基础类型转为包装类),因为Integer引入了IntegerCache来缓存一定的值,IntegerCache默认是 -128~127,所以128超过了范围,a和b不是相同对象,c和d是相同对象。

可以通过jvm启动时,修改缓存的上限。

10.&&&的区别

&&: 如果一边为假,就不比较另一边。具有短路行

&: 两边都为假,结果才为假,多用于位运算。

11.StringStringBufferStringBuilder的区别

String: 适用于少量字符串。创建之后不可更改,对String的修改会生成新的String对象。

StringBuilder: 适用于大量字符串,线程不安全,性能更快。单线程使用

StringBuffer: 适用于大量字符串,线程安全。多线程使用,用synchronized关键字修饰。

12.String rap = new String(“ctrl”);创建了几个对象?

一个或两个,如果常量池存在,那就在堆创建一个实例对象,否则常量池也需要创建一个。

13.什么是反射

在运行过程中,对于任何一个类都能获取它的属性和方法,任何一个对象都能调用其方法,动态获取信息和动态调用,就是反射。

14.浅拷贝和深拷贝的区别

浅拷贝: 基础数据类型复制值,引用类型复制引用地址,修改一个对象的值,另一个对象也随之改变。

深拷贝: 基础数据类型复制值,引用类型在新的内存空间复制值,新老对象不共享内存,修改一个值,不影响另一个。

深拷贝相对浅拷贝速度慢,开销大。

15.构造器能被重写吗

不能,可以被重载。

16.并发和并行

并发: 一个处理器同时处理多个任务。(一个人同时吃两个苹果)

并行: 多个处理器同时处理多个任务。(两个人同时吃两个苹果)

17.实例变量和类变量

类变量是被static所修饰的,没有被static修饰的叫实例变量也叫成员变量。同理也存在类对象和实例对象,类方法和实例方法。

//类变量

public static String kunkun1 = "鸡你太美";

//实例变量(成员变量)

public String kunkun2 = "鸡你不美";

18.说出下面程序的运行结果,及原因

public class InitialTest {

    public static void main(String[] args) {

        A ab = new B();

        ab = new B();

    }

}

class A {

    static { // 父类静态代码块

        System.out.print("A");

    }

    public A() { // 父类构造器

        System.out.print("a");

    }

}

class B extends A {

    static { // 子类静态代码块

        System.out.print("B");

    }

    public B() { // 子类构造器

        System.out.print("b");

    }

}

结果:ABabab

原因:

①执行顺序是 父类静态代码块(父类静态变量) -> 子类静态代码块(子类静态变量) -> 父类非静态代码块 -> 父类构造方法 -> 子类非静态代码块 -> 子类构造方法

②静态代码块(静态变量)只执行一次。

19.抽象类和接口的区别

抽象类只能单继承,接口可以实现多个。

抽象类有构造方法,接口没有构造方法。

抽象类可以有实例变量,接口中没有实例变量,有常量。

抽象类可以包含非抽象方法,接口在java7之前所有方法都是抽象的,java8之后可以包含非抽象方法。

抽象类中方法可以是任意修饰符,接口中java8之前都是public,java9支持private。

扩展:普通类是亲爹,手把手教你怎么学,抽象类(多个类具有相同的东西,拿出来放抽象类)是师傅,教你一部分秘籍,然后告诉你怎么学。接口(规范了某些行为)是干爹,只给你秘籍,怎么学全靠你。

20.ErrorException有什么区别

Error: 程序无法处理,比较严重的问题,程序会立即崩溃,jvm停止运行。

Exception: 程序本身可以处理(向上抛出或者捕获)。编译时异常和运行时异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值