d9(91-103)-勇敢开始Java,咖啡拯救人生

目录

static

成员变量

应用场景

成员方法

应用场景

注意事项

代码块[好像不是很重要哦]

设计模式

单例设计模式

饿汉式单例:拿对象时,对象早创建好了

懒汉式单例:拿对象时,才开始创建对象

继承[面向对象的三大特征:封装、继承、多态]

好处

注意事项

1、权限修饰符

2、单继承、object类

3、方法重写

4、子类中访问其他成员的特点

5、子类构造器的特点

补充:this(......)调用兄弟构造器


static

静态,可以修饰成员变量、成员方法

成员变量

类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享

实例变量(对象的变量):无static修饰,属于每个对象的

static String name; // 类变量

int age; // 实例变量

类变量可以通过 类名.类变量(推荐)   和     对象.类变量(不推荐)   访问

实例对象只能用对象访问,因为每个实例变量属于对应的对象。

应用场景

如果某个数据只需一份,且希望能够被共享,则该数据可以定义成类变量

类变量一般用public修饰

成员方法

类方法:有static修饰的成员方法,属于类,用类名.类方法或对象.类方法调用

实例方法:无static修饰的成员方法,属于对象,用对象.实例方法调用

main方法是个类方法

应用场景

工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类给开发人员共同使用

用类方法来设计工具类提高了代码复用;调用方便,提高了开发效率。

util

为什么工具类不用实例方法呢,因为实例方法需要创建对象来调用,对象占内存,造成浪费;类方法可以直接用类名调用,方便且省内存。

建议将工具类的构造器private,工具类没必要创建对象

注意事项

类方法中可以直接访问类的成员,不可以直接访问实例成员

实例方法中既可以直接直接访问类成员,也可以直接访问实例成员

实例方法中可以出现this关键字,类方法中不可以

代码块[好像不是很重要哦]

静态代码块

static{}

类加载时自动执行,由于类只加载一次,所以静态代码块也只会执行一次

作用:完成对类的初始化,例如对类变量的初始化

实例代码块

{}

每次创建对象时,执行实例代码块,并在构造器前执行

作用:和构造器一样,都是用来完成对象的初始化,例如对实例变量进行初始化赋值

设计模式

具体问题的最优解法

考虑:某设计模式解决什么问题?怎么写?

单例设计模式

确保一个类只有一个对象

饿汉式单例:拿对象时,对象早创建好了

写法:把类的构造器私有

           定义一个类变量记住类的一个对象

           定义一个类方法,返回对象

不能用这个类创建对象,只能用类名调用类方法得到对象,且返回的永远是同一对象

package cn.ptz.singlelnstance;

public class A {
    // 定义一个类变量基础类的一个对象
    private static A a = new A();

    // 私有类的构造器
    private A(){

    }

    // 定义一个类方法,返回类的对象
    public static A getObject(){
        return a;
    }
}

应用场景

比如任务管理器对象、获取运行时对象

避免浪费内存

懒汉式单例:拿对象时,才开始创建对象

写法:把类的构造器私有

           定义一个类变量用于存储对象

           提供一个类方法,保证返回的是同一个对象

package cn.ptz.singlelnstance;
// 懒汉式单例
public class B {
    // 定义一个类变量,用于存储这个类的一个对象
    private static B b;

    // 类的构造器私有
    private B(){

    }

    // 定义一个类方法,这个方法保证第一次调用时才创建一个对象,后面调用时都会用这个对象
    public static B getInstance(){
        if (b == null){
            b = new B();
        }
        return b;
    }
}

根据单例对象常不常用选择饿汉or懒汉

继承[面向对象的三大特征:封装、继承、多态]

关键字extends,可以让一个类和另一个类建立起父子关系

public class B extends A{
}

A类称为父类(基类或超类),B类称为子类(派生类)

特点:子类继承父类的非私有成员(成员变量、成员方法)

继承后对象的创建:子类的对象是由子类和父类共同完成的。

所以该对象可以访问子类和父类暴露的成员

我去,可以跨包继承,先导入包,再继承,很厉害哦

好处

减少重复代码的编写

注意事项
1、权限修饰符

public private protected 缺省

protected给子类,但不给其他类中,创建的子类对象访问

2、单继承、object类

Java是单继承的,其中的类不支持多继承,但是支持多层继承

object类是Java所有类的祖宗类,任何一个类都是object的子类或子孙类

3、方法重写

子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法

重写后,方法的访问,Java会遵循就近原则

技巧:使用@Override 注解,可以校验重写是否正确,可读性好

           子类重新父类方法时,访问权限必须大于等于父类被重写的方法的权限(public > protected > 缺省)

           重写的方法返回值类型,必须与被重写的返回值类型一样,或者范围更小

           私有方法、静态方法不能被重写,重写会报错

s

应用:对toString()的重写,重写为输出对象内容,而不是输出对象地址

4、子类中访问其他成员的特点

成员变量 就近原则

成员方法 就近原则

综上,子类中访问其他成员,先子类局部范围找,然后子类成员范围找,然后父类成员范围找,再没找到则报错

出现重名成员,而一定要使用父类,可以通过super关键字,指定访问父类成员

super.父类成员变量/父类成员方法

5、子类构造器的特点

子类的全部构造器,都会先调用父类的构造器,再执行自己

比如调用子类有/无参构造器时,会先调用父类的无参构造器,再调用自己

默认情况下,子类全部构造器的第一行代码都是super(),调用父类的无参构造器

如果使父类没有无参构造器,则需在子类构造器用super(......),指定去调用父类的有参构造器

应用:

补充:this(......)调用兄弟构造器

复用兄弟构造器的代码

注意:在一个构造器里不能同时用super(...)this(...)调用其他构造器,他们都必须放在构造器的第一行

  • 32
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值