Skip to content

Java类的基础,class基础

Java Object类有哪些方法?

Object类中的方法有:getClass(),hashCode(),equals(Object obj),protected Object clone(),toString(), notify(),notifyAll(),wait(long millis),wait(long millis, int nanos),wait(),protected void finalize()

  • getClass()返回Runtime中这个对象的类
  • hashCode()计算出这个对象的hash值
  • equals(Object obj)判断2个对象是否相同
  • clone()得到当前对象的副本。会先检查当前类是否实现了Cloneable接口,否则抛出CloneNotSupportedException异常。
  • toString()类的string表示,可复写并输出自己感兴趣的信息
  • wait()让当前线程进入等待状态,直到被唤醒或是达到预定的一段时间
  • notify()唤醒1个在等待的线程,去竞争对象的锁;如果有多个线程都在这个对象中等待,选择其中一个线程唤醒;被选中的线程由具体实现方式决定
  • notifyAll()唤醒所有在这个对象中等待的线程,去竞争对象的锁
  • finalize()由垃圾回收器调用,回收资源

Object类notify和notifyAll的区别?

notify会根据JVM具体实现,唤醒多个线程中的其中一个; notifyAll会唤醒在锁的等待池中的所有线程,继续执行。

抽象类能否实例化?

抽象类可以实例化,只是方式和普通类不同。实例化时需要实现抽象方法。

    static abstract class AbsClass {
        void print(String input) {
            System.out.println("AbsClass print: " + input);
        }
    }

    public static void main(String[] args) {
        AbsClass absClass1 = new AbsClass() {
        };
        absClass1.print("demo1");
        AbsClass absClass2 = new AbsClass() {
            @Override
            void print(String input) {
                super.print(input);
                System.out.println("absClass2 print: " + input);
            }
        };
        absClass2.print("demo2");
    }

/*****
AbsClass print: demo1
AbsClass print: demo2
absClass2 print: demo2
******/

类的初始化顺序依次是(静态变量、静态代码块)>(变量、代码块)>构造方法

一个Java文件有3个类,编译后有几个class文件

编译后有3个class文件。 有几个类就有几个class文件。

重载(Overload)

要重载一个方法,除了要与原方法具有相同的简单名称之外,还要求必须拥有一个与原方法不同的特征签名。特征签名就是一个方法中各个参数在常量池中的字段符号引用的集合,也就是因为返回值不会包含在特征签名中,因此Java语言里面是无法仅仅依靠返回值的不同来对一个已有方法进行重载的。

Java代码的方法特征签名只包括了方法名称、参数顺序及参数类型;而字节码的特征签名还包括方法返回值以及受查异常表。