面向对象-day02

209 阅读4分钟
  • ###代码块

    **局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)

    代码块的格式:要使用{}括起来

常见代码块的应用

  • a:局部代码块

    • 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
  • b:构造代码块 (初始化块)

    • 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
  • c:静态代码块

    • 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。

    • 一般用于加载驱动

      /*
      代码块的例题
      */
      class Test {
          public static void main(String[] args) {
              {
                  System.out.println("main中局部代码块");
              }
              Code c=new Code();
              c.testOne();
              c.testTwo("zhangsan",10);
          }
      }
      
      class Code {
          private String name;
          private int age;
          public void testOne(){
              System.out.println("无参函数");
              {
                  System.out.println("testOne中局部代码块");
              }
          }
          
          public void testTwo(String name,int age) {
              this.name=name;
              this.age=age;
              System.out.println("有参函数");
              {
                  System.out.println("testTwo中局部代码块");
              }
          }
          {
              System.out.println("构造代码块");
          }
         static {
              System.out.println("静态代码块");
          }
      }
      
      

      main中局部代码块

      静态代码块

      构造代码块

      无参函数

      testOne中局部代码块

      testTwo中局部代码块

      有参函数

      ###编译结果:

      testTwo中局部代码块wanghui@wanghui-Inspiron-3543:~/练习javac Test.java
wanghui@wanghui-Inspiron-3543:~/练习 java Test main中局部代码块 静态代码块 构造代码块 无参函数 testOne中局部代码块 有参函数 testTwo中局部代码块

      从该题中知道了静态代码块的优先级要大于构造代码块,且静态代码块只运行一次

      ###继承extends

      爷爷...爸爸...儿子的关系

      #面向对象(Java中类的继承特点)
      • A:Java中类的继承特点
        • a:Java只支持单继承,不支持多继承。(一个儿子不能有两个以上的个爹)
          • 有些语言是支持多继承,格式:extends 类1,类2,...
        • b:Java支持多层继承(继承体系)
      • B:案例演示
        • Java中类的继承特点
          • 如果想用这个体系的所有功能用最底层的类创建对象
          • 如果想看这个体系的共性功能,看最顶层的类

      ###08.06_面向对象(继承的注意事项和什么时候使用继承)(掌握)

      A:继承的注意事项

      a:子类只能继承父类所有非私有的成员(成员方法和成员变量)

      b:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

      c:不要为了部分功能而去继承

      this与super的区别

      this:代表当前对象的引用,谁来调用我,我就代表谁

      super:代表当前对象父类的引用

      /*
      创建一个extends的例题,让子继承父
      */
      
      class Demo_Extends {
          public static void main(String[] args){
              Son s=new Son();
              s.speak("zhangsan",10);  
          }
      
      }
      
      class Father {
          private String name;      //私有成员变量
          private int age;          //私有成员变量
          public void speak(String name,int age) {  //有参函数
              this.name=name;
              this.age=age;
              System.out.println("name:"+name+"   age:"+age+"   xixi");
              {
                  System.out.println("这是一个father构造代码块");   
              }
          }
      }
      
      class Son extends Father {    //子继承父
          {
              System.out.println("这是一个son构造代码块");
          }
          static{
              System.out.println("这是一个静态代码块");
          }
      }
      

      这是一个son构造代码块

      这是一个father构造代码块

      name:zhangsan age:10 xixi

      ###编译结果:

      wanghui@wanghui-Inspiron-3543:~/练习javac Demo_Extends.java
wanghui@wanghui-Inspiron-3543:~/练习 java Demo_Extends 这是一个静态代码块 这是一个son构造代码块 name:zhangsan age:10 xixi 这是一个father构造代码块

      此处顺序没搞太明白

面向对象(方法重写概述及其应用)

A:什么是方法重写

重写:子父类出现了一模一样的方法(注意:返回值类型可以是子父类,这个我们学完面向对象讲)

B:方法重写的应用:

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。

/*
 电脑有显示功能,有qq聊天功能,如今想加一个微信聊天功能,使用重写实现
*/
class Computer {
    public static void main(String[] args) {
        NowFunction now=new NowFunction();
        now.show();    
        now.chat();
    }
}

class Function {
    public void show() {                     //显示的方法
        System.out.println("我能显示");       
    }
    public void chat() {                     //聊天的方法
        System.out.println("我能用qq聊天");
    }
}

class NowFunction extends Function {       //继承并重写方法chat
     public void chat() {
        super.chat();
        System.out.println("我能用微信聊天");
     }
}

预测显示结果:

我能显示

我能用qq聊天

我能用微信聊天

###编译结果:

wanghui@wanghui-Inspiron-3543:~/练习javac Computer.java
wanghui@wanghui-Inspiron-3543:~/练习 java Computer 我能显示 我能用qq聊天 我能用微信聊天

面向对象(final关键字修饰类,方法以及变量的特点)(掌握)

A:final概述

B:final修饰特点

  • 修饰类,类不能被继承
  • 修饰变量,变量就变成了常量,只能被赋值一次
  • 修饰方法,方法不能被重写

面向对象(final关键字修饰局部变量)

A:案例演示

方法内部或者方法声明上都演示一下(了解)

基本类型,是值不能被改变

引用类型,是地址值不能被改变,对象中的属性可以改变