java八股文精简自我理解版①——先总结一点点(献给每一位面试求职者)

1.面向对象?

  面向对象是一种编程思维,就是把世间万物抽象成一个对象,物都有其特点与行为,物与物之间也有不同的关系,相同的对象也有其属性与方法,对象之间也有其不同的关系,把对象作为数据的载体进行编程,这种编程思维就是面向对象。
  面向对象有三个特点:封装、继承、多态。
  封装:隐藏一些类的内部实现机制,对外暴露访问它的方法,提高了代码的可维护性、复用性。
  继承:从已有的类中派生出新的类,新的类吸收原有的类中的属性与方法,同时还可以进行更多的扩展,满足is a的关系,提高代码复用性。
  多态:一继承,二重写,三父类引用指向子类对象,提高代码的可移植性,健壮性。


2.JDK,JRE,JVM之间的关系?

  JDK包含JRE包含JVM。
  JDK是完整的开发包,可以创建新的程序并编译运行。
  JRE是java运行环境,包括jvm,java类库,java命令和其他一些基础构件,如果不创建新程序,只运行的话有JRE就够了。
  JVM是运行java字节码的虚拟机,对不同的操作系统都有特定的实现。


3.重写和重载?

  重载和重写都是多态实现的一种方式,重载是编译时的多态,重写是运行时的多态。
  重载发生在同类里,方法名相同,参数列表不同,跟返回值无关,可抛出不同的异常,可以有不同的修饰符。
  重写发生在父类与子类之间,返回类型和参数列表必须相同,切不能比被重写的方法访问权限更低,不能比父类被重写方法声明更多的异常(构造方法不可重写;final修饰的方法不可重写;private、static修饰的方法不可以重写,但可以再次声明)。


4.接口和抽象类的区别?

  抽象类:可以有构造器,具体方法和抽象方法,静态方法,可以自定义成员变量,有抽象方法必须声明为抽象类,一个类只能继承一个抽象类。
  接口:不能有构造器,方法都是抽象方法,不能有静态方法,成员必须都是public,且其中定义的成员变量都是常量,一个类可以实现多个接口。
  相同点:不能实例化,都可以作为引用类型,一个类如果继承了一个抽象类或者实现了多个接口,就必须对其中的抽象方法进行实现,否则仍然需要被声明为抽象类。
  一般名词用抽象类,形容词用接口。


5.==和equals区别?

  ==在比较基本数据类型时候比较的是值,比较引用数据类型时候比较的就是其在堆中的地址。
  equals比较两个对象的内容值,不可以比较基本数据类型,如果没有重写equals方法,则比较对象地址。


6.hashCode()与equals()?

  hashCode计算对象的散列码,确定对象在哈希表中的索引位置;equals比较对象内容。
  拿HashSet来看,加入对象的时候,先用hashCode算出散列码,判断对象加入的位置,如果不相同就不会进行equals了,如果相同的话就会进行equals比较判断对象是否真正相等,如果相等就不会让其加入。


7.String、StringBuffer、StringBuilder?

  String:底层用final修饰,不可改变,每次对String进行改变都会生成一个新的对象,然后将指针指向新的对象。
  StringBuffer:线程安全的可变字符串。
  StringBuilder:非线程安全的可变字符串。


8.你知道那些String类里的方法?

  valueOf();把其他类型转化为字符串。
  length();得到字符串的字符个数。
  split();将一个字符串按照指定内容劈开。
  equals();比较内容是否一样。
  equalsIgnoreCase();忽略大小写比较
  contains();判断是否包含指定改内容。
  toUpperCase();将字符串全部转换位大写。
  toLowerCase();将字符串全部转化为小写。
  replace();将某个内容全部替换为某个内容。


9.java异常处理方式?

  每个异常都是一个对象,是Throwable类或其子类的实例,抛出异常的时候,系统自动根据该异常对象寻找合适的异常处理器来处理异常。
  关于异常通常有throws声明异常,throw抛出异常,trycatch捕获异常
  throws在方法的签名处,可声明多个异常。
  throw在方法内部。


10.final关键字?

  final可以修饰类,方法,变量。
  修饰类时,该类不可被继承。
  修饰方法时,该方法不可被重写。
  修饰变量时,基本变量则值不可改变;引用变量则地址不可变,值可变。


11.static关键字?

  static可修饰类,方法,代码块,变量,不可以修饰构造器。
  被static修饰类或成员变量时,在不创建实例的情况下都能访问它的静态方法和静态成员变量。静态成员变量不能访问非静态成员变量。


12.基本数据类型和引用数据类型?

基本数据类型:
  整数类型:byte  1字节  (-128~127)
       short  2字节  (-32768~32767)
       int  4字节  (-2147483648~2147483647)
       long  8字节  (-2^63 到2^63-1)
  浮点类型:float  4字节  
       double  8字节  
  字符类型:boolean  (false,true)
       char  2字节  (0~65535)
引用数据类型:
  数组,类,接口,nul。


13.访问修饰符?

  private:只能在当前类内部访问。
  default:可以被相同包下的其他类访问。
  protected:不仅相同包可以访问,其他包下的子类也能访问。
  public:都可以被访问到。


14.线程的创建方式?

四种:
  1.继承Thread:重写run方法,创建实例,start启动。
  2.实现Runnable接口:实现run方法,创建实例,start启动
  3.实现Callable接口:实现call方法,创建实例,并以该实例为参数,创建FutureTask对象,之后使用FutureTask为参数创建Thread对象,然后启动线程,调用get方法获取返回值。
  4.使用Executor框架:

public static ExecutorService newFixedThreadPool(int nThreads)//创建固定数目线程的线程池。
public static ExecutorService newCachedThreadPool()//创建一个可缓存的线程池,调用execute将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
public static ExecutorService newSingleThreadExecutor()//创建一个单线程化的Executor。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)//创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

15.wait()和sleep()?

  wait是Object的方法,sleep是THread方法。
  wait依赖synchronized锁,调用后会释放锁。sleep不依赖任何锁,调用后不会释放锁。
  wait需要notify或者notifyAll唤醒。sleep需要超时后自动返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clear all Epidemic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值