zoukankan      html  css  js  c++  java
  • java----关键字

     static修饰字段:

    使用static关键字修饰一个字段:声明的static变量实际上就是一个全局变量

    static修饰的方法不可以重写,所以接口和抽象方法中定义的static方法必须是需要方法体的。另外接口中定义的变量必须附初始值,抽象类定义的变量可以不需要附初始值。

    使用static关键字修饰一个方法:可以直接使用类调用方法,和对象没有关系了

    使用static关键字修饰一个类:内部类

    如果需要了解跟多static关键字修饰字段,参考我的另一篇博客:https://www.cnblogs.com/yanxiaoge/p/10658660.html

    public class Demo {
        public static void main(String[] args){
        System.out.print(Test.name);//一般定义静态字段,最好又类来调用;
      //System.out.print(Test.name1);   //只有定义了静态字段,类才可以直接调用
    }
    }
     
    class Test{
       String name1 = "dddsdfsd";
           static String name = "dd";
        
    }
    

      

     static修饰方法:

    public class Demo {
        public static void main(String[] args){
        Test.setCountry("中国");
        
        Test h = new Test();
        System.out.print(h.country);
        }
    }
    class Test{
    	static String country;
    	public static void setCountry(String country){ //静态方法只能访问静态字段;不能访问非静态字段
    		Test.country = country;
    	} 
    }
    

      

     final:

    private static final int NUM = 10;  //final表示该字段为常量,通常全部大写
    

    final 修饰一个类,则该类不能被继承;final不可以修饰抽象类和接口

    final 修饰一个方法不能重写,和static一样。

    将类、方法、变量声明为final能够提高性能,这样JVM就有机会进行估计,然后优化。

    接口中的变量都是final

    常量类

    public class Demo {
        public static void main(String[] args){
            Person person = new Person(11);
    
        }
    }
    
    class Constant{  //将常量专门放在一个类中,让其他的类继承他[常量不一定必须初始化,可以在构造器中默认赋值(如果采用这种方法给常量赋值,常量不能用static修饰)]
        public static final int NUM = 10;  //加上static,目的不用创建了对象,就可以直接调用常量;
    
    }
    
    class Person extends Constant{
        private final int NUM;
        public Person(int id){
        NUM = id;          //在构造器中的初始化
        }
    
        {
            System.out.println(Constant.NUM);
        }
    }

      

     volatile:

    volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,但是注意 volatile不能确保原子性,在访问volatile变量时,不会执行加锁操作,因此也就不会执行线程阻塞。所以volatile变量是一种比sychhronized关键字更轻量级的同步机制。

    原子性:原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。比如 a = 1;

    volatile的适用场景:

      1、对变量的写入操作不依赖其当前值(如 number++ 、count = count * 5等)

      2、该变量没有包含在具有其它变量的不变式中

      3、volatile关键字另一个作用就是禁止指令重排优化

    参考:https://www.cnblogs.com/xuwenjin/p/9051179.html

    https://www.cnblogs.com/chengxiao/p/6528109.html

    补充可以看看CAS:https://blog.csdn.net/v123411739/article/details/79561458

  • 相关阅读:
    sql 拼写
    五、URL Routing介绍
    六、防止JavaScript注入攻击
    七、创建自定义的HTML Helper
    二、理解Models,Views,Controllers
    一、使用ASP.NET MVC创建应用程序
    自己写的临时表应用
    四、理解视图层,视图数据和HTML辅助
    三、理解控制器、控制器动作和ActionResults
    Extensions (扩展)方法
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10658582.html
Copyright © 2011-2022 走看看