Java基础补课

1、 为什么Java代码可以实现一次编写,到处运行?

JVM是Java跨平台的关键。 Java代码在运行之前,首先被编译器编译为字节码文件,
然后JVM会将编译后的字节码翻译成为特定平台上的机器码并运行,
也就是说,只要在相应的平台上安装对应的JVM就可以运行我们的字节码文件。因为Java代码在运行之前只需要被编译1次
JVM是实现java字节码文件跨平台的桥梁

2、为啥要有包装类?

Java是面向对象的语言,它的思想就是一切皆对象。
但是8种基本数据类型它们不具备对象的特征,为了解决这个问题,Java为每个基本数据类型设计了一个对应的引用类型,这就是包装类
引用类型都会继承Object类,但是基本数据类型不会。
如果某个方法需要Object类型的参数,这时候我们不能把基本数据类型直接放进去,而包装类很好的解决了这个问题

3、说一说自动装箱、自动拆箱的应用场景?

自动装箱:把一个基本类型的数据直接赋值给包装类
自动拆箱:把一个包装类的对象直接赋值给基本的数据类型
通过自动装箱和自动拆箱,可以大大的简化基本数据类型和包装类之间的转换
比如:某个方法需要一个包装类型的参数,而我们拥有的数据是基本数据类型,那么我们不需要做任何的处理,直接把这个数据传给方法就可以了,他就会自动装箱

4、如何对Integer和Double类型判断相等?

不能用= =直接判断,因为它们是不同的数据类型
不能转换成字符串进行比较,因为浮点值带小数,而整数型不带,这样它们永远都不可能相等
不能用compareTo进行比较,该方法只能对相同类型进行比较
所以,可以将Integer先转换为Double类型,然后相同类型就可以用= =进行比较,

5、int和Integer有什么区别?二者在做=运算时会发生什么?

Integer是int的包装类,int是基本数据类型,而Integer是引用数据类型,二者在做=运算时,Integer会自动拆箱为int类型,然后再进行比较,这时候如果两个值相等则返回true,否则返回false

6、面向对象的三大特征是什么?

封装,继承,多态
封装:是指将对象的实现细节隐藏起来,然后通过一些共有的方法将对象的功能暴露出来
继承:子类在继承父类之后,会直接获得父类的属性和方法
多态:子类对象可以直接赋值给父类,但是依然表现出子类的行为特征,这意味着同一个类型的对象在调用同一个方法的时候,可能会表现出不同的行为特征

7、封装的目的是什么?为什么要封装?

隐藏类的实现细节,外界无法直接操作和修改
让访问者只能通过一些方法来访问数据,限制对成员变量的不合理访问
便于修改,提高代码的可维护性

8、Java为什么是单继承,为什么不能实现多继承?

首先,Java是单继承是指Java只能有一个直接的父类
Java不能多继承是指Java中一个类不能直接继承两个父类
比如,当两个父类中包含相同的方法时,当子类在调用该方法或者重写该方法时就会迷惑
准确来说,Java其实是可以实现多继承的,子类虽然不能直接去继承多个父类,但是它可以间接继承父类的父类,它可以有任意多个间接的父类,这样就可以避免多继承产生的混淆。

9、介绍一下Object类中的方法

getClass():返回该对象运行时的类
equals():判断两个对象是否相等
hashCoad():返回对象的hashcode值
toString():返回对象的字符串表示
wait()、notify()、notifyAll()这几个方法控制线程的暂停和运行

10、hashCode()和equals()的关系

hashCode用于获取对象的哈希码
equals用于比较两个对象是否相等
如果两个对象相等,那么它们必定有相同的哈希码
如果两个对象哈希码相等,两个对象未必相等

11、为什么要重写equals()和hashCode()方法?

因为Object类中的equals()方法使用双等号来比较两个对象的,而==比较的是两个对象的内存地址是否相等,在我们日常的需求中,我们想要比较的是两个对象的内容是否相等,所以我们通常都要重写equals方法,因为hashCode和equals要满足相关的约定,所以通常也要讲hashCode方法进行重写

12、String类有哪些方法?

