继承二
1、static关键字
使用场景:
- 当某些场景下不需要创建多个“内容”,每个类的实例对象共享一个“内容”时就可以使用static关键字来修饰
含义:
- static表示静态内容,使用static修饰的内容就可以和类相关联,类存在,static修饰的内容就存在,随着类的加载而加载。
修饰范围:
- 属性、方法,代码块、内部类
访问方式:
- 类名.属性名 / 类名.方法名
- 实例名.属性名 / 实例名.方法名
实例代码:()
static final String SEX_MALE = "Q仔";
static final String SEX_FEMALE = "Q妹";
静态属性:使用static修饰的属性
- 它是随着类的加载而创建,类存在,属性就存在。所以不同于实例对象的生命周期。而类的加载时先与对象的加载的,因为每个对象都是由类创建的,所以类属性(static修饰的)被所有的实例对象共享。如果其中一个实例对象修改了类属性的值,则其他对象可以看到修改后的值。
实例属性:
- 没有被static修饰的属性,称为实例属性,它随着实例对象的创建而存在,每个对象有独立的空间,则每个属性就有独立的空间,互不干扰。
静态方法:
- 使用static修饰的方法
- 随着类的加载而加载,可通过“类名.静态方法名”或“实例对象.静态方法名”方式调用
- 静态方法只能调用静态属性/方法
- 非静态方法,即可以调用静态属性/方法,也可以调用非静态属性方法
class Person {
private int i = 0;
public static void main(String[] args){
System.out.print(++i);
}
}
思考题:
static修饰的方法是否可以使用this和super关键字?
开发中如何确定一个属性和方法声明为静态的?
- 类中的常量也通常声明为静态(static)
- 工具类中的方法,通常声明为静态的。 比如:Math、Arrays、Collections
2、单例设计模式
定义:
采用一定的方法保证在整个软件系统中,对某个类只能创建一个对象实例。
如何实现:
- 方式一:饿汉式 : 类加载时,就创建对象,对象加载时间过长、线程安全。
- 方式二:懒汉式: 掉用方法时创建对象,延迟对象创建,线程不安全
示例代码:(饿汉式)
public class Singleton {
private Singleton() {
}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
实例代码:(懒汉式)
public class Singleton2 {
private Singleton2() {
}
private static Singleton2 instance;
public static Singleton2 getInstance() {
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
演示代码:(测试类)
public class Test {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
Singleton2 s3 = Singleton2.getInstance();
}
}
3、final
定义:
final表示“最终的”
修饰范围:类、属性、方法
| - final类“: 表示不能被继承、例如:String类、System类
|- final方法:表示不能被覆盖
|- final属性:表示常量、同时使用大写;注意:static final : 全局常量
面试题:(判断报错)
public class Something{
public int addOne(final int x){
return ++x;
}
}
class Other{
public int i;
}
public class Something{
public void addOne(final Other o){
o.i++;
}
}
public static void main(String[] args){
Other o = new Other();
new Something().addOne(o);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)