Java自学小白——面向对象进阶课程学习1


这是我的第一篇随笔(是文章吗?)主要是为了复习一节课程中学习的知识,可以说是知识总结,手写的笔记局限太多,现在选择使用博客来记录每天的学习成果。

今天是学习Java的第22天(但是写的是前几天的学习成果),因为还要上课进度就没有很快,每天想着能学多少学多少,希望可以尽快学完。

面向对象进阶课程——static静态变量、继承

一、static关键字

  • static是静态的意思,可以修饰成员变量和方法

1.Static修饰成员变量

  • static修饰成员变量表示该成员变量在内存中只存储一份,可以被共享访问、修改。 
    • 示例:
    •  1 public class User {
       2     public static int onlineNumber = 161;
       3 
       4     public static void main(String[] args) {
       5         System.out.println(User.onlineNumber);
       6         User u = new User();
       7         u.onlineNumber++;
       8         System.out.println(u.onlineNumber);
       9         System.out.println(User.onlineNumber);
      10 
      11     }
      12 }

      这便是static修饰成员变量的一种形式。

(有没有大佬指导下代码插入啊?是不是只能是这样的样式,看代码的话需要花费一点时间。)

  •    成员变量可以分为两类:
    •   静态成员变量(有static修饰,是属于类下的,内存中只加载一次
      • 访问格式:类名.静态变量成员      例:
      • 还有第二种访问格式:对象.静态成员变量(不推荐)
    •   实例成员变量(无static修饰,存在于每个对象中)

      • 访问格式:对象.实例成员变量

    •   两种成员变量在什么情况下定义?
      • 静态成员变量:表示在线人数等需要被共享的信息。
      • 实例成员变量:属于每个对象,且每个对象信息不同时
  •   static修饰成员变量的内存原理
    • 创建的对象访问Static修饰的成员变量都是内存中的同一个地址 

2.static修饰成员方法的基本用法

  •  成员方法的分类
    •   静态成员方法(有static修饰,属于类下)
      •   访问格式:类.静态成员方法
    •   实例成员方法(无static修饰,属于对象下)
      •   访问格式:对象.实例成员方法
      • 注:如果是以执行一个通用功能为目的,或需要方便访问,可以申明成静态方法
  • 案例练习:
    • 员工类代码如下(还没有写注释的习惯,这个要改)
    •  主函数如下:

  • 修饰成员方法的内存原理

3.static的实际应用案例

  • 工具类 :工具类中定义一些静态方法,每个方法都是以完成一个共用的功能为目的。
    • 注意:1.建议工具类的构造器私有化处理 2.工具类不需要创建对象(直接用类名访问即可)
    • 使用场景:
    • 好处:1.内部都是静态方法,每个方法完成一个功能(调用方便) 2.一次编写,处处可用(提高代码复用性)

    • 案例:
    • 代码:

       1 public class ArrayUtils {
       2 
       3     private ArrayUtils() {
       4 
       5     }
       6 
       7     public static String toString(int[] arr){
       8         String pri = "[";
       9         int j = 0;
      10         for (int i = 0; i < arr.length; i++) {
      11             j = arr[i];
      12             if(i == arr.length-1){
      13                 pri += j ;
      14             }else{
      15                 pri += j + "," ;
      16             }
      17         }
      18         pri += "]";
      19         return pri ;
      20     }
      21     
      22     public static double getAverage(double[]arr1){
      23         double max =arr1[0];
      24         double min =arr1[0];
      25         double j = 0.0;
      26         double sum = arr1[0];
      27         for (int i = 1; i < arr1.length; i++) {
      28             sum += arr1[i];
      29             j = arr1[i];
      30             if(max > j){
      31                 max = j ;
      32             }
      33             if (min < j){
      34                 min =j;
      35             }
      36         }
      37       sum = (sum -max -min)/ (arr1.length-2);
      38         return sum ;
      39     }
      40 
      41 
      42 }
    • 主函数:(经典不写注释)

4.static访问的注意事项

  • 静态方法只能访问静态的成员,不可以直接访问实例成员
  • 实例方法可以访问静态的成员,也可以访问实例成员
  • 静态方法中是不可以出现this关键字的

二、static应用知识

1.代码块

  • 代码块是类的五大成分之一(成员变量、构造器、方法、代码块、内部类),定义在类中方法外
  • 在Java类下,使用 {} 括起来的代码被称为代码块  
  • 案例:

  • 实例代码:
  •  

  •  静态代码块的作用

    • 在启动系统时对数据进行初始化,代码优雅

2.单例设计模式

  • 单例模式

    • 可以保证系统中,应用该模式的这个类永远都只有一个实例,即一个类永远只能创建一个对象(例如任务管理器)

  • 饿汉单例设计模式
    • 在获取对象前,对象已经为你提前创建好了。
    • 设计步骤:
      • 定义一个类,把构造器私有
      • 定义一个静态变量存储一个对象
  • 懒汉设计模式
    • 在真正需要一个对象的时候,才去创建一个对象(延迟加载对象)。
    • 设计步骤 :
      • 定义一个类,把构造器私有。
      • 定义一个静态变量存储一个对象。
      • 提供一个返回单例对象的方法

二、继承 

  • 什么是继承
    • Java中提供一个关键字extends使一个类和另一个类建立起父子关系
    • 继承的格式
      • 子类 extends 父类  例:public class Student extends People {}
    • Student 称为子类(派生类),People 称为父类(基类或超类)。
  • 使用继承的好处
    • 子类继承父类后,就可以直接使用父类的公共的属性和方法了。
  • 继承后子类的特点
    • 子类继承父类,子类可以得到父类的属性和行为,子类可以使用
    • Java中子类更加强大
  • 继承设计规范
    • 子类们相同特征(共性属性,共性方法)放在父类中定义,子类独有的属性和行为应定义在子类自己里面。
    •     案例
    •   
    •   父类:

    • 学生子类:

    • 教师子类:

    • main方法:

    • 运行结果:

  • 运行内存原理:

    •   对象是子类的对象,子类的对象中会开辟父类空间和子类空间。父类的成员会在父类空间保存。子类的成员会在子类空间保存,但用的都是同一个子类对象的地址
  • 继承的特点
    • 子类可以继承父类的属性和行为,但是子类不能继承父类构造器
    • 子类可以继承父类的私有成员,但是不能直接访问(有争议)
    • 子类可以直接用子类名访问父类私有静态成员,但这并不是继承,只是共享地去访问父类静态成员
    • Java是单继承模式,一个类只能继承一个父类
    • Java不支持多继承,但是支持多层继承
    • Java中所有的类都是Object类的子类
  • 继承后子类方法中访问成员(成员变量、成员方法)的特点:
  • 如果子父类中出现了重名的成员,会优先使用子类的,此时如果一定要在子类中使用父类,应:
  • 方法重写
    • 在继承体系中,如果子类出现和父类一模一样的方法声明,则称子类的方法是重写的方法。
  • @Override重写注解
  • 方法重写的注意事项和要求
  • 子类继承父类后构造器的特点:
    • 子类中所有的构造器默认都会先访问父类的无参构造器,在执行自己的构造器
    • 子类的构造器第一行默认是:super();不写也会存在。

  • 子类构造器访问父类有参构造器
    • 通过super(.......);手动调用父类有参构造器。
      • 作用:通过调用父类有参数构造器来初始化继承父类的数据。
  • this与super的使用总结
    • this和super的使用注意点: