java类的高级特性

  • 类包:类包实际上是java程序管理非常有效的机制,每个类文件必须隶属于一个类包,这样有效的解决了类名冲突的问题,在使用类的时候只需要指定类的完整路径,就可以很便捷的找到我们想找到的类。
  • 包名:com.demo.package类似的形式,必须在类文件的第一行,要求包名全部小写字母
  • 包的导入:import关键字
// 导入类
import java.lang.*;
// 导入静态方法或者静态成员变量
import static java.lang.Math.PI;
  • final变量:用final关键字声明的变量即为常量,不可修改;当通过final生命对象时,对象指向的内存地址不会变化;final声明的变量命名采用大写字母用下划线连接 CODE_MESSAGE
public class FinalDemo{
    final int VALUE_ONR = 6; // final成员常量不可以修改
    final int VALUE_TEO;  // 空白成员常量在构造函数中赋值
    public void FinalDemo(){
        VALUE_TWO = 8;
    }
    int do1(final int x){ // final参数,不可以更改参数的值
        return x+1;
    }
    int do2(){
        final int num = 1;  // final局域变量,不可更改
    }
    
}
  • 全局常量:这里需要注意一点:final+static生命的常量,从一开始定义时就已经分配了相应的内存,不会再变化,哪怕重新初始化一个类
  • final方法:final的方法在子类中不能被重写,如果定义了一个名称相同的方法,实际上只是子类自己的同名方法而已;另外就是final方法的执行效率高于不是final的方法
  • final类:final类不能被继承,final类中的方法隐式的被定义为final方法,但是成员变量可以为非final的
  • 内部类:在类中再定义一个类,内部类可以分为成员内部类、局部内部类和匿名类
  • 成员内部类:
// 定义成员内部类
public class OutClass{
    private int i = 1;
    private void test(){
        // doSomething
    }
    
    // 内部类一定要绑定在外部类的实例上,使用new关键字
    // 内部类的对象实例化必须在外部类或者外部类的非静态方法中实现
    InClass inClass = new InClass();
    // 内部类可以被定义为private和protected
    public class InClass{
        // 内部类可以使用外部类的属性和方法,哪怕是private的
       i++;
       test();
    }
    
    public static void main(String[] args){
        OutClass outClass = new OutClass();
        // 在main方法中必须使用OutClass来创建内部类对象,也就是说如果没有外部类的对象,就没有内部类的对象
        OutClass.InClass inClass = out.new InClass();
    }
}
  • 局部内部类:定义在类的局部未知,例如类的方法中,但是局部内部类隶属于方法,不隶属于外部类,外部类不能访问内部类
  • 匿名内部类:将return和内部类的定义放在一起
return new A(){
    内部类体
}
  • 静态内部类:在类加上static就是静态内部类,静态内部类可以声明静态成员;静态内部类不可以使用外部类的非静态成员

猜你喜欢

转载自blog.csdn.net/wangjunjie0817/article/details/89138013