17.static、final、abst修饰符:
1>static修饰的变量叫做静态变量:
· 类中的静态变量属于类,而不属于某个特定的对象。
· 类的静态成员可以与类的名称一起使用,而不需要创建类的对象。
· 整个类中静态变量的副本只有一个。
· 声明为static的变量实质上就是全局变量。
2>static修饰的方法叫做静态方法,也叫做类方法:
· 静态方法只能访问其它的静态方法,不能访问非静态的方法。
· 静态方法中没有this关键字。
· 静态方法不能覆盖(重写)为非静态的方法。
3>静态代码块:
语法:
static{//静态代码块
}
注意事项:
· 如果需要通过计算来初始化静态变量,可以声明一个静态块。
· 静态块在该类中只被加载时执行一次。
· 只能初始化类的静态数据成员。
public class StaticTest {
static int[] values = new int[10];
static {
for (int i = 0; i < values.length; i++) {
values[i] = i;
}
}
}
4>单态设计模式:
单态设计模式:
采取一定的方法保证在整个如见系统中,某个类只能存在一个对
象示例,并且该类只能提供一个取得其对象示例的方法。
方法1:(推荐使用更安全)
public class TestSingle {
// 前面加上private static final修饰符后只能产生一个对象
private static final TestSingle onlyOne = new TestSingle();
private TestSingle() {
// 不能再类的外部使用new,但可以在类的内部使用
}
// 外面只能通过方法调用获得一个对象
public static TestSingle getTestSingle() {
return onlyOne;
}
}
方法二:
public class TestSingle {
private static TestSingle onlyOne = null;
public static synchronized TestSingle getonlyOne() {
if (onlyOne == null) {
onlyOne = new TestSingle();
}
return onlyOne;
}
}
5>final修饰符:
· final修饰的类不能被子类继承。
· 使用final修饰的方法不能被子类覆盖。
· 类中一个final修饰的方法只被修饰一次。
· 如果一个类为final类,那么它的所有方法都为隐士的final方法。
· 一个变量可以声明为final,这样可以阻止它的内容被修改。
· 声明final变量以后,变量只能被初始化一次,然后就不能被就改了。
· 一个final变量实际上是一个常量。
6>abstract修饰符:
· 修饰的类即为抽象类,不能被示例话。
· 构造方法和static方法不是抽象的。
· 父类的抽象方法往往在子类中实现,抽象类可以具有指向子类的对
象引用。
· 抽象类的方法可以是具体方法,也可以是抽象方法。但一个类中如
果有抽象方法那么这个类一定是抽象类,应该在该类前加上abstract
关键字来修饰。
abstract class Shape {//抽象类
public double length;
public double width;
public Shape(double length, double width) {
this.length = length;
this.width = width;
}
//抽象方法
public abstract double area();
}
class Rectangle extends Shape {
Rectangle(double num, double num1) {
super(num, num1);
}
//实现父类的抽象方法
public double area() {
return length * width / 2;
}
}
public class TestShape {
public static void main(String[] args) {
Shape sp = new Rectangle(4, 2);
System.out.println(sp.area());
}
}