一、java基础

1、面向对象和面向过程的区别

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点:没有面向对象易维护、易复用、易扩展

 

面向对象

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

缺点:性能比面向过程低

 

面向过程:

为了把大象装进冰箱,需要3个过程。

1) 把冰箱门打开(得到打开门的冰箱)

2) 把大象装进去(打开门后,得到里面装着大象的冰箱)

3) 把冰箱门关上(打开门、装好大象后,获得关好门的冰箱)

每个过程有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱。

1:

冰箱开门(冰箱)

冰箱装进(冰箱, 大象)

冰箱关门(冰箱)

 

面向对象:

为了把大象装进冰箱,需要做三个动作(或者叫行为)。

每个动作有一个执行者,它就是对象。

1) 冰箱,你给我把门打开

2) 冰箱,你给我把大象装进去(或者说,大象,你给我钻到冰箱里去)

3) 冰箱,你给我把门关上

依次做这些动作,就能把大象装进冰箱。

1:

冰箱.开门()

冰箱.装进(大象)

冰箱.关门()

 

面向过程可以理解为我不停的写函数完成我要的功能。注重函数实现。

面向对象则是我在写这个功能的时候考虑把这个功能封装起来。以后我就可以直接拿来用了。注重封装好后调用,不用管函数怎么实现,只要结果。

2、Java的四个基本特性(抽象、封装、继承,多态)

抽象:就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。

封装:把数据和行为结合在一个类中,并对对象的使用者隐藏数据有关的实现过程,封装赋予对象“黑盒”特性。封装分为属性的封装和方法的封装。

继承:继承意味着能声明一个类型,而且能继承父类中的所有操作和数据,同时还有机会声明自己的新方法以改进、具体化、代替或者扩展父类中的方法 。父类的意义在于抽取多类事物的共性。

多态:一个对象变量可以指向多种实际类型,允许不同类的对象对同一消息做出响应。方法的重载、类的覆盖正体现了多态。

3、重载和重写的区别

重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。

重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。

4、构造器Constructor是否可被override

构造器不能被重写,不能用static修饰构造器,只能用 public private protected这三个权限修饰符,且不能有返回语句。

5、访问控制符public,protected,默认,private的区别

public在任何地方都能访问;

protected在同包内的类及包外的子类能访问;

不写即默认在同包内能访问。

private只有在本类中才能访问;

private、default(本包)、protect(本包及其子类)、public

6、是否可以继承String类

String类是final类故不可以继承,一切由final修饰过的都不能继承

7、String和StringBuffer、StringBuilder的区别

可变性:

String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。

StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。

线程安全性:

String中的对象是不可变的,也就可以理解为常量,线程安全。

AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

性能:

每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

8、hashCode和equals方法的关系

1.hashCode是为了提高在散列结构存储中查找的效率,在线性表中没有作用。

2.equals和hashCode需要同时覆盖。

3.若两个对象equals返回true,则hashCode有必要也返回相同的int数。

4.若两个对象equals返回false,则hashCode不一定返回不同的int数,但为不相等的对象生成不同hashCode值可以提高 哈希表的性能。

5.同一对象在执行期间若已经存储在集合中,则不能修改影响hashCode值的相关信息,否则会导致内存泄露问题。

http://blog.csdn.net/lijiecao0226/article/details/24609559

9、抽象类和接口的区别

语法层次:

抽象类和接口分别给出了不同的语法定义

设计层次:

抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

跨域不同:

抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,"like-a"的关系。。

设计层次不同:

抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

10、自动装箱与拆箱

装箱:将基本类型用它们对应的引用类型包装起来;

拆箱:将包装类型转换为基本数据类型;

Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值