java基础五

继承

1. 继承含义

在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance).

2. 继承的优点

A.代码的可重用性

B.子类可以扩展父类的属性和方法

C.父类的属性和方法可用于子类

D.设计应用程序变得更加简单

3.类与类的关系: 

   a. has—a(组合关系)

       b. is—a(继承关系)

4. Java中继承的实现(关键字:extends)

  关键字extends出现在类声明时的类名后,extends后面跟着的是要继承的类的名称。

例如:public class Student(子类) extends Students(父类){}

5. 继承具有单根性和传递性

6. 所有类的根类Object(基类,超类)

public class Students extends Object{

}

7. 方法重写(方法重写出现在子类中,子类重写父类的方法,构造方法不能被继承)

A.方法重写含义:子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为。

B.子类重写父类需遵循的规则:

a. 子类的方法的方法名,返回值类型,参数列表都必须与父类中的相同。

b. 子类的访问修饰符必须不小于父类中的访问修饰符。(子类中的访问修饰不能比父类中的更严格)

c. 子类中重写的异常不能抛出比父类更多的异常。

8. super关键字

A.子类用关键字super来调用父类中重写的方法(super指代的是父类对象)

B.使用super调用父类的构造器,如果构造器没有使用super关键字,那么编译器会自动添加一个无参的super()来调用父类构造器

9. final关键字

a.final变量不能被改变

b.final类不能被继承

c.final方法不能再被重写

10. 封装

A.含义:封装是使类中的成员变量都是private,并提供public方法访问这些成员变量的技术。

B.封装使用getter,setter

C.封装优点:

   a.类的成员变量可以成为只读或只写

   b.类可以对存储在其它成员变量中的内容有一个整体的控制

   c.类的用户不需要知道类是如何存储数据的

内部类

内部类的特点

  1. 独立的class文件
  2. 同样需要编译
  3. 同样可以产生对象

静态内部类

定义方法: class Outer{

     static class Inner{

    //静态内部类不能访问到外部的成员,除非外部成员也是静态成员

}

}

静态内部类创建对象:a.用外部类. b.导入内部类所在的包 c.用全限定名

成员内部类

定义方法:class Outer{

     class Inner{

   //成员内部类可以访问到外部的成员

}

}

成员内部类创建对象:Outer outer = new Outer();

                 Outer.Inner inner = outer.new Inner();

局部内部类:只能在方法内部中使用

定义方法:class Outer{

         Void fd(){

           class Inner{

    //局部内部类

}

}

new Inner().fd();

}

匿名内部类:没有名字

形式定义:new 类或接口的名字(){

       //匿名内部类的主体

}

包装类

针对于原生数据类型的包装。所有的包装类(8 个)都位于java.lang 包下。

Java 中的 8 个包装类分别是:Byte,Short, Integer, Long, Float, Double,Character, Boolean。

他们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。

多线程

当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。

  主要以下几个优点

  • 线程之间很容易实现共享内存
  • 创建线程代价较小
  • Java语言内置多线程功能支持
创建线程

通过以下两种方法创建 Thread 对象:
声明一个 Thread 类的子类,并覆盖 run() 方法。 class mythread extends Thread {
           public void run( ) {/* 覆盖该方法*/ }
      }
声明一个实现 Runnable 接口的类,并实现 run() 方法。 
    class mythread implements Runnable{
           public void run( ) {/* 实现该方法*/ }
     }
线程的通信
Java为了避免轮询检测,通过wait()、notify()和notifyAll()方法实现进程内通信的机制。
wait():告诉调用线程放弃监控器进入等待模式直到其他线程进入同一监控器并调用notify()方法。
notify():唤醒在此同步器上等待的单个线程
notifyAll():唤醒在此同步器上等待的所有线程
 
线程池
线程池在系统启动时就创建大量空闲的线程,程序将一个Runnable对象传给线程池,线程池就会启动一个线程来执行该对象的run方法,当run方法执行结束后该线程不会死亡,而是再次返回线程池中称为空闲状态的,等待执行下一个Runnable对象的run方法。
使用线程池来执行线程任务的步骤如下:
  • 调用Executors类的静态工厂方法创建一个ExecutorService对象,该对象代表一个线程池。
  • 创建Runnable实现类或Callable实现类的实例,作为线程执行任务。
  • 调用ExecutorService对象的submit方法提交Runnable实例或Callable实例。
  • 当不想提交任何任务时调用ExecutorService对象的shutdown方法来关闭线程池。
原文地址:https://www.cnblogs.com/hl201211/p/4473910.html