5-- java修饰符

java中的修饰符:
        访问控制修饰符 : default, public , protected, private
        非访问控制修饰符 : final, abstract, static, synchronized......
        default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

        private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

        public : 对所有类可见。使用对象:类、接口、变量、方法

        protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
        transient 修饰符:
                transient修饰变量:
                            序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
                            该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
        synchronized修饰符:
                synchronized修饰方法:
                            主要用于线程的编程
                            synchronized方法同一时间只能被一个线程访问
                            synchronized 修饰符可以应用于四个访问修饰符
        volatile 修饰符:
                volatile修饰变量:
                            volatile 修饰的成员变量在每次被线程访问时,
                            都强制从共享内存中重新读取该成员变量的值。
                            而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。
                            这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
                            一个 volatile 对象引用可能是 null。                            
        abstract修饰符 :
                abstract修饰类:
                            抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
                            如果一个类包含抽象方法,那么该类一定要声明为抽象类
                            抽象类可以包含抽象方法和非抽象方法
                            一个类不能同时被 abstract 和 final 修饰                            
                abstract修饰方法:
                            抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
                            抽象方法不能被声明成 final 和 static
                            任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类        
        final修饰符:
                        1.    final不能用于修饰构造方法。 
                        2.    JAVA接口中成员变量必须是final类型的
                        3.    每个对象都用重新初始化,也就是要重新调用构造方法
                final修饰变量:
                            final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
                            可以在定义时初始化,也可在构造方法中赋值。(你可以先定义不给赋值,但是必须保证在使用的时候赋过值)
                final修饰方法:
                            final方法不能被子类的方法覆盖,但可以被继承。
                final修饰类:
                            final类不能被继承,没有子类,final类中的方法默认是final的。
                final修饰的索引:
                            对象不能改变,但是对象的内容可以改变。
                例如:
                final A a = new A();
                a.value = 2;
                这样是可以的,但是如果再从新赋值a就报错了:a = new A();
                接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
                1.    首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public static的 ,是所有实现类共有的 .假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,就可以用接口区分。
                2.    其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
                3.    最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。

        static修饰符:
                        1.     用来修饰类方法和类变量
                static修饰变量:
                                将其变为类的成员,从而实现所有对象对于该成员的共享
                                static变量可以在定义时初始化,也可以在静态代码块中赋值(不可在构造方法中赋值)。
                static修饰方法:
                                将其变为类方法,可以直接使用“类名.方法名”的方式调用
                                static 关键字用来声明独立于对象的静态方法。
                                静态方法不能使用类的非静态变量。
                                静态方法从参数列表得到数据,然后计算这些数据。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值