Java修饰符(访问控制修饰符(default、private、public和protected)和非访问修饰符(static、final、abstract、volatile等))

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38358499/article/details/98497023

访问控制修饰符

  • defult:默认,什么都不写,在同一包中可见,不使用任何修饰符,默认访问修饰符。使用对象:类、接口、变量、方法
  • private:在同一类内可见。使用对象:变量、方法。声明私有访问类型的变量只能通过类中公共的getter方法被外部类访问,用来隐藏类的实现细节和保护类的数据
  • public:对所有类可见。使用对象:类、接口、变量、方法。Java程序中main()方法必须设置成公有的
  • protected:对同一包内的类和所有子类可见。使用对象:变量、方法。父类中声明为protected的方法在子类中可以声明为protected、可以声明public,不能声明为private

非访问修饰符

  • static:只是一个标志,用来修饰方法和类变量,有static修饰,表明被修饰的成员属于类,没有static修饰,表明它是属于实例的,static成员(Field、方法、初始化块),与类共存亡。声明独立于对象的静态方法(从参数列表得到数据,然后计算这些数据);声明独立于对象的静态变量(静态变量也被成为类变量,只有一份拷贝)。注意:局部变量不能被声明为static变量
    //static修饰符用来创建方法和类变量
    public class InstanceCounter
    {
    	private static int numInstances = 0;
    
    	protected static int getCount(){
    		return numInstances;
    	}
    	private static void addInstance(){
    		numInstances++;
    	}
    
    	InstanceCounter(){
    		InstanceCounter.addInstance();
    	}
    
    	public static void main(String[] arguments){
    		System.out.println("starting with " + InstanceCounter.getCount() +  " instance");
    		for(int i = 0; i < 500; ++i){
    			new InstanceCounter();
    		}
    		System.out.println("Created " + InstanceCounter.getCount() + " instances");
    	}
    
    }

    public class StaticTest {
    	//定义一个类Field,它与StaticTest类本身gongcunw
    	static int count = 20;
    	public static void main(String[] args)
    	{
    		//之定义了一个st引用变量,但为指向任何有效的对象
    		StaticTest st = null;
    		//对于静态field、static方法,我们建议将实例可以直接代替成为类名
    		System.out.println(StaticTest.count);
    	}
    }

    注意:必须先有类,再有对象,static成员与类共存亡。static成员不允许访问非static成员,this引用,super都不允许出现在static方法中

  • final :用于修饰类,用于修饰变量:成员变量(类变量和实例变量)和局部变量(方法里局部变量,代码块的局部变量),用于修饰方法。final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的,目的是防止该方法的内容被修改,通常和static修饰符一起使用来创建类常量。注意:定义成员变量时需要指定默认值(final int a = 6;)或者(final static double d; static{ d = 5.6;}),定义之后不可修改内容;final方法被重写,通过修饰private访问权限即可
    //final修饰实例变量
    public class FinalInstanceVarTest {
    	//final修饰的实例变量必须指定初始值,只能在3个地方指定初始化,并且只能有一个
    	//1.定义时指定初始值
    	//final int age = 10;
    	
    	//2.初始化块
    	/*
    	final int age;
    	{
    		age = 10;
    	}
    	*/
    	
    	//3.构造器方法
    	final int age;
    	{
    		System.out.println("~~~进入初始化块~~~");
    	}
    	FinalInstanceVarTest()
    	{
    		//构造其中可为final实例变量赋值,普通方法不允许为final实例变量赋值
    		age = 45;
    	}
    	
    	public static void main(String[] args)
    	{
    		FinalInstanceVarTest ft = new FinalInstanceVarTest();
    		System.out.println(ft.age);
    	}
    }
    //final修饰类变量
    public class FinalStaticVarTest {
    	//如果final修饰类变量,可以在2个地方为final类变量指定初始值,最多只能指定一次初始值
    	//普通类方法、普通方法、普通初始化块都不能为final实例变量赋值
    	//1.定义时指定初始值
    	//final static int age = 20;
    	
    	//2.静态初始化块
    	final static int age;
    	static{
    		 age = 20;
    	}
    	
    	public static void main(String[] args)
    	{
    		System.out.println(FinalStaticVarTest.age);
    	}
    }
  • abstract:修饰符,用来创建抽象类(为了将来对类进行扩充,一个类不能同时被abstract和final修饰)和抽象方法(一种没有任何实现的方法,该方法的具体实现由子类提供,不能声明成final和static)
  • volatile:成员变量在每次被线程访问时,强制从共享内存中重新读取该成员变量的值,当成员变量发生变化时,会强制线程将变化值回写到共享内存。一个volatile对象引用可能是null
  • synchronize:可以应用于四个访问修饰符,关键字声明的方法同一时间只能被一个线程访问
  • transient:该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型

猜你喜欢

转载自blog.csdn.net/qq_38358499/article/details/98497023