charAt(int index):返回指定索引处的字符
subString():从字符串中截取一部分字符串
split():将字符串以指定字符分割存放到数组中
trim():删除字符串前后的空格
indexOf(String str):返回字串在字符串中首次出现的索引
lastIndexOf():返回字串在字符串中最后出现的索引
startsWith():判断字符串是否以指定的前缀开头
endsWith():判断字符串是否以指定的后缀结尾
toUpperCase():将字符串全部大写
toLowerCase():将字符串全部小写

13、String类可以被继承吗?

String类是不可以被继承的,因为String类是被final所修饰的

14、String、StringBuffer、StringBuilder

String:一旦一个String对象被创建,这个对象中的字符串是不能被修改的,直至这个对象被销毁。
StringBuffer:当一个StringBuffer对象被创建后,可以通过StringBuffer提供的append()等方法改变这个字符串,一旦StringBuffer得到了它想要的字符串,就可以调用它的toString方法转换为一个String对象
StringBuilder:StringBuffer和StringBuilder有共同的父类,所以它们的方法基本相同;
不同的是StringBuffer是线程安全的,而StringBuilder是线程不安全的
StringBuilder性能略高,所以在单线程下,可以优先使用StringBuilder去创建一个可变的字符串对象

15、接口和抽象类的区别

接口体现的是一种规范,是多个程序之间的通信标准
接口中只能包含静态方法、抽象方法、默认方法和私有方法,抽象类则可以包含普通方法
接口中只能定义静态常量,不能定义普通的成员变量;抽象列可以定义普通的成员变量
接口中不包含构造器,而抽象类中可以包含构造方法
接口中不能包含初始化块,而抽象类中可以包含初始化块
一个类只能继承一个父类,包含抽象类,但是一个类可以实现多个接口

16、异常如何处理

将业务代码包含在try块当中,当业务代码出现任何异常时,会将这个异常对象交给这个catch块处理
当业务中打开了某种资源时,无论是否发生异常,都要关闭这些资源,可以将关闭资源的代码写在finally块中,因为无论是否发生异常,finally块的代码一定会被执行

  • 如果在try或者catch块中使用了System.exit(1)来退出虚拟机,那么finally中的代码就没有机会执行了
    在finally中return,那么try和catch中的return都会失效,因为fianlly中的代码一定会被执行的

17、对static关键字的理解

以static修饰的成员就是类成员,类成员属于整个类,而不属于单个对象
类成员不能访问实例成员,因为会出现类成员已经初始化完成,而实例成员还未初始化的情况,这样会引起大量错误
static修饰的类可以被继承

18、final

final修饰 的类不可以被继承
final修饰的方法不可以被重写
final修饰的变量那它就是常量,一旦获得初始值就不能被修改

19、说一说你对泛型的理解

Java集合有一个缺点,就是你把一个对象丢进这个集合里面之后,它就会忘了这个对象的数据类型,当再取出这个对象时,都会被编译成了Object类型
之所以集合被设计成这样,是因为设计者不知道我们会用集合来保存什么对象,所以就设计成了能够保存所有数据类型的对象,保证了通用性
但是也可能发生一些异常:比如我们想要一个只保存A对象的集合,但是其他类型的对象也很容易就被丢进去,所以可能发生异常
这种情况下,当我们从集合中取出对象时,还要进行强制类型转换,增加了编程的复杂度
所以,才引入了泛型这个概念,就是在创建一个集合对象时,加一个< >来保存集合中存放的数据类型,比如List<String>表示这个集合只能存放字符串类型的对象
有了泛型之后,其他类型的对象就不能被丢进这个集合中,集合就会记住集合中对象的数据类型,就不要再进行强制类型转换

20、泛型擦除

比如,
一个有泛型的集合
List< String > list=new ArrayList();
一个没有泛型的集合
List list2=new ArrayList();
把一个有泛型的集合赋给一个没有泛型的集合
list2=list
那么集合中的对象又会变成Object类型
这就是泛型擦除

21、Java反射机制

通过反射机制机制,我们可以通过反射获得一个类的Class对象,并通过这个对象查看这个类的信息
可以通过反射获得一个类的实例,并可以访问该实例的成员
通过反射机制,可以生成一个类的动态代理或者动态代理对象

java反射机制在项目中的应用
数据库的连接需要通过反射加载数据库驱动
AOP底层就是通过反射机制来创建目标对象的代理类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值