java面试宝典摘录

      1. 数据类型

 八种      字节数   数据表示范围

byte        1 -128~127

Short   2 -32768~32767

Int 4  -2147483648~2147483647

long    8 -2^63  ~  2^63 -1

float 4

double 8

char 2

Boolean 1

byte 1-128~127 
Short2-32768~32767 
int4-2147483648~2147483647 
long8-2^63  ~  2^63 -1 
float4  
doouble8  
char2  
boolean1  

 

      1. char为什么能存储汉字?

 答: char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。(char类型占2个字节Unicode码是16位,所以一个Unicode码占两个字节)。

      1. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型,这样子才可以正确的编译)  short s1 = 1; s1 += 1;(可以正确编译)

      1. 访问控制权限

      1. 保留字列表 (依字母排序共14组) : Java保留字是指现有Java版本尚未使用但以后版本可能会作为关键字使用。
        byValue, cast, false, future, generic, inner, operator, outer, rest, true, var , goto ,const,null
      2. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

答:可以包含多个类。其中最多只有一个public修饰的类,且这个类的类名要和文件名相同。

内部类:

1.通过内部类可以实现多继承的问题。

2.内部类提供了更好的封装,除了该外围类,其他类都不能访问;

public class OuterClass {

    private String name ;

    private int age;

    /**省略getter和setter方法**/

    public class InnerClass{

        public InnerClass(){

            name = "chenssy";

            age = 23;

        }

        public void display(){

            System.out.println("name:" + getName() +"   ;age:" + getAge());

        }

}

    public static void main(String[] args) {

        OuterClass outerClass = new OuterClass();

        OuterClass.InnerClass innerClass = outerClass.new InnerClass();

        innerClass.display();

    }

}

      1. ==和equals的区别

“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】 

equal用于比较两个对象的值是否相同【不是比地址】 

【特别注意】Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。

"=="比"equal"运行速度快,因为"=="只是比较引用.

      1. Overload(重载)和Override(重写)的区别。Overloaded的方法是否可以改变返回值的类型?

overload:方法重载, 一个类多个方法,名称相同,参数个数及类型不完全相同。 override:方法的重写,子类覆盖父类的方法; 两者都是Java多态性的不同表现。Overload的方法是可以改变返回值的类型。

重写的规则:

1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:

父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

而重载的规则:

1、必须具有不同的参数列表;

2、可以有不责问的返回类型,只要参数列表不同就可以了;

3、可以有不同的访问修饰符;

4、可以抛出不同的异常;

      1. 接口与抽象类的区别

1、抽象类和接口都不能直接实例化。如果要实例化,涉及到多态。抽象类要实例化,抽象类定义的变量必须指向一个子类变量,这个子类继承并实现了抽象类所有的抽象方法。接口要实例化,接口定义的变量必须指向一个子类变量,这个子类继承并实现了接口所有的方法。

2、抽象要被子类继承,接口要被子类实现。

3、接口里只能对方法进行声明,抽象类里既可以对方法进行声明,又可以实现。

4、抽象类里面的抽象方法必须被子类实现,如果子类不能全部实现,子类必须也是抽象类。接口里面的方法必须被子类实现,如果子类不能全部实现,子类必须是抽象类。

5、接口里面的方法不能有具体的实现,这说明接口是设计的结果,而抽象类是重构的结果。

6、抽象类里面可以没有抽象方法,如果一个类里面有抽象方法,那么这个类一定是抽象类。

7、抽象类中的抽象方法都要被实现,所以抽象方法不能是静态的static,也不能是私有的private。

8、接口可以继承接口,甚至可以继承多个接口;类可以实现多个接口,只能继承一个类。

9、抽象类主要用来抽象类别,接口主要用来抽象方法功能。关注事物的本质,用抽象类;关注一种操作,用接口。

另解:

从语法层面而言,接口和抽象类的区别如下:

1.抽象类可以提供成员方法的实现细节,而接口中只能存在抽象方法(默认 public abstract)

2.抽象类中的成员变量可以是多种类型,而接口中的成员变量必须用public static final(常量)修饰

3.一个类只能继承一个抽象类(单继承),但可以实现多个接口(多继承)。

4.抽象类中允许含有静态代码块和静态方法,而接口类不能。

从设计层面而言,接口和抽象类的区别如下:

1.抽象类是对整一个类的属性,行为等方面进行抽象,而接口则是对行为抽象。就好比飞机和鸟,抽象类抽象出的是飞行物类。而接口则是抽闲出飞行方法。

2.抽象类是一个模板式的设计,当在开发过程中出现需求更改的情况,只需要更改抽象类而不需要更改它的子类。接口是一种辐射性设计,当接口的内容发生改变时,需要同时对实现它的子类进行相应的修改。

3.抽象类可以类比为模板,而接口可以类比为协议。

      1. error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。是由Java虚拟机控制的。

Exception是不能被忽略的,所以在程序的某一部分一定会得到处理,异常提供了一种重错误到可靠恢复的途径。可以通过调试程序进行人为的控制。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值