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修饰成员变量的内存原理
-
创建的对象访问Static修饰的成员变量都是内存中的同一个地址
-
2.static修饰成员方法的基本用法
- 成员方法的分类
- 静态成员方法(有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(.......);手动调用父类有参构造器。
- 作用:通过调用父类有参数构造器来初始化继承父类的数据。
- 通过super(.......);手动调用父类有参构造器。
- this与super的使用总结
- this和super的使用注意点: