Java学习-09 面向对象

Static
静态,可以修饰成员变量、成员方法
成员变量按照有误static修饰,分为两种:
类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
实例变量(对象的变量):无static修饰,属于每个对象的。

类方法:有Static修饰的方法,属于类,可以直接使用类名.方法名的方式访问,可共享,使用方便
实例方法:无static修饰,属于每个对象,使用前要先new一个实例

一般类方法用于工具类的开发
好处:
实例方法创建对象才能调用方法,对象占用内存,造成内存浪费
类方法直接调用即可,调用方便,提高开发效率,也节省内存
例如:

public class MyUtil {
     // 工具类私有化 不对外开放 这样方式其他人创建对象 浪费内存
    private MyUtil() {}
    public static String AuthCode(int n){
        String code = "";
        String codes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random r = new Random();

        for (int i = 0; i < n; i++) {
            code += codes.charAt(r.nextInt(62));
        }
        return code;
    }
}
public class LoginDemo {
    public static void main(String[] args) {
        System.out.println(MyUtil.AuthCode(4));
    }
}
public class RegisterDemo {
    public static void main(String[] args) {
        System.out.println(MyUtil.AuthCode(6));
    }
}

1、类方法中可以直接访问类的成员,不可以直接访问实例成员。
2、实例方法中既可以直接访问类成员,也可以直接访问实例成员
3、实例方法中可以出现this关键字,类方法中不可以出现this关键字的

代码块概述
代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)
代码块分为两种
静态代码块:
格式:static{}
特点:类加载是自动执行,由于类只会加载一次,所以静态代码块也只会执行一次
租用:完成类的初始化,例如:对类变量的初始化赋值
实例代码块:
格式: {}
特点: 每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象初始化的,例如:对实例变量进行初始化赋值

什么是设计模式
一个问题通常有n种解法,其中肯定有最优解法,这个最优解法被人总结出来,称之为模式
设计模式有20多种,对应20多种软件开发中会遇到的问题
学习设计模式 主要学
解决什么问题
怎么写

单例设计模式
确保一个类只有一个对象
写法
把类的构造器私有
定义一个类变量记住类的一个对象
定义一个类方法,返回对象

饿汉式单例
在获取类的对象时,对象已经创建好了

public class A {
    // 饿汉式单例
    // 创建一个对象
    private static A a = new A();
    // 私有构造器
    private A(){}

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

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

public class B{
	// 定义一个类变量用于存储对象
	private static B b;
	// 把类的构造私有化
	private B(){}
	// 提供一个类方法,保证返回的对象是同一个类
	public static getInstance(){
		if(b==null){
			b = new B();
		}
		return b;
	}
}

枚举类单例

public enum A {
	x;
}

继承
继承就是用extends关键字,让一个类和另一个类建立起一种父子关系
子类可以继承父类非私有成员

带继承关系的类,Java会用类和其父类,这多张设计图来一起创建类的对象
对象直接访问什么成员,是由子父类这多张设计图共同决定的,设多张设计图对外暴漏什么成员,对像就可以访问什么成员

Java的权限修饰符 public、 private、 protected、 缺省

修饰符 在本类中 同一个包下的其他类里 任意包下的子类里 任意包下的任意类里
priavte √
缺省 √ √
protected √ √ √
public √ √ √ √

Java是单继承的,Java中的类不支持多继承,但是支持多层继承
Java所有类都是Object的子类或子孙类,可以调用Object的方法

方法重新
当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。
注意:重写后,方法的访问,Java会遵循就近原则。
方法重新时建议添加@Override注解,可以校验重写是否正确,同时可读性好
方法重写注意事项 声明不变 内容重写

应用场景
当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法重写

在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则
先找子类局部范围
再找子类成员范围
然后再找父类成员范围,如果都没有就报错

如果子类中,出现了重名的成员,会优先使用子类的,如果此时一定要在子类中使用父类
可以通过super关键字,指定访问父类成员:super.父类成员变量/父类成员方法

子类构造器的特点:
子类的全部构造器都会先调用父类的构造器,在执行自己的

子类构造器是如何实现调用父类构造器的:
默认情况下,子类全部构造器的第一行代码都是super() (写不写都有), 它会调用父类的无参数构造器
如果父类没有无参数构造器,则我们呢必须在子类构造器的第一行手写super(…),指定去调用父类的有参构造器

this(…)调用兄弟构造器
任意类的构造器中,是可以通过this(…)去调用该类的其他构造器的

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值