JavaSE基础面试题

     

目录

一.什么是面向对象,怎么理解面向对象?

二.什么是面向过程?什么又是面向对象?

三.面向对象的几大特性是什么?

四.Java继承和Java实现。

五.子类可以继承父类中的私有方法和私有属性吗?

六.Java中的基本数据类型一共有哪些?

七.重写和重载的区别?

八.== 和 equels() 的区别?

九.try中的return和finally中的代码哪个先执行?

十.ArrayList和LinkedList的区别和联系?

十一.HashMap和Hashtable的区别和联系?

十二.HashMap是线程非安全的,怎么让HashMap来实现线程安全的呢?

十三.@Autowire和@Resource的区别?

十四.控制反转和依赖注入的关系是怎样的?


        在找工作,明天可能会有北京的人来视频复面,这里总结一下JavaSE的基础知识。

想到哪里说哪里。

一.什么是面向对象,怎么理解面向对象?

面向对象编程(OOP,Object Oriented Programming)。人们发现,现实世界中的事物,都可以用「数据」和「能力」来描述。比如我要描述一个人,「数据」就是他的年龄、性别、身高体重,「能力」就是他能做什么工作,承担什么样的责任。描述一台电视,「数据」就是它的屏幕尺寸、亮度,「能力」就是播放《葫芦娃》。面向对象的世界里,到处都是对象。对象不光有「数据」和「能力」,还可以接受命令。例如你可以让「狗」这个对象「吃狗粮」,就可以把「吃狗粮」的命令发给「狗」让其执行,然后我们就实现了「狗吃狗粮」的需求。现在对象有了,如何进行面向对象的编程呢?很简单,依次向不同的对象发送命令就可以了。

二.什么是面向过程?什么又是面向对象?

面向过程——步骤化

  • 面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可。

面向对象——行为化

  • 面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成类(类实例化后才是对象),创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为。

三.面向对象的几大特性是什么?

面向对象的三个基本特征是:封装、继承、多态。

封装:封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承:面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:子类可以使用父类的所有功能(数据),并在无需重新编写父类中代码的情况下对这些功能进行扩展。

多态:简单的说,就是一句话:就是父类的引用指向子类对象。多态的优点就是,我们可以把不同子类的对象都当做父类类型来对待,可以屏蔽不同子类对象之间的实现差异,从而写出通过的代码达到通用编程,以适应需求的不断变化。

四.Java继承和Java实现。

Java类是单继承的。classB Extends classA

Java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……

一个类可以实现多个接口,只不过要实现多个接口中的所有方法。实现方法的名字、返回类型、参数必须与接口中完全一致。

     

在实现/重写方法时,实现类/子类中的方法不得具有比父类中的方法更高的访问限制。如果尝试这样做,则会引发编译时异常。(可以让更多的人看,不能让更少的人看)。

由于public是最高的可见性或最低的访问限制,并且默认情况下接口的方法是公共的,因此您无法更改修饰符,这样做意味着增加访问限制,这是不允许的,并会生成编译时异常。

五.子类可以继承父类中的私有方法和私有属性吗?

Java中,子类是可以继承父类中的私有方法和私有属性的,但是由于private的原因,父类中的这些方法和属性对子类是不开放的。

 

综上,有一个想法,其实继承的时候,我们在调用方法时,我们调用的是父类中的方法。

六.Java中的基本数据类型一共有哪些?

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

数字类型:-整数型 byte,short,int,long。-浮点数 float,double。

字符类型:char。

布尔型:boolean。

 

特别要记住,String类型不是8大基本数据类型之一。

七.重写和重载的区别?

重写是在继承中的概念,子类继承父类之后,重写了父类的具体实现。

重写的方法名和参数要完全一致,子类重写父类的方法的访问修饰符,不能低于父类的方法访问权限。返回值必须是父类返回值的派生类或一致。

