java基础知识-持续跟新

1

1.1JDK和JRE

  • JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。

1.2重载和重写的区别

重载 重写
发生在同一个类中 发生在父子类中
方法名必须相同 方法名必须相同
参数列表不同 参数列表必须相同
方法返回值可以不同 返回值范围小于等于父类
访问修饰符可以不同 访问修饰符范围大于等于父类

注:重载发生在编译时。
重写中如果父类方法访问修饰符是private,则子类就不能重写该方法。

1.3String、StringBuffer和StringBuilder的区别。

可变性:String是不可变的,StringBuffer和StingBuilder是可变的。String类中是使用final关键字字符数组保存字符串,private final char value[],所以String对象是不可变的。而StringBuffer和StringBuilder都是继承AbstractStringBuilder类,在 AbstractStringBuilder中也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
线程安全性:String中的对象是不可变的,也就可以理解为常量,线程安全。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以也是线程安全的;StringBuilder没有对方法加同步锁,所以是线程不安全的。
性能:每次对String类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String对象。StringBuffer每次都会对StringBuff本身进行操作,而不是生成新的对象并改变对象引用。StringBuilder相比StringBuffer的性能要好,但是要冒线程不安全的风险。
总结
操作少量的数据:String
单线程操作字符串缓冲区下操作大量数据:StringBuilder
多线程操作字符串缓冲区下操作大量数据:StringBuffer

1.4 自动装箱与拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型;

1.5==和equals()

1.==:它的作用是判断两个对象的地址相不相等。即判断两个对象是不是同一个对象(基本类型 ==比较的是值,引用类型 ==比较的是内存地址 )
2.equals:判断两个对象是否相等,但他一般有两种情况:

  • 类没有覆盖equals()方法。则通过equals()比较该类的两个对象,等价于“==”比较。
  • 类覆盖了equals()方法。一般,我们都覆盖equals()来判断两个对象是否相等,如果相等返回true。

总结两种方法:String中的equals方法是被重写过的,因为Object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值。(当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。)

1.6final关键字总结

  • final修饰的类为最终类,该类不能被继承。
  • final修饰的方法不能被重写。
  • final修饰的变量为常量,常量必须初始化,初始化以后数据不能修改。

1.7 Object类的常见方法总结

public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了 final关键字修饰,故不允许子类重写。
public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的 HashMap。 
public boolean equals(Object obj)//用于比较2个对象的内存地址是否相等,String类对该方法进行了重写用户 比较字符串的值是否相等。 
protected native Object clone() throws CloneNotSupportedException//naitive方法,用于创建并返回 当前对象的一份拷贝。一般情况下,对于任何对象 x,表达式 x.clone() != x 为true,x.clone().getClass() == x.getClass() 为true。Object本身没有实现Cloneable接口,所以不重写clone方法并且进行调用的话会发生 CloneNotSupportedException异常。 
public String toString()//返回类的名字@实例的哈希码的16进制的字符串。建议Object所有的子类都重写这个方 法。
public final native void notify()//native方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视 器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。 
public final native void notifyAll()//native方法,并且不能重写。跟notify一样,唯一的区别就是会唤醒 在此对象监视器上等待的所有线程,而不是一个线程。 
public final native void wait(long timeout) throws InterruptedException//native方法,并且不能 重写。暂停线程的执行。注意:sleep方法没有释放锁,而wait方法释放了锁 。timeout是等待时间。 
public final void wait(long timeout, int nanos) throws InterruptedException//多了nanos参数, 这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。 所以超时的时间还需要加上nanos毫秒。 
public final void wait() throws InterruptedException//跟之前的2个wait方法一样,只不过该方法一直等 待,没有超时时间这个概念 
protected void finalize() throws Throwable {
    
     }//实例被垃圾回收器回收的时候触发的操作

标题

猜你喜欢

转载自blog.csdn.net/weixin_42856363/article/details/104439485