Java面试基础(Android面试会问java一些基础知识)

 1.&和&&有什么区别

& 不管前面的条件是否正确,后面都执行

&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好

2.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

在switch(e)中,e只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

switch中可以是字符串类型,String(JDK1.7之后才可以作用在string上),switch中可以是枚举类型(JDK1.5之后)。

3.静态变量和实例变量的区别?

首先在语法定义上区别:静态变量前面要加static,实例变量不用

在程序运行时:实例变量输入对象的属性,必须创建了实例对象(如 new)才会被分配空间,才可以使用实例变量,静态变量不属于某个实例对象,而是属于类,也叫类变量,只要程序加载了类的字节码,不用创建任何实例对象就会被分配空间,就可以被使用。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

4.使用final关键字修饰一个变量时,是引用不能变,还是引用的变量不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

 final StringBuffer a =new StringBuffer("immutable");

a 是引用变量  a指向的对象中的内容还是可以改变的
        执行如下语句将报告编译期错误:

        a=new StringBuffer("");
        但是,执行如下语句则可以通过编译:

        a.append(" broken!");

 

        有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

        public void method(final  StringBuffer param){

        }

        实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("a");

 

5.Integer与int的区别

1.Integer是int的包装类,int则是java的一种基本的数据类型;

2.Integer变量必须实例化之后才能使用,而int变量不需要实例化;

3.Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值

4.Integer的默认值是null,而int的默认值是0。

6.java的几种基本类型

7.String能被继承吗?为什么?

不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。平常我们定义的String str=”a”;其实和String str=new String(“a”)还是有差异的。

前者默认调用的是String.valueOf来返回String实例对象,至于调用哪个则取决于你的赋值,比如String num="a",调用的是
        public static String valueOf(Object obj){
              return (obj == null) ? "null" : obj.toString();
        }

 后者则是调用如下部分:
        public String(String original) {      

     throw new UnsupportedOperationException("Use StringFactory instead.");

}
        最后我们的变量都存储在一个char数组中
        private final char value[];

8.String,StringBuffer,StringBuilder的区别

1.String为字符串常量,一旦创建不可更改,对它的操作是不断创建新对象以及回收旧对象,StringBuffer和StringBuilder为变量,可以修改。

2.StringBuffer是线程安全,StringBuilder不是线程安全。

3.运行速度对比:StringBuiler>StringBuffer>String(速度从高到底)

4.一般在不涉及多线程访问,频繁更改值的情况下,建议使用StringBuilder

总结:

String:适用于少量字符串操作

StringBuilder:适用于单线程字符缓冲区的大量操作

StringBuffer:适用于多线程字符缓冲区的大量操作

9、String 是最基本的数据类型吗?

不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。

10、用最有效率的方法计算2乘以8?

 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。

11.重载(Overload)和重写(Override)的区别?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。

(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。

(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

 

 

12、Java中实现多态的机制是什么?

Java实现多态有三个必要条件:继承、重写、向上转型(将子类转化为父类)。

静态的多态:方法名相同,参数个数或类型不相同。(重载overloading)
       动态的多态:子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法
       实现接口的实例传与接口的引用调用的实现类的方法。

13、数组有没有length()方法?String有没有length()方法?

数组没有length()方法,有length 的属性。String 有length()方法。

14、构造器(constructor)是否可被重写(override)?

构造器不能被继承,因此不能被重写,但可以被重载。

15、List、Set、Map是否继承自Collection接口?

List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。

16、Collection和Collections的区别?

Collection是一个接口,它是Set、List等容器的父接口;Collections是个一个工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

17、List、Map、Set三个接口存取元素时,各有什么特点?

List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一

 

 

持续更新中

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值