Java知识总结(一)

38 篇文章 0 订阅

一、基础篇

1.1、Java基础 

  • 面向对象的特征:继承、封装和多态





     

  • final, finally, finalize 的区别
    1、final修饰符(关键字)。被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,不能重载。
    2、finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
    3、finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 

  • Exception、Error、运行时异常与一般异常有何异同


    可以看出,所有的异常都是由Throwable类,下一层分解为两个分支:ErrorExceprion。 
    Error层次结构描述了java运行时系统的内部错误和资源耗尽错误。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。应用程序不应该抛出这种类型的对象。 
    Exceprion这个层次结构又分解为连个分支:一个分支派生于RuntimeException;另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException;而程序本身没有没有问题,但由于像I/O错误这类异常导致的异常属于其他异常。 
    常见的RuntimeException(运行时异常): 
    IndexOutOfBoundsException(下标越界异常) 
    NullPointerException(空指针异常) 
    NumberFormatException (String转换为指定的数字类型异常) 
    ArithmeticException -(算术运算异常 如除数为0) 
    ArrayStoreException - (向数组中存放与声明类型不兼容对象异常) 
    SecurityException -(安全异常) 
    IOException(其他异常) 
    FileNotFoundException(文件未找到异常。) 
    IOException(操作输入流和输出流时可能出现的异常。) 
    EOFException (文件已结束异常)
     

  • 请写出5种常见到的runtime exception
        常见的RuntimeException(运行时异常): 
             IndexOutOfBoundsException(下标越界异常) 
             NullPointerException(空指针异常) 
            NumberFormatException (String转换为指定的数字类型异常) 
            ArithmeticException -(算术运算异常 如除数为0) 
            ArrayStoreException - (向数组中存放与声明类型不兼容对象异常) 
            SecurityException -(安全异常) 

  • int 和 Integer 有什么区别,Integer的值缓存范围(-128~127)
    (1)Integer是int的包装类;int是基本数据类型; 
    (2)Integer变量必须实例化后才能使用;int变量不需要; 
    (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; 
    (4)Integer的默认值是null;int的默认值是0。

  • 包装类,装箱和拆箱
    包装类(原始类型对应的类,即Boolean, Byte, Short, Integer, Long, Float, Double, Character)的自动拆、装箱分别是指如下的过程:
     

    装箱:是指基本类型变为相应包装类的过程,如Integer a=Integer.valueOf(100);或者int a=100;Integer b=new Integer(a);这里的Integer.valueOf(100)和new Integer(a)就是装箱,由基本数据类型构造出一个包装类的对象。

    拆箱:就是装箱的逆过程。如Integer a=new Integer(100);int b=a.intValue();这里的a.intValue()就是拆箱的过程,由一个包装类对象转换到相应的基本数据类型。

     

  • String、StringBuilder、StringBuffer
    1.运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
    String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

    2.在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
    总结:

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

      StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

      StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

  • 重载和重写的区别
    方法重写(overriding):

           1、也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。

      2、子类抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常)

      3、子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
    方法重载(overloading):重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,可以参考API帮助文档看看类的构造方法。

  • 抽象类和接口有什么区别
    抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
    接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

  • 说说反射的用途及实现 (参考链接:https://www.jianshu.com/p/d6035d5d4d12

    当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。我们认为 Java 并不是动态语言,但是它却又一个非常突出的动态相关的机制,俗称:反射。
    Reflection 是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类和对象的内部属性。

    通过反射,我们可以在运行时获得程序或程序集中每一个类型成员和成员变量的信息。
    程序中一般的对象类型都是在编译期就确定下来的,而Java 反射机制可以动态的创建对象并调用其属性,这样对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象即使这个对象在编译期是未知的,
    反射的核心:是 JVM 在运行时 才动态加载的类或调用方法或属性,他不需要事先(写代码的时候或编译期)知道运行对象是谁。


    反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法

  • 说说自定义注解的场景及实现

    @Table("user")   @Test等

  • HTTP请求的GET与POST方式的区别
    1.get是从服务器上获取数据,post是向服务器传送数据。
    2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
    3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

    4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。(这里有看到其他文章介绍get和post的传送数据大小跟各个浏览器、操作系统以及服务器的限制有关)

    5.get安全性非常低,post安全性较高。
     

  • Session与Cookie区别
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
       考虑到安全应当使用session。
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
       考虑到减轻服务器性能方面,应当使用COOKIE。
    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

  • 列出自己常用的JDK包
    1、java.lang
    2、java.sql
    3、java.io
    4、java.math
    5、java.text
    6、java.net
    7、java.util
    8、java.awt
    9、java.applet
    10、java.nio

  • MVC设计思想
    控制器(Controller):用来控制程序的流转
    界面(View):用来和用户进行交互。
    模型(Model):用来封装数据和处理业务逻辑。
    MVC 是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示 处理结果)。
    1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务(为了保证业务逻辑能够正常进行的事务、安全、权限、日志等等的功能模块)
    2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。

    3)控制器:视图发请求给控制器,由控制器来选择相应的模型来处理;模型返回的结果给控制器,由控制器选择合适的视图。

  • equals与==的区别
    == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
    equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
     

  • hashCode和equals方法的区别与联系(参考https://www.cnblogs.com/keyi/p/7119825.html

  • 什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
    把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
    序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

  • Object类中常见的方法,为什么wait  notify会放在Object里边?
    简单的说:因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()和notify();所以wait和notify属于Object。

    专业说:因为这些方法在操作同步线程时,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。

    也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法是定义在object类中。

  • Java的平台无关性如何体现出来的

    JVM所指的就是Java虚拟机。Java正是凭借Java虚拟机来实现其平台无关性的。通过在机器与编译程序之间加入一层抽象(即JVM)来实现脱离平台这一性质。

    其中,注意:

    Java虚拟机面向编译器给其提供相同的接口(即各平台编译器相同),这就是说,编译器只要面向Java虚拟机生成Java虚拟机可以理解的代码,那么就可以通过不同平台的不同解释器来生成与平台相对应的机器码来执行Java程序。虚拟机暴露给编译器的接口是相同的,而虚拟机的解释器针对不同的平台而不同。

  • JDK和JRE的区别
    Jdk 是java development kit,是java的开发工具包,里面包含了各种类库和工具。
    Jre 是java runtime environment, 是java程序的运行环境。

  • Java 8有哪些新特性



     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值