day10
static 关键字
static叫静态,只能修饰成员变量、成员方法,不能修饰类,也不能修饰局部的东西
static修饰成员变量
static修饰成员变量的特点:
- 被类的所有对象共享
- 可以通过类名调用,也可以通过对象名调用,推荐使用类名调用
注意:static成员变量执行时自动在堆里开辟空间存储static成员变量(无需创建对象就在堆里有空间)
类变量(静态变量):属于类,与类一起加载到内存,只加载一次在内存中只有一份,可以被类和类的所有对象共享
实例变量(对象变量):属于对象,每个对象中都有一份,只能用对象访问
如果某个数据只需要一份,其他所有对象都需要用到
,就可以使用类变量
注意:
在本类中调用类变量,类名可以省略不写,其他类中必须写类名
类变量一般都是使用public修饰
static修饰成员方法
类方法(静态方法)
用法:
类名.类方法
对象名.类方法
类方法最常见的应用场景是做工具类
工具类:工具类里面只有类方法没有成员变量,供开发人员调用方便,提高代码复用性,提高开发效率
私有化构造器(将构造方法设为private)可以禁止其他人创建对象,直接使用工具类名调用方法
static的注意事项
-
类方法中可以直接访问类成员,不可以直接访问实例成员(因为调用类方法时候,可能并没有创建类的对象)
-
实例方法中既可以直接访问类成员,也可以直接访问实例成员
-
实例方法中可以出现this关键字,类方法中不可以出现this关键字
类方法如何访问实例成员?new 一个对象
静态代码块
格式:
static{
语句
}
特点:
类加载时候自动执行,由于类只会加载一次,所以静态代码也只会执行一次
作用:
完成类的初始化,例如:对类变量的初始化赋值
复杂类变量使用赋值时候可以用static代码块
注:idea 快捷键
ctrl+shift+R:搜索
实例代码块
格式:
{}
特点:每次创建对象时,执行实例代码块,并在构造器之前执行
作用:类中有多个构造方法,并且多个构造方法中有共性的代码时,可以使用实例代码块
static应用:单例设计模式
- 设计模式可以帮我们解决开发中遇到的问题
- 具体问题的最优解决方案
单例设计模式
解决问题:确保一个类只有一个对象
饿汉式单例模式
- 加载类时,就创建对象
写法:
- 类的构造器私有化
- 定义一个类变量记住本类的一个对象
- 定义一个类方法,返回对象
public class A{
private A(){//类的构造器私有化
}
private static A a = new A();//定义一个类变量记住本类的一个对象(A是类变量(即静态变量),只会执行一次)
public static A getA(){//定义一个类方法,返回对象
return a;
}
}
懒汉式单例模式
- 拿对象时,才开始创建(延迟加载对象)
写法
- 把类的构造器私有
- 定义一个私有类变量用于存储对象
- 提供一个类方法保证返回的是同一个对象
public class B{
private B{
}
private static B b;
public static B getB(){
if(b==null){
b = new B();
}
return b;
}
}
使用频繁选择饿汉式
偶尔使用选择懒汉式
单例模式的应用场景
- 任务管理器对象(ctrl+x可打开)
继承
使用extends关键字,让一个类和另一个类建立起父子关系
Java是单继承的,Java的类中不支持多继承,但是支持多层继承。
特点
子类可以直接使用父类的非私有成员
好处
减少重复代码的编写
子类对象实际上是由子父类共同创建出来的
权限修饰符
四个权限修饰符
- private:只能本类
- default(缺省):本类、同一个包的类
- protected:本类,同一个包中的类、子孙类中
- public:任意位置
private < default < protected < public
方法重写
子类觉得父类中的某个方法不好用时,可以重写一个方法覆盖父类的方法。
重写后,方法的访问遵循就近原则。
就近原则:先子类局部范围找,再子类成员变量找,然后父类成员范围找,如果父类范围还没找到则报错
方法重写的注意事项
- 使用override注解,他可以指定Java编译器,检查我们方法重写的格式是否正确,提高代码可读性
- 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public>protected>default)
- 重写的方法返回值类型,必须与被重写的方法返回值类型一样,或者范围更小(不是数值范围,子类重写方法返回值只能是父类方法返回值的子类或者本身)
- 私有方法、静态方法不能被重写,如果重写会报错
方法重写实例
重写toString()方法
如果打印的是一个引用类型对象,println()方法底层会自动调用toString(),并且答应该方法的返回值
标签:父类,变量,对象,方法,day10,static,重写,javaSEPro From: https://www.cnblogs.com/xkh-blogs/p/17230944.html