Java开发面试题——基础

1.Java基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
四整型:byte,short,int,long
两浮点型:float,double
字符型:char
布尔型:boolean
byte:8位
short:16位
int:32位
long:64位
float:单精度32位
double:双精度64位
char:一个单一的16位Unicode字符,用 ‘’表示一个字符
boolean:数据类型表示一位的信息,只有两个取值:true和false


2.原始数据类型和封装类的区别

原始类型           封装类   
    boolean            Boolean   
    char          		Character   
    byte            	    Byte   
    short                Short   
    int                    Integer   
    long                 Long   
    float                 Float   
    double             Double

传递方式不同
封装类是引用类型。

基本类型(原始数据类型)在传递参数时都是按值传递,而封装类型是按引用传递的(其实“引用也是按值传递的”,传递的是对象的地址)。由于包装类型都是不可变量,因此没有提供改变它值的方法,增加了对“按引用传递”的理解难度。

int是基本类型,直接存放数值;Integer是类,产生对象时用一个引用指向这个对象。

封装类可以有方法和属性
封装类可以有方法和属性,利用这些方法和属性来处理数据,如Integer.parseInt(Strings)。基本数据类型都是final修饰的,不能继承扩展新的类、新的方法。

默认值不同
基本类型跟封装类型的默认值是不一样的。如int i,i的预设为0;Integer j,j的预设为null,因为封装类产生的是对象,对象默认值为null。

存储位置
基本类型在内存中是存储在栈中,引用类型的引用(值的地址)存储在栈中,而实际的对象(值)是存在堆中。


3.String、StringBuffer、StringBuilder区别

  • 如果要操作少量的数据用 = String
  • 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
  • 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

String:

1,是字符串常量,一旦创建就不能修改。对于已经存在了的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。

2,String也是final类,不能被继承。

3,而且String是对象而不是基本类型。

4,string覆盖了equals方法和hashCode()方法。

StingBuffer:

1,是字符串可变对象,可以对字符串进行操作,修改字符串原有值时不会新建一个对象。

2,执行效率较慢,但是线程安全

3,StringBuffer没有覆盖equals方法和hashCode()方法。

4,可以动态的构造字符数据,append()方法。

StringBuilder:

1,也是字符串可变对象,同StringBuffer一样,可以对字符串进行操作,也不会新建对象。

2,执行效率高效,但是线程不安全。


4.运行时异常和非运行时异常的区别
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception 。
Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
Exception :表示可恢复的例外,这是可捕捉到的。
Java 提供了两类主要的异常 :runtime exception 和 checked exception 。 checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。

但是另外一种异常: runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由 Thread.run() 抛出 ,如果是单线程就被 main() 抛出 。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception 的子类,也有一般异常的特点,是可以被 Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。

如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。
5.简述一下面向对象的特征,并举例说明你对面对对象的理解
面向对象的四大特征:封装,继承,多态,抽象。

面向过程(Procedure Oriented 简称PO :像C语言):

  • 看名字它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数)
    。然后按照一定的顺序,执行完这些方法(每个方法看作一个个过程),等方法执行完了,事情就搞定了。

面向对象(Object Oriented简称OO :像C++,JAVA等语言):

  • 看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

------------------------------------------最后来个例子

问题: 冰箱里面放有脏衣服,怎么洗干净?

面向过程:
1 执行加洗衣粉方法;
2 执行加水方法;
3 执行洗衣服方法;
4 执行清洗方法;
5 执行烘干方法;
----------解决问题 拆成一个个方法,是没有对象去调用的。 通过一个个方法的执行解决问题。
面向对象: 我先搞个洗衣机对象和人对象

洗衣机: 加入一些属性和方法 洗衣服方法 清洗方法 烘干方法 人:加洗衣粉方法 加水方法

然后 人.加洗衣粉 人.加水 洗衣机.洗衣服 洗衣机.清洗 洗衣机.烘干

----------同样解决问题 先抽象出对象,然后用对象执行方法的方式解决问题。

然后在来一个我以前知乎看到的例子 : 男女亲密例子 man gril

面向过程: make_love(man,gril) ---------解决问题 拆成一个动作,把数据丢进去

面向对象: man.make_love(gril) 或者 gril.make_love(man) -----解决问题 抽象出对象,对象执行动作 。

当然,你面试的时候,你不要做make_love …你可以说是打牌 。

面向过程就是 打牌 (你,我,他)

面向对象就是 我.打牌(你,他) or 你.打牌(我,他) or 他.打牌(我,你)

我觉得算是很通俗啦,希望对大家有用。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值