static和final关键字 学习 demo练习

单利模式:

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

具体可查看菜鸟

static

Static修饰符用来创建类方法和类变量。

1、Static关键字的特点:

(1)Static是一个修饰符,用于修饰成员。

(2)Static修饰的成员被所有的对象所共享。

(3)Static优先于对象存在,因为static的成员随着类的加载就已经存在了。

(4)Static修饰的成员多了一种调用方式,就可以直接被类名所调用。类名,静态成员。

(5)Static修饰的数据是共享数据,对象中的存储的是特有数据。
 

final

1.关键字final表示最终的,不可变的。

2.关键字final可以修饰变量、方法,还有类

3.final修饰的类无法被继承

4.final修饰的方法无法被覆盖,无法被重写

5.final控制不了能不能调用的问题,表示的是最后的,不能变的,不能改的。

6.final修饰的变量只能赋一次值

7.final修饰的引用:

该引用只能指向1个对象,并且它只能永远指向该对象,并且无法指向其他对象。

并且在该方法执行过程中,该引用指向对象之后,该对象不会被垃圾回收期回收

直到当前方法结束,才会释放空间。

8.虽然final的引用指向对象A后,不能再重新指向对象B,

但是对象A内部的数据可以被修改。

9.final修饰的实例变量,只能赋值一次。结论:因为实例变量没有手动赋值,系统会赋默认值。

因而要求final修饰的实例变量必须手动赋值。这个手动赋值,在变量后面赋值可以,在构造器

中赋值也可以。(显示赋值、构造器赋值、代码块赋值)

10.final修饰的实例变量一般添加 static修饰

终极结论:static final联合修饰的变量称为“常量”,常量名建议大写,每个单词间用下划线衔接。

常量和静态变量一样,区别在于:常量的值不能变。相同点在于:都是储存在方法区,并且都是

在类的加载时初始化。常量一般都是公共的,public修饰。
 

重写父类方法

描述

父类Base中定义了若干get方法,以及一个sum方法,sum方法是对一组数字的求和。请在子类 Sub 中重写 getX() 方法,使得 sum 方法返回结果为 x*10+y

输入描述:

整数

输出描述:

整数的和

具体做法:

Sub是Base的子类,因此继承了父类的成员变量和成员方法,成员方法中,getY()和sum()因为加了final关键字,无法被修改,子类中是直接使用,而getX()函数可以在子类中出些,我们重写为获取x的值扩大10倍。

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            Sub sub = new Sub(x, y);
            System.out.println(sub.sum());
        }
    }

}

class Base {

    private int x;
    private int y;

    public Base(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public final int getY() {
        return y;
    }

    public final int sum() {
        return getX() + getY();
    }

}

class Sub extends Base {

    public Sub(int x, int y) {
        super(x, y);
    }

 //先赋值到sub的
    @Override
    public int getX() {
        return super.getX() * 10;
    }

创建单例对象

猜你喜欢

转载自blog.csdn.net/qq_42055933/article/details/125997141