Java必须了解的知识

简述static和final的用法

  1. static:修饰属性,方法,代码块
    (1)静态属性:也可以叫类变量 类名.属性名 来访问
    注意点:类变量在类加载时被创建并进行初始化的,类加载的过程是进行一次,也就是说类变量被创建只会被创建一次。
    (2)静态方法:类名.方法名 直接访问
    注意点:static修饰的方法,不能直接访问本类中的非静态成员(包括方法和属性)本类的非静态方法可以访问本类的静态成员(包括方法和属性),可以调用静态方法。
  2. final:修饰变量,类,方法
    (1)修饰变量
    被final修饰的成员变量就是常量,一旦赋值就不能改变
    修饰局部变量:修饰基本数据类型 -> 变量的值不能改变
    修饰引用 -> 引用只能指向固定的对象
    修饰实例变量:默认值不生效,可以再赋值
    (2)修饰方法:不能被子类覆盖
    (3)修饰类不能被继承

      在一个final类中的所有的方法,默认都是final的
      注意点:final不能用来修饰构造方法。

抽象类和接口的区别

  1. 相同点
    A.都是抽象类,都不能实例化。
    B.interface实现类及abstract class的子类都必须要实现已声明的抽象方法
  2. 不同点
    A.interface要用implement实现,abstract class要用extends继承。
    B.一个类可以实现多个interface,但一个类只能继承一个abstract class。
    C. interface 强调特定功能的实现,而 abstract class 强调所属关系。
    D. 尽管 interface 实现类及 abstrct class 的子类都必须要实现相应的抽象方法,但实现的形式不同。interface 中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而 abstract class 的子类可以有选择地实现。

.sleep()和 wait()有什么区别

  • Thread 类的方法:sleep(),yield()等
  • Object 的方法:wait()和 notify()等
  • 每个对象都有一个锁来控制同步访问。Synchronized 关键字可以和对象的锁交互,来实现线程的同步。
  • sleep 方法没有释放锁,
  • wait 方法释放了锁,使得其他线程可以使用同步控制块或者方法。
  • wait,notify 和 notifyAll 只能在同步控制方法或者同步控制块里面使用,而 sleep 可以在任何地方使用
  • sleep 必须捕获异常,而 wait,notify 和 notifyAll 不需要捕获异常

有了基本数据类型,为什么还需要包装类型

  • 我们知道 Java 是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型 Collection 时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
  • 另外,当需要往 ArrayList,HashMap 中放东西时,像 int,double 这种基本类型是放不进去的,因为容器都是装 object 的,这是就需要这些基本类型的包装器类了。

"=="和 equals 方法究竟有什么区别

==操作符比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】,也就是用于比较变量所对应的堆内存中所存储的数值是否相同。

equal用于比较两个对象的值是否相同【不是比地址】

【特别注意】 Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”。对于基础数据类型来说,没有重写equals方法,故两者是一样。

有时间再加入

你可能感兴趣的:(java)