面经总结:J2SE

 

  • 面向对象的特性?

(1.特性;2.优势)
封装、继承、多态;
  封装:封装隐藏了类的内部实现机制,能够在不影响使用的状况下改变类的内部结构,同时也保护了数据。对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。 优势:1.隐藏对象的属性来保护对象内部状态;2.禁止对象的不良交互提升模块化;
  继承: 给对象提供了从基类获取字段和方法的能力。优势:提升代码的重用性;
  多态: 指容许不一样类的对象对同一消息作出相应。所谓多态就是指程序中定义的引用变量所指向的具体类型和经过该引用变量发出的方法调用在编程时并不肯定,而是在程序运行期间才肯定,即一个引用变量倒底会指向哪一个类的实例对象,该引用变量发出的方法调用究竟是哪一个类中实现的方法,必须在由程序运行期间才能决定。由于在程序运行时才肯定具体的类,这样,不用修改源程序代码,就可让引用变量绑定到各类不一样的类实现上,从而致使该引用调用的具体方法随之改变,即不修改程序代码就能够改变程序运行时所绑定的具体代码,让程序能够选择多个运行状态,这就是多态性。
  实现多态的三个条件:
  1) 继承:在多态中必须存在有继承关系的子类和父类。
  2) 重写:子类对父类中某些方法进行从新定义,在调用这些方法时就会调用子类的方法。
  3) 向上转型:在多态中须要将子类的引用赋给父类对象,只有这样该引用才可以具有技能调用父类的方法和子类的方法。
  多态的特色:父类对象引用子类;1.能够调用父类方法;2.子类重写父类则调用子类方法;3.只存在子类的方法不可调用,子类重载父类的方法不可调用(重载的方法父类中不存在!);
  多态的优势:可扩充性,能够方便的增长新的子类不影响已存在类的功能特性。
 
 
  • static能够修饰什么?final能够修饰什么?

static 能够修饰什么:成员变量、成员方法、静态块;编程

final 能够修饰什么:成员变量、成员方法、类;数组

1、final关键字能够用来修饰类、方法、变量。各有不一样。多线程

A、修饰类(class)。 
     一、该类不能被继承。 
     二、类中的方法不会被覆盖,所以默认都是final的。 
     三、用途:设计类时,若是该类不须要有子类,没必要要被扩展,类的实现细节不容许被改变,那么就设计成final类模块化

B、修饰方法(method) 
     一、该方法能够被继承,可是不能被覆盖。 
     二、用途:一个类不容许子类覆盖该方法,则用final来修饰 
     三、好处:能够防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用fianal方法转入内嵌机制,提升了执行效率。 
     四、注意:父类中的private成员方法不能被子类覆盖,所以,private方法默认是final型的(能够查看编译后的class文件)spa

C、修饰变量(variable) 
     一、用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。 
     二、特色:能够先声明,不给初值,这种叫作final空白。可是使用前必须被初始化。一旦被赋值,将不能再被改变。线程

D、修饰参数(arguments) 
     一、用final修饰参数时,能够读取该参数,可是不能对其做出修改设计

2、final关键字不能用来抽象类和接口。指针

 

  • Java修饰符的范围?

成员变量的修饰符:code

private:自身能够访问,同包子类不能继承,同包类不能访问;对象

默认:自身能够访问,同包子类能够继承,同包类能够访问;

protected:自身能够访问,同包子类能够继承,不一样包子类能够继承,同包类能够访问,其余类不能够访问;

public:不一样包子类能够继承,其余类能够访问;

public > protected > default > private

public 指定该变量为公共的,他能够被任何对象的方法访问

private 指定该变量只容许本身的类的方法访问,其余任何类(包括子类)中的方法均不能访问。

protected 指定该变量能够被自身和子类访问。在子类中能够覆盖此变量。

 

  • == 和 equals 的区别?

1.基本类型; 2.基本类型封装;3.String;4.非字符串变量

equals()是Object类的方法;

(1) 若是是基本类型比较,那么只能用==来比较,用equals会编译错误,由于不是对象。int a = 3;

(2) 对于基本类型的包装类型,好比Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。Integer n1 = new Integer(30);

(2.5)对于String a = “a”; Integer b = 1;这种类型的特有对象建立方式,==的时候值是相同的。