重写可以不使用@Override注解,编译也是通过的,这个注解,是给编译器看的,告诉编译器我下面写的代码是重写方法,让编译器检查,这个重写方法是否符合规范。

 

重载是在一个类中的概念,一个类中的,一个功能方法的多种体现形式(有不同的方法体)。就是同一个功能的方法,因为参数的不同,调用的具体的方法也不同。当方法名称一致时,通过形式参数列表的不同来选择要执行的方法。

重载必须同一个类中,方法名称必须一致,参数列表必须不同(顺序,个数,类型),和static,修饰符,返回值,void等等都没有关系。

八.== 和 equels() 的区别?

八大基本数据类型中存储的直接是值。而像String类型中存储的是值的地址。

equals()是判断两个对象的实际值是否一样。

而 == 如果比较基本数据类型则比较值的大小,如果比较复杂数据类型,则比较的是值的引用是否是同一个。

引用是在栈中,值实在堆中。

九.try中的return和finally中的代码哪个先执行?

在JAVA语言的异常处理中,finally里面代码块是为了保证无论出现了什么样的情况,finally里的代码一定会被执行。但是return 的意思就是结束当前函数的调用并跳出这个函数,因此finally块里面的代码也是在return前执行,如果try finally里都有return,那么 finally中的return将覆盖其他地方的return(只有finally中的return执行)。


       原文链接:https://blog.csdn.net/java19950529/article/details/52044161

十.ArrayList和LinkedList的区别和联系?

两者都实现了List接口,都具有List中元素有序、不唯一的特点。

ArrayList实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素的效率比较高;

LinkedList采用链表存储方式。插入、删除元素时效率比较高。

十一.HashMap和Hashtable的区别和联系?

实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用。

两者的主要区别如下:

   Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口。

   Hashtable继承Dictionary类,HashMap实现Map接口。

   Hashtable线程安全,HashMap线程非安全。

   Hashtable不允许null值,HashMap允许null值。

十二.HashMap是线程非安全的,怎么让HashMap来实现线程安全的呢?

方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的. 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现。

方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进。

十三.@Autowire和@Resource的区别?

@Autowire是Spring自己的,@Resource是JavaEE的。

1.@Autowire默认按照类型(by-type)装配,默认情况下要求依赖对象必须存在。

  • 如果允许依赖对象为null,需设置required属性为false,即
@Autowire(required=false)
private InjectionBean beanName;
  • 如果使用按照名称(by-name)装配,需结合@Qualifier注解使用,即
@Autowire
@Qualifier("beanName")
 private InjectionBean beanName;

说明:

@Autowire按照名称(by-name)装配,则
@Autowire + @qualifier("") = @Resource(name="")


        2.@Resource默认按照名称(by-name)装配,名称可以通过name属性指定。

   @Resoure装配顺序:

                   1).如果同时指定name和type属性,则找到唯一匹配的bean装配,未找到则抛异常;
                   2). 如果指定name属性,则按照名称(by-name)装配,未找到则抛异常;
                   3).如果指定type属性,则按照类型(by-type)装配,未找到或者找到多个则抛异常;
                   4).既未指定name属性,又未指定type属性,则按照名称(by-name)装配;如果未找到,则按照类型(by-type)装配。

 

        简单来说,就是@Autowire是按照类型type来进行装配的,@Resource是按照名称来装配的,找不到才按照类型来进行装配。

        两者如果找不到组件或者找到多个组件则抛出异常(因为Spring 不知道同类型的组件你要用具体的哪一个)。

        @Autowire是Spring自己的,@Resource是JavaEE的。@Autowire的属性只有required,而@Resource属性有name和type两个属性。

十四.控制反转和依赖注入的关系是怎样的?

IOC:翻译过来是控制反转,将原本在程序中手动创建对象的控制权,交由Spring框架来管理。

DI:依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。

简单来说,IoC更像是一种思想,DI是一种行为。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值