0
点赞
收藏
分享

微信扫一扫

【Java基础】详解final和static

梦幻之云 2022-01-06 阅读 77

final

修饰范围:

作用:

        修饰类:

        修饰属性:

        修饰方法:

static

 修饰范围:

作用:

        修饰属性:

        修饰方法:

        修饰代码段:

        修饰类:

        修饰内部类:


修饰范围:

        类,属性,方法,局部变量

作用:

        修饰类:

                当final修饰类的时候,表示这个类不能被继承

        修饰属性:

                1. 当final修饰属性的时候,表示常量,只能被复制一次,赋值后不再改变

                2.当final修饰基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生改变

                3.当final修饰引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但是所指向对象的内容是可以发生变化的,例如可以修改类的属性值

                4.因为只能赋值一次,所以必须对final修饰的成员变量初始化,有两种方法

                        1.在变量声明的时候初始化

public final class Test01 {
    public final int a=12;        //直接初始化
}

                        2.在声明变量的时候不赋初值,然后再类的所有构造函数中对这个变量初始化

public final class Test01 {
    public final int a;

    public Test01(int a) {        //构造函数初始化
        this.a = a;
    }
}

        修饰方法:

                final修饰方法代表这个类可以被继承,但是这个类中用final修饰的方法不能被重写

                注意:重写的前提是子类在父类中能继承此方法,如果final修饰的方法同时权限是private,会导致子类不能继承到此方法,这时子类可以定义同名和同形参的方法,这里不会产生矛盾,因为根本就没有被重写

 修饰范围:

        属性,方法,代码段,内部类(静态内部类或嵌套内部类)

作用:

        修饰属性:

                1.让属性随着类的加载而加载,是类变量,加载早于对象,不需要new即可加载

                2.类变量所在的类的所有对象共用这一个属性,存放在方法区中

                3.调用通过类名.类变量名

                4.不赋初值的话默认为0

        修饰方法:

                1.让方法随着类的加载而加载,是类变量,加载早于对象,不需要new即可加载

                2.类方法所在的类的所有对象共用这一个方法

                3.类方法内部可以创建临时变量,不能调用非静态的实例方法和实例变量,只能调用静态的实例方法和变量

                4.调用通过类名.类变量名

        修饰代码段:

                1.被static修饰的代码块,较静态代码块

                2.位置定义在方法之外,随着类加载执行且执行一次,优先于main方法和构造方法的执行

class test001{
    static {
        System.out.println("123");
    }
    public static void main(String[] args) {

        Test01 test01 = new Test01();
        System.out.println(test01.a);
    }
}
//先输出123再执行main方法

        修饰类:

                static不能修饰普通类

        修饰内部类:

                如果不用static修饰,就需要通过外部类的对象来创建内部类

class test001{
    class In {        //没有static
        public void Print(){
            System.out.println("5");
        }
    }
    public static void main(String[] args) {
        test001 t = new test001();
        In in = t.new In();        //通过test001的对象t间接创建In类的对象in
        in.Print();
    }
}

                如果用static修饰,就可以直接创建内部类

class test001{
    static class In {        //有static
        public void Print(){
            System.out.println("5");
        }
    }
    public static void main(String[] args) {
        In in = new In();        //可以直接创建
        in.Print();
    }
}

                1.被修饰的内部类可以直接作为一个普通类来用,而不需要一个外部类

举报

相关推荐

0 条评论