(3)对于字符串变量来讲,使用“==”和“equals()”方法比较字符串时,其比较方法不一样。

“==”比较两个变量自己的值,即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同。

String s1 = "123"; 
String s2 = "123"; 

String s4 = new String("123"); 
String s5 = new String("123"); 

s1==s2 true;   s1.equals(s2) true;   

s4==s5 false;   s4.equals(s5) true;

s1==s4 false;   s1.equals(s4) true;

s1/s2分别指向字符串常量"123"建立的对象,在常量池里只有一个对象,内容为"123";

s4/s5两个引用对象指向的对象内容相同,可是new操做符建立的,内存中分配两块空间给这两个对象,因此内存地址不一样。

(4)对于非字符串变量来讲,"=="和"equals"方法的做用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象

 

  • 基本数据类型?

基本类型有八种:

整型4种:byte/short/int/long  字节数:1/2/4/8

字符型1种:char  2

浮点型2种:float/double  4/8

布尔型1种:boolean 1/8(八分之一字节)

一个字节等于8位,等于256个数,就是-128到127

大写的B表示Bytes=字节;小写的b表示bit=位;1byte=8bit;

自动转换:(小可转大,大转小会失去精度)

byte -> short/char -> int -> long -> float -> double

 

  •  error/exception/runtime exception区别?

Error和Exception都实现了Throwable接口 
Error指的是JVM层面的错误,好比内存不足OutOfMemoryError;
Exception 指的是代码逻辑的异常,好比下标越界OutOfIndexException;

Exception分为可查异常CheckedException和运行时异常RuntimeException:

可查异常是必须处理的异常,要么try catch住,要么往外抛,谁调用,谁处理,好比 FileNotFoundException、IOException、SQLException等。若是不处理,编译器就不让你经过。

运行时异常 又叫作非可查异常,在编译过程当中,不要求必须进行显示捕捉。

常见的Runtime Excepiton?

NullPointerException 空指针异常
ArithmeticException 算术异常,好比除数为零
ClassCastException 类型转换异常
ConcurrentModificationException 同步修改异常,遍历一个集合的时候,删除集合的元素,就会抛出该异常 
IndexOutOfBoundsException 数组下标越界异常
NegativeArraySizeException 为数组分配的空间是负数异常

为何分两种异常?

Java之因此会设计运行时异常的缘由之一,是由于下标越界,空指针这些运行时异常太过于广泛,若是都须要进行捕捉,代码的可读性就会变得很糟糕。

 

  • object类的方法?

9种;(简要介绍各方法)

  1.对象的复制/获取/String/释放:clone/getClass/toString/finalize;

  2.hash:equals/hashCode;

  3.多线程:wait/notify/notifyAll

clone:实现对象的浅复制;

getClass:得到运行时类对象;

finalize:用于释放资源;

equals:比较对象是否相等;基本类型不能够用equals,对于String类型“equals”和“==”做用不一样;

hashcode:用于hash寻找;

wait:使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具备该对象的锁;wait()方法一直等待,直到得到锁或者被中断。wait(longtimeout)设定一个超时间隔,若是在规定时间内没有得到锁就返回。

调用该方法后当前线程进入睡眠状态,直到如下事件发生:

(1)其余线程调用了该对象的notify方法。

(2)其余线程调用了该对象的notifyAll方法。

(3)其余线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就能够被调度了,若是是被中断的话就抛出一个InterruptedException异常。

notify:唤醒在该对象上等待的某个线程

 

  • 反射机制?

反射机制实际上就是动态的加载一些类,这些类在编译时不须要加载,但运行时再调用。
反射是在运行时获取类信息,经过动态的调用来改变程序行为。
 
 
  • 抽象类和接口的区别?

1.变量;2.方法(抽象、public);3.一/多;
  1)变量:接口的变量默认是final的,而抽象类能够包含非final变量;
  2)方法:接口中的方法默认是public,抽象类方法能够是private/protected/public;接口中只能提供抽象方法,而抽象类中既能够提供抽象方法,也能够提供实现方法;
  3)一个类能够实现不少接口,但只能继承一个抽象类;
 
  • Class中方法的执行顺序?

static{} > {} > className{} > method(){}

静态代码块>匿名方法块>构造方法>普通方法。

相关文章
相关标签/搜索