美文网首页
Java中的控制符修饰符总结

Java中的控制符修饰符总结

作者: LazzMan | 来源:发表于2019-03-07 14:27 被阅读0次

    类修饰符:

    public(公共访问控制符) 将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。

    friendly(默认访问控制符)只有在相同包中的对象才能使用这样的类。

    abstract (抽象修饰符)将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。

    final (最终修饰符)将一个类生命为最终(即非继承类),表示他不能被其他类继承。


    成员变量修饰符:

    对于成员变量,子类与父类之间没有重写或重载的关系,只有能否访问、继承的关系,子类如果也定义了相同的变量,子类方法会优先读取子类定义的变量,子类没有重定义变量,则会去访问父类的变量。

    public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。

    private(私有访问控制符)指定该变量只允许本类的方法访问,其他任何类(包括子类)中的方法均不能访问。

    protected(保护访问控制符)指定该变量可以被本类和子类访问。在子类中可以覆盖此变量。

    friendly(默认访问控制符) ,在同一个包中的类可以访问,其他包中的类不能访问。

    final (最终修饰符)指定此变量的值不能变。

    static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。

    transient(过度修饰符)告诉编译器,在类对象序列化的时候,此变量不需要持久保存。

    volatile(易失修饰符)保证了用volatile修饰的变量对所有线程的可见性,volatile 修饰的成员变量在每次被线程访问时,都强制从主内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到主内存。

    volatile不能解决数据竞争问题(共享数据的线程安全问题)

    /**
     * 演示volatile不能解决数据竞争问题,只能保证变量可见性。
     * <pre>
     * count++的字节码层面:
     *  getstatic        //读取静态变量(count)volatile保证所有线程再这一步读取到的值是主内存的最新值,但由于count++计算并不是原子操作(原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)),还是会发生线程安全问题
     *  iconst_1        //定义常量值 1
     *  iadd               //count增加1
     *  putstatic        //把count结果同步到主内存
     * </pre>
     *
     * @author nodcat
     */
    public class VolatileDemo {
    
        public volatile static int count = 0;
    
        public static void main(String[] args) throws InterruptedException {
    
            for (int i = 0; i < 10; i++) {
                new Thread(() -> {
                    try {
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    for (int j = 0; j < 100; j++) {
                        count++;
                    }
                }).start();
            }
    
            Thread.sleep(2000);
            System.out.println("count=" + count);
    
        }
    
    }
    

    方法修饰符:

    public(公共控制符)指定方法可以从所有类访问。子类可以访问、继承、重载、重写该方法。

    private(私有控制符)指定此方法只有本类的方法能访问,其他的类不能访问(包括子类)。子类无法访问该方法,自然也无法继承、重载该方法,对于子类不可见,但子类可以自己定义相同签名的方法。

    protected(保护访问控制符)指定该方法可以被本类和子类进行访问,在子类中可以重写(覆盖)此变量。子类可以访问该方法,自然也可以继承、重载、重写该方法。

    final (最终修饰符)指定该方法不能被重写(覆盖)。子类可以访问该方法,自然也可以继承、重载该方法,但无法重写该方法。

    static(静态修饰符)指定不需要实例化就可以调用的方法。

    abstract(抽象修饰符)指定该方法是一个抽象方法,所在的类必须是抽象类,需要由子类实现该方法。

    synchronized(同步修饰符) 如果声明一个方法时,在前面加上关键字synchronized,那么这个方法就只能由一个线程运行。只能由一个线程运行是每次只能由一个线程运行的意思,并不是说仅能让某一特定线程运行。这种方法称为synchronized方法,有时也称为同步方法。

    native(本地修饰符)指定此方法的方法体是用其他语言在程序外部编写的。

    相关文章

      网友评论

          本文标题:Java中的控制符修饰符总结

          本文链接:https://www.haomeiwen.com/subject/zwjcpqtx.html