1、final关键字
final(最终的) 是一个修饰符
final可以修饰类、修饰方法、修饰变量(成员变量、局部变量)
1、修饰类
被final修饰的类为最终类,一定没有子类
2、修饰方法
被final修饰的方法,在子类中不能重写
3、修饰能量
被final修饰的变量,是一个常量
//修饰类
//用fnial修饰Demo1类,而这个类是不能有子类的
//在这个类中没有添加任何的成员
//这里要注意修饰类时,final放的位置
public final class Demo1 { }
//Demo2
public class Demo2 extends Demo1{ }
//如果我们在这里强行继承有final修饰的类,这就会使系统报错
//修饰方法
public class Demo1 {
//创建final修饰的方法
public final void add(){ }
}
//第二个类
public class Demo2 extends Demo1{
public void add(){}
}
//此时在子类中重写方法就会报错
//修饰变量
public class Demo1 {
final int age = 18;
}
//此时如果要修饰变量,必须要给变量赋值形成一个常量
//这种一般修饰不能改变的变量,比如Π = 3.1415926
2、static关键字
static:修饰符,静态的
static可以修饰成员(成员变量、成员方法)
被static修饰的成员的特点:
1、随着类的加载而加载
2、优先与对象存在
3、被所有对象共存
4、可以直接被类名调用
好处:
节省内存、直接被类名调用
弊处:
生命周期过长、访问出现局限性
**如果用static关键字修饰后,会在内存中产生一个方法区(内存区)可以通过这个更好的理解static关键字
static有两点:
1、类的的访问(四个种类,以前博客有详细介绍)
静态访问静态、静态访问非静态、非静态访问非静态、非静态访问静态
2、变量的修饰,赋值后,其他的再用这个变量后也是这个值,如果这个值被修改了,则其他的引用这个变量的值也会修改。(其实就是数据的共享)
public class Demo1 {
static int age;
String name;
}
//测试类
import com.qf.testam.demo1.Demo2;
public class Program {
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
demo1.name = "lilei";
Demo1.age = 12;
//第一次打印
System.out.println("姓名:"+demo1.name+"年龄:"+Demo1.age);
Demo1 demo2 = new Demo1();
demo2.name = "laowang";
Demo1.age = 14;
//第二次打印
System.out.println("姓名:"+demo2.name+"年龄:"+Demo1.age);
//第三次打印
System.out.println("姓名:"+demo1.name+"年龄:"+Demo1.age);
}
}
打印结果分别是:
姓名:lilei年龄:12
姓名:laowang年龄:14
姓名:lilei年龄:14
//从中就可以知道修改static之后,后面所有的再次引用这种方法该变量的值不变
注意:被static修饰后的变量,引用需要通过类进行引用,不能通过对象进行引用,从上面的代码也可以看出来
3、抽象类
1、抽象类主要是给子类提供一些共性的,如果抽象类没有子类也就没什么意义了
2、抽象类
1、凡是被abstract修饰的类都是抽象类
2、抽象类中包含非抽象方法和抽象方法
3、抽象方法是必须存在抽象类的
4、抽象类是不能创建对象的
5、抽象类是一定要被子类继承的
6、子类在继承抽象类的时候必须重写抽象类中的抽象方法
3、抽象方法是没有方法体的
public abstract void add();
提示:我们需要主要知道抽象类主要是给子类提供共性用的,并且抽象方法没有方法体的
4、接口
1、当一个抽象类中全是抽象方法的时候,那这个抽象类可以用接口来描述
2、接口被实现需要关键字implements
3、类与类继承extends 类与接口是实现implements 接口与接口extends
4、在接口中定义变量时,变量名需要大写的
public final static int A = 4;
注释:接口的具体应用可以参考博客中的电脑连接鼠标等案例
|