Java一些基础知识

JDK版本变化

  • Java5:自动装拆箱,枚举,可变参数(String…),泛型,for-each,注解
  • Java6:JDBC4.0,通用的注解
  • Java7:泛型实例化的自动推断,try-with-resouces
  • Java8:default方法,lambda表达式,Stream类,function接口,日期API(Clock,Timezones,LocalTime,LocalDate),多重注解,函数引用

Object方法

  • wait()
  • notify(), notifyAll()
  • equals(), hashCode()
  • getClass()
  • clone()
  • toString()
  • finalize()

== 与 equals()的区别

  • 基本类型==比较相等性
  • 引用类型==比较是否是同一个对象
  • equals()可以自己实现,不重写的话和==一样

equals() 与 hashCode() 的关系

  • 覆盖equals方法时总要覆盖hashCode方法
  • 两个对象根据equals方法返回true,那么这两个对象调用hashCode的值必须相等
  • 但两个对象根据equals方法返回false,那么这两个对象调用hashCode的值不一定相等,但是最好不相等。

异常与错误的关系与区别

这里写图片描述

  • Execption与Error都实现了Throwable接口
  • 主要分为受检的异常,运行时异常,错误
  • 受检的异常会希望用户处理这种异常,或传播出去,如Java.lang.ClassNotFoundException,Java.lang.NoSuchMetodException
  • 运行时异常表明编程错误,如Java.lang.ArrayIndexOutOfBoundsException,Java.lang.IllegalArgumentException,Java.lang.ArithmeticException,Java.lang.NullPointerException
  • 错误一般被JVM作为保留,不要自己继承。自己继承自RuntimeException

final,finally,finalize

  • final域:永不改变的编译时常量或不希望被改变的初始化值,类初始化阶段要有确定的值,也可以在构造函数中赋值。
  • final方法参数:无法在方法中改变参数引用所指向的对象
  • final方法:禁止子类修改这个方法。(所有private方法隐含final)
  • final类:禁止继承这个类
  • finally:在try-catch中用于抛出异常时也可以顺利的关闭一些资源连接
  • finalize: Object的一个方法,在对象被回收之前执行。

String,StringBuilder,StringBuffer

  • String: final类,内部有一个value[], 用+拼接的过程:ClassLoader.loadClass(StringBuilder)
  • StringBuffer与StringBuilder都是继承于AbstractStringBuilder
  • StringBuffer线程安全,StringBuilder线程不安全,但单线程的效率上StringBuilder比较高。

序列化与反序列化

  • 实现Serializable接口,并声明一个long类型的私有常量,serialVersionUID
  • transient申明的属性,在序列化时不会保存,如对象的密码属性
  • 有时将数据格式转换为json也是一种很好的做法
 public class User implements Serializable {
    private static final long serialVersionUID = 49494133484133L;
    private String name;
    private transient String pwd;
    //省略getter和setter
}

    public static void serial(Object obj,String filename){
        try (
                ObjectOutputStream outputStream = new ObjectOutputStream(
                        new FileOutputStream(filename));
        ){
            outputStream.writeObject(obj);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Object unSerial(String filename){
        Object obj = null;
        try (
                ObjectInputStream inputStream = new ObjectInputStream(
                        new FileInputStream(filename));
        ){
            obj = inputStream.readObject();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return obj;
    }
    public static void main(String[] args) throws IOException {
        String filename = "F://obj.txt";
        User user = new User("Owen","123456");
        serial(user,filename);

        User serialUser = (User) unSerial(filename);
        System.out.println(user.getName());    //输出Owen
        System.out.println(user.getPwd());     //输出null,因为被transient修饰
    }

泛型的super和extends

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


面向对象

继承(组合),封装,多态,抽象


try…finally的try里面有return会执行finally吗?会!先执行finally再return


对象的强、软、弱和虚引用

  • ### 强引用:强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
Object obj = new Object();
  • ### 软引用:描述一些还有用但并非必需的对象.如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。如浏览器的浏览页面。
//软引用
SoftReference<User>softReference=new SoftReference<User>(new User());
strangeReference=softReference.get();//通过get方法获得强引用
  • ### 弱引用:弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。WeakReference
public class ReferenceTest{
    public static void main(String... args){
        String str = new String("哈哈哈哈");
        WeakReference wr = new WeakReference(str);    //创建一个弱引用
        str = null;                                   //切断强引用
        System.out.println(wr.get());                 //输出:哈哈哈哈
        System.gc();                                  //强制垃圾回收
        System.runFinalization();                     //方法运行的任何待最后确定的对象的终止方法。
        System.out.println(wr.get());                 //输出null
    }
}
  • ### 虚引用:顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。PhantomReference
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值