Java学习笔记(五)修饰符

一、修饰符

Java中修饰符主要分为以下两种,它用于定义类(class)、方法(method)和变量(variable),通常放在语句最前端。

  • 访问修饰符
  • 非访问修饰符
(一)、访问修饰符

Java中使用访问修饰符可以保护被修饰的类、方法和变量,有以下四种:

  • default:默认,即不加以修饰类、接口、变量和方法。
  • private:私有,即在同一类可见,但在其他类中不可见(不能用于修饰外部class)。
  • public:公有,即对所有类都可见
  • protected:对同一包内(package)的类及子类可见(不能用于修饰外部class)。
访问修饰符当前类同一包内及包内子孙类不同包的子孙类其他包
defaultYYNN
privateYNNN
publicYYYY
protectedYYY or NN
1、default访问修饰符

使用默认修饰符修饰的变量和方法对于同一包的类是可见的,接口内变量隐式声明为public static final,而接口内的方法的访问修饰符默认为public

2、private访问修饰符

使用私有访问修饰符的方法、变量和构造方法只能被所属类访问,并且类和接口不能被修饰为该访问修饰符。它保护了被修饰得方法、变量和构造方法免受其他类篡改,体现程序设计安全性的概念。若想让外部类可以访问到private修饰的变量,可以通过在类中编写构造方法并赋值或输出该私有变量。如下表示。

//Access.java
package day4;

public class Access {
       private String myName = "seanOY";
       public String getPrivateVariable() {
              return this.myName;
       }
       public void setPrivateVariable(String newName) {
              this.myName = newName;
       }
}
//AccessModifier.java
package day4;

public class AccessModifier {
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              String cartoonName = "哆啦A梦";
              Access access = new Access();            
              System.out.println(access.getPrivateVariable());
              access.setPrivateVariable(cartoonName);
              System.out.println(access.getPrivateVariable());
       }
}
/*  输出信息
seanOY
哆啦A梦
*/
3、public访问修饰符

使用公有访问修饰符的变量、方法和类对任何类都可访问。如果不同的public类分布在不同的包,则需要import对应的包。

4、protected访问修饰符

使用protected访问修饰符产生的结果需要分两点来分析,详见Java protected 关键字详解

  • 子类和父类在同一个包:被protected声明的变量、方法和构造器能被同一包中的任意类访问
  • 子类和父类不在同一个包:子类实例可以访问从父类继承的方法,但不能访问父类实例的protected方法。
package day4;

public class Access {
       public class Father{
              protected String printName()
              {
                     return "seanOY";
              }
       }
       
       class Son extends Father{//子类重写了父类的printName()方法
              protected String printName() {
                     return "Seanoy";
              }
       }
}
5、访问控制与继承的原则
声明父类的修饰符声明子类的修饰符
publicpublic
protectedprotected/public
private不能被继承
(二)、非访问修饰符

非访问修饰符主要有以下几种(在上一篇文章有提到Java学习笔记(四)变量类型):

  • static:用于声明静态变量,局部变量不能声明为静态变量。(类似C/C++ static)
  • final:通常和static一起出现,用于声明常量。
  • abstract:用于创建抽象类和抽象方法。
  • synchronized和volatile:主要用于线程的编程。
  • transient:用于预处理类和变量的数据类型。
1、static修饰符

静态的意思,用此修饰符的变量和方法有如下描述:

  • 静态变量
    独立于对象,且对象会保存(拷贝)静态变量的值。(类似C/C++的static修饰符)

  • 静态方法
    独立于对象,且静态方法不能使用类的非静态变量(non static variable)。

p.s. 对类的静态变量和方法可以用完全限定名(如classname.variablename)来获取。

2、final修饰符

最终的意思,用于修饰常量。并且用final修饰的父类可以被子类继承,但不能被其重写

3、abstract修饰符

抽象的意思,抽象类不能实例化对象,其目的是为了日后能对该类进行扩充。它不能与final一起出现;如果一个类含有抽象方法,那么它需要是抽象类;抽象方法的实现由子类提供,且子类需要实现父类的所有抽象方法,除非子类也是抽象类

4、synchronized修饰符

同步的意思,用于多线程时保护变量,同一时间该变量只能被同一线程访问

5、transient修饰符

短暂的意思,序列化的对象包含被transient修饰符修饰过的实例变量时,JVM将跳过该变量(不保存该变量)。

6、volatile修饰符

容易变化的意思,使用volatile修饰的成员变量在每次被线程访问时,都会强制从共享内存中重新读取该成员变量的值,更改该变量时也强制线程将变化值写入共享内存。此目的为使多个线程总会见到某个成员变量的同一个值。(volatile引用对象可能为null

参考链接:
菜鸟教程-Java 修饰符

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值